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、是發送方的一個計時器期限到了,這時就把當前已有的緩存數據裝入報文段發送出去。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章