tcp 提供了兩個很著名的服務,都跟視窗有著密切的關係。
二者的實現方式很類似,但是目的完全不一樣,切勿搞混,接下來就詳細的介紹一下這兩個服務。
流量控制
一、問題的提出
正如上面所提及的,一條 tcp 連線每一側的主機都為該連線設定了接收快取。當該 tcp 連線收到正確、按序的位元組後,它就會將資料放入接收快取中。相關聯的應用程序會從該快取中讀取資料,但不必是資料剛一到達就立即進行讀取。事實上,接收方的應用程序也許正忙於其他的任務,甚至要過很長時間後才會去讀取該資料。如果某應用程式讀取資料時相對緩慢,而傳送方傳送的又快又多,那麼在接收方這一端的接收快取很容易溢位。
二、解決的方式
流量控制的主動權在接收方手上,通過接收方傳送的確認報文中的視窗字段可以用來控制傳送方視窗大小,從而影響傳送方的傳送速率。將視窗字段設定為 0,則傳送方不能傳送資料。
三、總結
tcp 為它的應用程式提供了流量控**務,用以消除傳送方使接收方快取溢位的可能性。用大白話講就是讓接收方來得及接收。
擁塞控制
一、問題的提出
我們應該思考一下這個問題,為什麼會出現丟包的情況呢?
在實踐中,這種丟包一般是當網路變得擁塞時由於路由器快取溢位引起的。分組重傳因此作為網路擁塞的徵兆來對待,但是卻無法處理導致網路擁塞的原因。而且如果網路出現擁塞,分組丟失,傳送方會繼續重傳,從而導致網路擁塞程度更高。
因此當出現擁塞時,應當控制傳送方的速率。這一點和流量控制很像,但是出發點不同。流量控制是為了讓接收方能來得及接收,而擁塞控制是為了降低整個網路的擁塞程度。可以這麼說,擁塞控**務並不是服務於連線的雙方,而是服務於網路的。
上圖是擁塞控制的作用,我們不難推理出,如果沒有擁塞控制,就像我們剛剛所說的,分組丟失,之後不停的重傳,那麼網路擁塞只會進一步的加劇。最終,達到乙個癱瘓的狀態,即死鎖,傳送方還在不停的傳送未被確認的分組,陷入死迴圈。
二、擁塞控制的實現
執行在傳送方的 tcp 擁塞控制機制跟蹤了乙個額外的變數,叫做擁塞視窗(congestion window),表示為 cwnd,它對乙個 tcp 傳送方能向網路中傳送流量的速率進行了限制。注意擁塞視窗與傳送方視窗的區別:擁塞視窗只是乙個狀態變數,實際決定傳送方能傳送多少資料的是傳送方視窗。
tcp 主要通過三個演算法來進行擁塞控制:
其中慢啟動和擁塞避免是 tcp 的強制部分,快速恢復是推薦部分,並非是必須的。
現在我們來具體的看下這些廣受讚譽的 tcp 擁塞控制演算法。
1. 慢啟動與擁塞避免
傳送的最初執行慢啟動(slow-start),令 cwnd = 1,即傳送方只能傳送 1 個報文段(儘管 tcp 的視窗基於位元組,但是這裡設視窗的大小單位為報文段 ,用以方便討論為目的);當收到確認後,將 cwnd 翻番,並一直這樣下去,因此之後傳送方能夠傳送的報文段數量為:2、4、8 …
注意到慢啟動每個輪次都將 cwnd 加倍,這樣會讓 cwnd 增長速度非常快,從而使得傳送方傳送的速度增長速度過快,網路擁塞的可能性也就更高。設定乙個慢啟動閾值 ssthresh,當 cwnd >= ssthresh 時,進入擁塞避免,因為這個閾值可能離擁塞並不遙遠了,所以不能再像慢啟動那樣進行指數級增長,而是在每個輪次只將 cwnd 加 1。
那麼何時結束擁塞避免的線性增長狀態呢?當出現了超時,則令 ssthresh = cwnd / 2,然後重新執行慢啟動。要注意到 tcp 所認為的丟包還會由另一種情況觸發,接著往下看。
2. 快速重傳和快速恢復
其實,除了超時重傳,tcp 還有一種情況會進行重傳:那就是收到 3 個相同的 ack 。tcp 在收到亂序到達包時就會立即傳送 ack,tcp 利用 3 個相同的 ack 來判定資料報的丟失,此時進行快速重傳。
在傳送方,如果收到三個重複確認,那麼可以知道下乙個報文段丟失,此時執行快重傳,立即重傳下乙個報文段。例如,傳送方收到了三個對 5 號包的確認,那麼立即傳送 6 號包,這個就是快速重傳。
在這種情況下,只是丟失個別報文段,而不是網路擁塞。因此執行快速恢復,令 ssthresh = cwnd / 2 ,cwnd = ssthresh,注意到此時直接進入擁塞避免。
看文字說明很難一下子捋清這幾個演算法的關係和流程,我簡單的畫了乙個圖。
TCP流量控制協議
1 tcp ip具體解釋 卷1 協議 2 tcp ip協議族 第4版 3 計算機網路 第5版 tcp流量控制的目的是限制傳送端的傳送速率,使得接收方可以及時接收。tcp主要是通過滑動窗體 來實現流量控制的。實際上,傳送窗體的大小不僅受接收窗體rwnd的大小的限制,還受擁塞窗體cwnd窗體的限制,為了...
TCP 協議中的流量控制
協議 流量控制 滑動視窗 nagle tcp 協議中的流量控制 tcp協議上的網路協議特別多1 互動資料型別,例如 telet ssh 這種型別的協議在大多數情況下只是做小流量的資料交換,比如說按一下鍵盤,回顯一些文字等等。2 資料成塊型別,例如 ftp,這種型別的協議要求 tcp能盡量的運載資料,...
TCP流量控制和擁塞控制
1 利用滑動視窗實現流量控制 如果傳送方把資料傳送得過快,接收方可能會來不及接收,這就會造成資料的丟失。所謂流量控制就是讓傳送方的傳送速率不要太快,要讓接收方來得及接收。利用滑動視窗機制可以很方便地在tcp連線上實現對傳送方的流量控制。2 設a向b傳送資料。在連線建立時,b告訴了a 我的接收視窗是 ...