TCP-IP協(xié)議詳解(10) TCP滑窗管理

TCP協(xié)議與”流”通信中芥牌,我們建立了滑窗(sliding window)的基本概念田篇。通過滑窗與ACK的配合,我們一方面實現(xiàn)了TCP傳輸?shù)目煽啃择帽伲硪环矫嬉惨欢ǔ潭壬咸岣吡诵省F涔ぷ鞣绞饺缦旅娴囊曨l所示:



TCP sliding window

視頻鏈接:http://v.youku.com/v_show/id_XNDg1NDUyMDUy.html

然而波附,之前的解釋只是概念性的艺晴。TCP為了達到更好的傳輸效率昼钻,對上面的工作方式進行了許多改進。The devil is in the details.?我們需要深入到細節(jié)封寞,才能看清楚TCP協(xié)議的智慧所在然评。

累計ACK

TCP連接中,我們通過將ACK回復“附著”在其他數(shù)據(jù)片段的方式狈究,減少了ACK回復所消耗的流量碗淌。但這并不是全部的故事。TCP協(xié)議并不是對每個片段都發(fā)送ACK回復谦炒。TCP協(xié)議實際采用的是累計ACK回復(accumulative acknowledgement)贯莺。接收方往往利用一個ACK回復來知會連續(xù)多個片段的成功接收风喇。通過累計ACK宁改,所需要的ACK回復通常可以降到50%魂莫。

如下圖所示还蹲,橙色為已經接收的片段。方框為滑窗耙考,滑窗可容納3個片段谜喊。

累計ACK

滑窗還沒接收到片段7時,已接收到片段8倦始,9。這樣就在滑窗中制造了一個“空穴”(hole)。當滑窗最終接收到片段7時碎赢,滑窗送出一個回復號為10的ACK回復秒裕。發(fā)送方收到該回復,會意識到枚碗,片段10之前的片段已經按照次序被成功接收逾一。整個過程中節(jié)約了片段7和片段8所需的兩個ACK回復。

此外肮雨,接收方在接收到片斷遵堵,并應該回復ACK的時候,會故意延遲一些時間怨规。如果在延遲的時間里陌宿,有后續(xù)的片段到達,就可以利用累計ACK來一起回復了波丰。

滑窗結構

在之前的討論中限番,我們以片段為單位,來衡量滑窗的大小的呀舔。真實的滑窗是以byte為單位表示大小弥虐,但這并不會對我們之前的討論造成太大的影響扩灯。

發(fā)送方滑窗可以分為下面兩個部分。offered window為整個滑窗的大小霜瘪。

接收方滑窗可分為三個部分:

可以看到珠插,接收方的滑窗相對于發(fā)送方的滑窗多了一個“Received; ACKed; Not Sent to Proc”的部分。接收方接收到的文本流必須等待進程來讀取颖对。如果進程正忙于做別的事情捻撑,那么這些文本流即使已經正確接收,還是需要暫時占用接收緩存缤底。當出現(xiàn)上述占用時顾患,滑窗的可用部分(也就是圖中advertised window)就會縮水。這意味著接收方的處理能力下降个唧。如果這個時候發(fā)送方依然按照之前的速率發(fā)送數(shù)據(jù)給接收方江解,接收方將無力接收這些數(shù)據(jù)。

流量控制

TCP協(xié)議會根據(jù)情況自動改變滑窗大小徙歼,以實現(xiàn)流量控制犁河。流量控制(flow control)是指接收方將advertised window的大小通知給發(fā)送方,從而指導發(fā)送方修改offered window的大小魄梯。接收方將該信息放在TCP頭部的window size區(qū)域:

發(fā)送方在收到window size的通知時桨螺,會調整自己滑窗的大小,讓offered window和advertised window相符酿秸。這樣灭翔,發(fā)送窗口變小,文本流發(fā)送速率降低辣苏,從而減少了接收方的負擔肝箱。

零窗口

advertised window大小有可能變?yōu)?,這意味著接收方的接收能力降為0考润。發(fā)送方收到大小為0的advertised window通知時狭园,停止發(fā)送。

零窗口

當接收方經過處理糊治,再次產生可用的advertised window時唱矛,接收方會通過純粹的ACK回復來通知發(fā)送方,讓發(fā)送方恢復發(fā)送井辜。然而绎谦,ACK回復的傳送并不是可靠的。如果該ACK回復丟失粥脚,那么TCP傳輸將陷入死鎖(deadlock)狀態(tài)窃肠。

為此,發(fā)送方會在零窗口后刷允,不斷探測接收方的窗口冤留。窗口探測(window probe)時碧囊,發(fā)送方會向接收方發(fā)送包含1 byte文本流的TCP片段,并等待ACK回復(該ACK回復包含有window size)纤怒。由于有1 byte的數(shù)據(jù)存在糯而,所以該傳輸是可靠的,而不用擔心ACK回復丟失的問題泊窘。如果探測結果顯示窗口依然為0熄驼,發(fā)送方會等待更長的時間,然后再次進行窗口探測烘豹,直到TCP傳輸恢復瓜贾。

白癡窗口綜合癥

