TCP可靠傳輸的實現

2021-09-02 18:42:58 字數 1000 閱讀 6400

滑動視窗是指傳送方維護乙個固定大小的環形鍊錶做資料快取,快取上有三個指標:p1已傳送未確認的首位址,p2已傳送未確認的尾位址(允許傳送但未傳送首位址),p3允許傳送但未傳送尾位址(未傳送首位址)

視窗的大小由接收方控制。傳送資料後,需要等待接收方的確認,直到收到確認資訊後,才會移動p1指標,相當於在未接收確認資訊時,是對資料進行快取的。

當經過一段時間沒收到確認資訊時,便會重傳。這個時間就是rto。

這時候有兩個場景:

1、所有沒接受成功:這時候重傳毋庸置疑

2、部分成功:這時候有個選擇確認機制。但目前大部分重傳還是所有重傳未被確認的。

rto(timeout)的計算比較考究,看來也是線性思維去解決。按步驟線性去理解rto是怎麼計算出來的。

1、rto超時時間肯定跟資料在傳送方和接收方往返時間有關。這個往返時間記作rtt。

2、第一次傳資料時,rtt還沒計算出來。那麼以第一次rtt的時間作為基準,第二次及以後的rtt做加權加到rtt上,這樣顯得rtt更平滑一些,叫rtts(smooth)。計算公式:

rtts=(1-a)×舊的rtts+a×新的rtts;a取經驗值1/8。

3、計算rto=rtts+偏差;偏差用rttd(d是角標)

4、偏差rttd第一次等於rtt的一半。第二次及以後就要計算加權了。

rtttd=(1-b)×舊的rttd+b×|rtts-新的rtt|;b取經驗值1/4。

5、實際應用rttd還有問題,因為如果發生超時重傳,在傳送超時重傳後收到接受方的確認訊息,這個確認訊息不確定是不是超時重傳發出來的。所以計算出來的rtts不是偏大就是偏小。

6、只要發生重傳,就不以rtts計算其rto。而是報文每重傳一次,就將rto×2,直到不發生重傳為止。

最後還包括乙個sack選擇確認。看課本上雖然有這個機制,但用的很少。因為重傳需要確定哪個序號需要重傳,乙個序號佔32位,也就是4個位元組。而tcp頭選項最多有40個位元組,邊界太多就容易超過限制。

TCP可靠傳輸的實現

1.概述 為方便描述可靠傳輸原理,假定資料傳輸只在乙個方向上進行,即a傳送資料,b給出確認 2.以位元組為單位的滑動視窗 tcp的滑動視窗是以位元組為單位的。為了便於說明,位元組編號取得很小。先假定a收到b發來的確認報文字段,其中視窗是20位元組,而確認號是31位元組。表明b期望接收到的下乙個序號是...

TCP可靠傳輸的實現

tcp的滑動視窗是以位元組為單位的。現假設a收到了b發來的確認報文段,其中視窗是20位元組,而確認號是31.根據這兩個資料,a就構造出自己的傳送視窗。如下圖所示。傳送視窗表示 在沒收收到b的確認情況下,a可以連續把視窗內的資料都傳送出去。凡是已經傳送的資料,在未收到確認之前都必須暫時保留,以便超時重...

TCP可靠傳輸的實現

1.概述 為方便描述可靠傳輸原理,假定資料傳輸只在乙個方向上進行,即a傳送資料,b給出確認 2.以位元組為單位的滑動視窗 tcp的滑動視窗是以位元組為單位的。為了便於說明,位元組編號取得很小。先假定a收到b發來的確認報文字段,其中視窗是20位元組,而確認號是31位元組。表明b期望接收到的下乙個序號是...