TCP 的流量控制

2021-10-24 20:24:04 字數 2703 閱讀 3121

tcp 的流量控制

為什麼要控制tcp傳輸流量呢?難道資料傳輸越多不好嗎?那麼我們就來討論一下接收過程

假設主機a應用要傳送資料hello給主機b,應用先把資料傳送到主機a tcp傳送緩衝區中,tcp在合適的時間再將資料將hello傳送至主機b的tcp接收緩衝區中,然後主機b的應用從tcp接收緩衝區中取出hello資料

問題由以下幾點

上述問題將導致資料丟失,因為沒有空間儲存下來,而且也成功收到了。所有綜合上述,tcp必須對資料流量進行控制,通過滑動視窗實現。

a 向 b 傳送資料。在連線建立時,b 告訴 a:「我的接收視窗 rwnd = 400(位元組)」。

舉例分析b先告訴a自己只能接收400位元組大小的資料

當b向a傳送ack = 1, ack = 201, rwnd = 300訊息時,有兩點重要的訊息,一)下一次接收資料的開始序列號是201;二)只能接收300位元組大小的資料(a只能發201~500的資料),此時視窗大小有調整

當b向a傳送ack = 1, ack = 501, rwnd = 100訊息時,有兩點重要的訊息,一)下一次接收資料的開始序列號是501(a只能發501~600的資料);二)只能接收100位元組大小的資料,此時視窗大小有調整

當b向a傳送ack = 1, ack = 501, rwnd = 100訊息時,有兩點重要的訊息,一)下一次接收資料的開始序列號是501(a只能發501~600的資料);二)只能接收100位元組大小的資料,此時視窗大小有調整

當b向a傳送ack = 1, ack = 601, rwnd = 0訊息時,有兩點重要的訊息,一)下一次接收資料的開始序列號是601(但是不能傳送資料,沒有空間接收資料);二)沒有空間接收資料,此時視窗大小有調整

上述只是單向說明,反之亦然。可以看出滑動視窗可以實現流量控制

我們來分析一種異常情況

b 向 a 傳送了零視窗的報文段後不久,b 的接收快取又有了一些儲存空間。於是 b 向 a 傳送了 rwnd = 400 的報文段。但這個報文段在傳送過程中丟失了。a 一直等待收到 b 傳送的非零視窗的通知,而 b 也一直等待 a 傳送的資料。如果沒有其他措施,這種互相等待的死鎖局面將一直延續下去。

因為a在等b更改視窗大小(b其實通知更改視窗大小,a以為沒通知更改視窗大小),b在等a傳送資料(b其實通知更改視窗大小,以為a收到了,自己會收到資料)

如何解決?,可以借鑑超時重傳的思路,可以為每乙個tcp 連線設有乙個持續計時器

只要 tcp 連線的一方收到對方的零視窗通知,就啟動該持續計時器。若持續計時器設定的時間到期,就傳送乙個零視窗探測報文段(僅攜帶1位元組的資料),而對方就在確認這個探測報文段時給出了現在的視窗值。

接下來將討論效率問題,由於tcp傳輸最小需要20位元組的首部資訊,那麼我們的資料大小多大合適呢?

顯示太小不合適,那麼太大可以嗎?也不行,ip層會分包,資料鏈路層有最大輸出單元等等限制。那tcp是如何決定傳輸多大的資料單元呢

可以用不同的機制來控制 tcp 報文段的傳送時機:

第一種機制是 tcp 維持乙個變數,它等於最大報文段長度 mss。只要快取中存放的資料達到 mss 位元組時,就組裝成乙個 tcp 報文段傳送出去。

第二種機制是由傳送方的應用程序指明要求傳送報文段,即 tcp 支援的推送 (push) 操作。

第三種機制是傳送方的乙個計時器期限到了,這時就把當前已有的快取資料裝入報文段(但長度不能超過 mss)傳送出去。

糊塗視窗綜合症:每次僅傳送乙個位元組或很少幾個位元組的資料時,有效資料傳輸效率變得很低的現象

傳送方糊塗視窗綜合症

傳送方 tcp 每次接收到一位元組的資料後就傳送。這樣,傳送乙個位元組需要形成 41 位元組長的 ip 資料報。效率很低。

如何解決呢?nagle 演算法

接收方糊塗視窗綜合症

當接收方的 tcp 緩衝區已滿,接收方會向傳送方傳送視窗大小為 0 的報文。;若此時接收方的應用程序以互動方式每次只讀取乙個位元組,於是接收方又傳送視窗大小為乙個位元組的更新報文,傳送方應邀傳送乙個位元組的資料(傳送的 ip 資料報是 41 位元組長),於是接收視窗又滿了,如此迴圈往復。

解決方法:讓接收方等待一段時間,使得或者接收快取已有足夠空間容納乙個最長的報文段,或者等到接收快取已有一半空閒的空間。只要出現這兩種情況之一,接收方就發出確認報文,並向傳送方通知當前的視窗大小。

TCP流量控制

一般來說,我們總是希望資料傳輸的更快一些,但如果傳送方把資料傳送的很快,而接收方來不及接收,這就可能造成資料的丟失。流量控制就是讓傳送方的傳送速率不要太快,讓接收方來得及接收。對於成塊資料流,tcp利用滑動視窗機制來實現流量的控制,對於互動資料流,tcp利用捎帶ack和nagle演算法來實現流量的控...

TCP流量控制

如果傳送端傳送的速度較快,接收端接收到資料後處理的速度較慢,而接收緩衝區的大小是固定的,就會丟失資料。tcp協議通過 滑動視窗 sliding window 機制解決這一問題。滑動視窗 傳送端發起連線,宣告最大段尺寸是1460,初始序號是0,視窗大小是4k,表示 我的接收緩衝區還有4k位元組空閒,你...

TCP流量控制

流量控制 一般來說,我們總是希望資料傳輸的更快一些,但如果傳送方把資料傳送的很快,而接收方來不及接收,這就可能造成資料的丟失。流量控制就是讓傳送方的傳送速率不要太快,讓接收方來得及接收。對於成塊資料流,tcp利用滑動視窗機制來實現流量的控制,對於互動資料流,tcp利用捎帶ack和nagle演算法 來...