滑窗機制有可能犯病,比如白癡窗口綜合癥 (Silly Window Syndrome)携悯。假設這樣一種情形:接收方宣布(advertise)一個小的窗口祭芦,發(fā)送方根據(jù)advertised window,發(fā)送一個小的片段蚌卤。接收方的小窗口被填滿实束,經過處理奥秆,接收方再宣布一個小的窗口…… 這就是“白癡窗口綜合癥”:TCP通信的片段中包含的數(shù)據(jù)量很小逊彭。在這樣的情況下,TCP通信的片段所含的信息都很小构订,網(wǎng)絡流量主要是TCP片段的頭部侮叮,從而造成流量的浪費 (由于TCP頭部很大,我們希望每個TCP片段中含有比較多的數(shù)據(jù))悼瘾。

如果發(fā)送方不斷發(fā)送小的片段囊榜,也會造成“白癡窗口”。為了解決這個問題亥宿,需要從兩方面入手卸勺。TCP中有相關的規(guī)定,要求:

1. 接收方宣告的窗口必須達到一定的尺寸烫扼,否則等待曙求。

2. 除了一些特殊情況,發(fā)送方發(fā)送的片段必須達到一定的尺寸映企,否則等待悟狱。特殊情況主要是指需要最小化延遲的TCP應用(比如命令行互動)。

總結

累計ACK減少了TCP傳輸過程中所需的ACK流量堰氓。通過流量管理挤渐,TCP連接兩端的工作能力可以匹配,從而減少不不要的傳輸浪費双絮。累計ACK和流量控制都是TCP協(xié)議的重要特征浴麻。

TCP協(xié)議相當復雜得问,并充斥著各種細節(jié)。然而TCP協(xié)議又是如此重要的一個協(xié)議软免,引領風騷三十年椭赋,可以說是互聯(lián)網(wǎng)的奇跡。這些細節(jié)正是TCP協(xié)議成功的原因或杠,并值得我們深入了解哪怔。


【TCP/IP詳解】系列教程

互聯(lián)網(wǎng)協(xié)議入門 1

互聯(lián)網(wǎng)協(xié)議入門 2

TCP-IP協(xié)議詳解(1)網(wǎng)絡協(xié)議概觀

TCP-IP協(xié)議詳解(2) 以太網(wǎng)與WiFi協(xié)議

TCP-IP協(xié)議詳解(3) IP/ARP/RIP/BGP協(xié)議

TCP-IP協(xié)議詳解(4)IPv4與IPv6地址

TCP-IP協(xié)議詳解(5)IP協(xié)議詳解

TCP-IP協(xié)議詳解(6) ICMP協(xié)議

TCP-IP協(xié)議詳解(7) UDP協(xié)議

TCP-IP協(xié)議詳解(8) TCP協(xié)議與流通信

TCP-IP協(xié)議詳解(9) TCP連接

TCP-IP協(xié)議詳解(10) TCP滑窗管理

TCP-IP協(xié)議詳解(11) TCP重傳

TCP-IP協(xié)議詳解(12) TCP堵塞控制

TCP-IP協(xié)議詳解(13) DNS協(xié)議

TCP-IP協(xié)議詳解(14) CIDR與NAT

TCP-IP協(xié)議詳解(15) HTTP協(xié)議概覽

圖解TCP-IP協(xié)議

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市向抢,隨后出現(xiàn)的幾起案子认境,更是在濱河造成了極大的恐慌,老刑警劉巖挟鸠,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叉信,死亡現(xiàn)場離奇詭異,居然都是意外死亡艘希,警方通過查閱死者的電腦和手機硼身,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來覆享,“玉大人佳遂,你說我怎么就攤上這事∪龆伲” “怎么了丑罪?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長凤壁。 經常有香客問我吩屹,道長,這世上最難降的妖魔是什么拧抖? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任煤搜,我火速辦了婚禮,結果婚禮上唧席,老公的妹妹穿的比我還像新娘擦盾。我一直安慰自己,他們只是感情好袱吆,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布厌衙。 她就那樣靜靜地躺著,像睡著了一般绞绒。 火紅的嫁衣襯著肌膚如雪婶希。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天蓬衡,我揣著相機與錄音喻杈,去河邊找鬼彤枢。 笑死,一個胖子當著我的面吹牛筒饰,可吹牛的內容都是我干的缴啡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瓷们,長吁一口氣:“原來是場噩夢啊……” “哼业栅!你這毒婦竟也來了?” 一聲冷哼從身側響起谬晕,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤碘裕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后攒钳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帮孔,經...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年不撑,在試婚紗的時候發(fā)現(xiàn)自己被綠了文兢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡焕檬,死狀恐怖姆坚,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情揩页,我是刑警寧澤旷偿,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布烹俗,位于F島的核電站爆侣,受9級特大地震影響,放射性物質發(fā)生泄漏幢妄。R本人自食惡果不足惜兔仰,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蕉鸳。 院中可真熱鬧乎赴,春花似錦、人聲如沸潮尝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勉失。三九已至羹蚣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乱凿,已是汗流浹背顽素。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工咽弦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胁出。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓型型,卻偏偏與公主長得像,于是被迫代替她去往敵國和親全蝶。 傳聞我的和親對象是個殘疾皇子闹蒜,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容