白話TCP運輸控制 二 TCP的流量控制

2021-08-21 09:08:53 字數 1517 閱讀 9341

上篇講的是擁塞控制,這篇講流量控制。還是以運輸糧食為場景。

雖然運輸的擁塞控制能夠在運輸效率和擁塞之間達到平衡,但是運輸糧食的整體效率還受乙個關鍵因數影響,那就是對岸西村糧食的卸貨能力。假設糧食運送到對岸後,要卸放在乙個倉庫裡,隨後被運往其他地方。如果運輸的太快,倉庫載貨能力有限,糧食又沒有及時被消耗,工人們只好等待倉庫騰出地方來卸下新的糧食。

顯然這樣會影響這個工程的效率。後來工人們又想了乙個方案:每次卸完糧食返回時,告訴東村的搬運工人當前對方倉庫的容量。這樣東村的工人就做到心中有數,當倉庫容量非常充裕時,每船的糧食資料就多裝點,如果倉庫已經快滿了,就減少每船糧食的數量。注意這裡只是調整的每船盛裝糧食的數量,沒有調整傳送船的數量。傳送船隻的數量是用來調節擁塞的。

為了加快工作效率,減少溝通成本,工人們的智慧型又發揮出來了。他們規定每只船上都有3面旗幟。一面旗幟a寫上運輸糧食的編號,另一面旗幟b在船隻返航時寫上西村倉庫還能盛裝的數量。還一面旗幟c寫上已收到糧食的最大序號。例如乙隻船要傳送編號201-500的糧食,a面旗幟上寫上最小的編號數201,當該船糧食安全運輸到西村後,西村卸貨的工人清點該船糧食,共計收到300數量的糧食。此時他們要告訴東村的工人已經收到了300數量的糧食,根據a面旗幟的數字201,就在c面旗幟寫上501,表明已收到300(501-201)數量的糧食,同時也是期望他們下次傳送編號為501開始之後的糧食。返回時還需要報告東村,西村倉庫還能裝多少糧食的數量。如果西村倉庫還能盛裝600的糧食,西村工人就在b面旗幟上寫上600。當工人們看到返回船隻b面旗幟上為600,就知道此刻最多只能傳送600數量的糧食,如果糧食還夠600的話,即要傳送編號為501-1100共計600數量的糧食。同時還規定如果倉庫已滿就在返回船隻b面旗幟上寫0,等到倉庫有了空餘地方,專門會有人過去通知東村工人。

按照這種方式運輸糧食一直相安無事。可是有一天卻發生了情況,導致運輸中斷了。這是怎麼回事呢?工人同心協力,組織得當,很快對岸倉庫就被塞滿,返回的船隻上b面旗幟都書寫為0。這樣東村工人只能幹等著,等西村有人來通知倉庫有空餘地方了。可是那天水面實在太堵了,西村跑腿工人後來竟然發生事故沉船了。東村工人左等不來右等不來報信的,運輸被迫中斷。

為了防止該類事件再次傳送,工人們又規定,如果被告知對方倉庫已滿,就開啟乙個鬧鐘,時間到了就派乙隻小船前去打聽對方倉庫的情況。這樣即使西村派過來的跑腿工人不幸丟失,也能保證運輸繼續下去。

上述場景中abc面旗幟就代表tcp協議頭中的3個字段,乙個是32位系列號,乙個是32位確認號,乙個是16位視窗大小。如下圖所示:

傳送資料時的示意圖為:

另外上面場景中的鬧鐘對應tcp協議棧中的持續定時器(persist timer),他的作用是,傳送方只要接收到了0視窗通告,就開啟該定時器,週期性的向接收方傳送1位元組的0視窗探測報文。

tcp流控制原理

流控制,又叫做流量控制。接收端在接收傳送端傳送的資料報的時候,如果是高負荷情況下就無法繼續接收資料,只能丟棄,丟棄後傳送端超時重傳,又加重了阻塞。所以,用tcp提供了流量控制機制。接收端向傳送端通知它可以接收資料的大小。於是傳送端就會傳送不抄過這個限度的資料,這個資料叫做視窗大小。tcp中有乙個字段...

運輸層詳解(二)(TCP)

tcp的特點 tcp連線 可靠傳輸的工作原理 傳輸通道不產生差錯 不管傳送方以多快的速度傳送分組,接收方總是可以及時處理得到的資料。然而實際的網路並不具備以上兩個條件,因此,我們可以使用一些可靠的傳輸協議,當出現差錯時讓傳送方重傳出現差錯的資料,同時,在接收方來不及處理收到的資料時,及時告知對方適當...

運輸層 TCP的流量控制

a向b傳送資料,在連線建立的時候,b就會首先告訴a 我的接收視窗rwnd receiver window 是400,同時我們要注意的是tcp的視窗單位是位元組,而不是報文段,預設每個報文段都是100位元組大小。我們從圖中可以分析到 a向b傳送了序號1到100的報文段,seq表示序號,接著傳送101到...