TCP中的可靠資料傳輸

2021-10-08 02:13:55 字數 1420 閱讀 4559

前面我們講到了可靠資料傳輸的實現,而tcp就是一種可靠資料傳輸,因此我們有必要了解一下tcp中的可靠資料傳輸跟前面的回退n步選擇重傳有什麼區別

首先,我們明確乙個概念,累積確認

累計確認跟前面的ack不太一樣,在tcp報文段中有乙個確認號字段,該欄位表示接收方希望接收到的下乙個報文段的序號,而tcp報文段是按位元組數來編序號的,如初始序號為70,然後傳送方傳送乙個42位元組的報文段,則接收方傳送回來的報文段中確認號字段為70+42+1表示希望接下來收到的報文段序號為113,也就是後面的資料,而累積確認是乙個什麼樣的過程?

累計確認就是這個確認號是不斷遞增的,但是跟回退n步不一樣,當有失序的報文段到達接收方時,接收方並不直接丟棄該報文段,而是將其快取起來,

我們設傳送方的滑動視窗的基序號號為sendbase,sendbase表示最早未確認的序號。

因此,根據前面的累計確認,我們設傳送方接收到的ack中的確認號為y,我們可以得到下面的偽**

nextseqnum = initialseqnumber //下乙個待傳送的報文段序號

sendbase = initialseqnumber

loop(forever)

break;

}

累計確認有以下特點

當乙個報文段的ack丟失了,但是後面的報文段的ack沒丟失,且在丟失的報文段的計時器到時之前到達傳送方,這樣傳送方就知道該報文段已經被接收了,所以不用重發該報文段

超時間隔加倍

根據前面的這個特點,我們可以知道,當一些報文段的ack沒有收到時,實際上是可以利用後面的ack來確認的,因此當乙個報文段需要重傳時,我們將其下一次的超時間隔加倍

這樣處理可以減輕通道擁塞的程度

快速重傳

超時事件觸發重傳的乙個缺點就是時延較長,因此我們引入了冗餘ack分組來判斷丟包,也就是說,當接收方收到乙個失序的分組時,它傳送乙個ack,該ack的確認號是上一次遞交的下乙個,當傳送方收到3個冗餘ack分組時,就會意識到該分組出現了丟包,因此將該分組重傳,這就是快速重傳

用**來表示就是

event: ack recevied, with ack field value of y

if(y>sendbase)

else

}break;

因此我們知道,tcp中的可靠傳輸是回退n步選擇重傳的結合

參考:《計算機網路自頂向下方法》

可靠資料傳輸原理

概述 可靠資料傳輸原理 tcp的可靠資料傳輸 tcp可靠資料傳輸的滑動視窗既不是純粹的gbn,也不是純粹的sr,在這兩個協議之外又引入了新的東西。資料傳輸發生錯誤怎麼辦?傳送方的有限狀態機 圓圈代表當前所處的狀態,帶箭頭的線代表狀態的轉換,橫線上方指示引起狀態變遷的事件,橫線下方指示狀態轉換中採取的...

可靠資料傳輸原理(下)

上篇筆記中,我們主要討論了可靠資料傳輸協議的作用,以及如何從零開始一步一步構建乙個可靠的資料傳輸協議,在最後,我們構建出了 rdt 3.0 協議,它可以很好的在現實世界的底層通道上面工作。但問題是它是乙個停等協議,傳送端必須確認接收端已經接收到了正確的分組資料後才能傳送下乙個分組資料,這在現實生活中...

TCP的資料傳輸小結

通常每乙個互動按鍵都會產生乙個資料分組,也就是說,每次從客戶傳到伺服器的是乙個位元組的按鍵 而不是每次一行 通常tcp在接受到資料時並不立即傳送ack 相反,它推遲傳送,以便將ack與需要沿該方向傳送的資料一起傳送。絕大多數實現採用的時延為200ms,也就是說,tcp將以最大200ms的時延等待是否...