天天看點

TCP傳輸協定如何進行流量控制?

TCP傳輸協定如何進行流量控制?

TCP流量控制,簡單來說就是讓資料傳輸端傳輸的速率不要太快,讓資料接收端來得及接收,利用滑動視窗機制可以很友善的在TCP連接配接上實作對資料傳輸端的流量控制。TCP的視窗機關是位元組,不是封包段,資料傳輸端的發送視窗不能超過接收端給出的接收視窗的數值,流量控制的機制是控制丢包率,主要目的:讓資料傳輸端了解資料接收端目前的接收能力,可靈活調整傳輸速率。流量控制機制圖如下圖所示:

TCP傳輸協定如何進行流量控制?

滑動視窗:

TCP采用大小可變的滑動視窗進行流量控制,視窗大小的機關是位元組。

資料傳輸視窗在連接配接建立時由雙方商定。但在通信的過程中,資料接收端可根據自己的資源情況,随時動态地調整對方的傳輸視窗大小。滑動視窗執行個體圖如下圖所示:

TCP傳輸協定如何進行流量控制?

滑動視窗引進原由:

我們可以把視窗了解為緩沖區(但是有些視窗和緩沖區又不太一樣)。

如果沒有這些“視窗”,那麼TCP每發送一段資料後都必須等到資料接收端确認後才能發送下一段資料,這樣做的話TCP傳輸的效率實在是太低了。

解決的辦法就是在發送端等待确認的時候繼續發送資料,假設發送到第X個資料段是收到資料接收端的确認資訊,如果X在可接受的範圍内那麼這樣做也是可接受的。這就是視窗(緩沖區)引入的緣由。

A、資料接收端視窗 X

接收端緩沖區大小。接收端将此視窗值放在 TCP 封包的首部中的視窗字段,傳送給發送端。

B、擁塞視窗 Y

發送端緩沖區大小

C、資料傳輸視窗 Z

發送視窗的上限值 = Min [X, Y]

① 當 X < Y 時,是接收端的接收能力限制資料傳輸視窗的最大值。

② 當 Y < X 時,則是網絡的擁塞限制資料傳輸視窗的最大值。

滑動視窗執行個體介紹:

資料傳輸端已發送了 400 位元組的資料,但隻收到對前 200 位元組資料的确認,同時視窗大小不變。還可發送 300 位元組。

TCP傳輸協定如何進行流量控制?

資料傳輸端收到了對方對前 400 位元組資料的确認,但對方通知資料傳輸端必須把視窗減小到 400 位元組。現在資料傳輸端最多還可發送 400 位元組的資料。

滑動視窗需掌握的知識點:

A、資料接收端将自己可以接受的緩沖區大小放入TCP首部中“視窗大小”字段,通過ACK來通知資料傳輸端。

B、視窗大小字段越大,說明網絡的吞吐率越高

C、視窗大小指的是無需等待确認應答而可以繼續發送資料的最大值,即就是說不需要資料接收端的應答,可以一次連續的發送資料。

D、作業系統核心為了維護滑動視窗,需要開辟發送緩沖區,來記錄目前還有哪些資料沒有應答,隻有确認應答過的資料,才能從緩沖區删除。PS:發送緩沖區如果太大,會有空間開銷。

E、資料接收端一旦發現自己的緩沖區快滿了,就會将視窗大小設定成一個更小的值通知給資料傳輸端,資料傳輸端收到這個值後,就會減慢自己的發送速度。

F、如果資料接收端發現自己的緩沖區滿了,就會将視窗大小設定為0,此時資料傳輸端不再傳輸資料,但是需要在定期發送一個視窗探測資料段,使資料接收端把視窗大小告訴資料傳輸端。

PS:在TCP的首部,有一個16為視窗字段,此字段就是用來存放視窗大小資訊的。

TCP封包段發送時機的選擇

1、TCP維持一個變量,它等于最大封包段長度MSS,隻要緩存中存放的資料達到MSS位元組就組裝成一個TCP封包段發送出去。

2、由發送方的應用程式指明要求發送封包段,即TCP支援的推送操作。

3、是發送方的一個計時器期限到了,這時就把目前已有的緩存資料裝入封包段發送出去。

繼續閱讀