TCP可靠傳輸的實現

2021-12-29 20:50:46 字數 2378 閱讀 4933

1.概述

為方便描述可靠傳輸原理,假定資料傳輸只在乙個方向上進行,即a傳送資料,b給出確認

2.以位元組為單位的滑動視窗

tcp的滑動視窗是以位元組為單位的。為了便於說明,位元組編號取得很小。先假定a收到b發來的確認報文字段,其中視窗是20位元組,而確認號是31位元組。(表明b期望接收到的下乙個序號是31,序號30之前的資料已經收到了)。如圖所示。

傳送視窗有如下特點:

1)傳送視窗裡面的序號表示允許傳送的序號(如31~50)

2)傳送視窗的位置由視窗的前沿和後沿的位置共同確定。傳送視窗的後沿可能不動(沒有收到確認),或者前移(收到新的確認)。傳送視窗的前沿通常是不斷的向前移動,但也可能不動。

現在假定a傳送了序號為31-41的資料,如上圖所示,圖種可以看出要描述乙個傳送視窗的狀態需要三個指標p1, p2, p3。

小於p1的是已傳送並收到確認的部分,大於p3的是不允許傳送部分。

p3-p1 = a的傳送視窗(又稱為通知視窗)

p2-p1 = 已傳送但尚未收到確認的位元組數

p3-p2 = 允許傳送但尚未收到的位元組數(又稱為可用視窗或有效視窗)

如圖所示,b收到了32和33的資料。這些資料沒有按序到達,因為序號為31的資料沒有收到。由於b只能對按序到達的資料中的最高序號給出確認,因此b的傳送的確認號仍然是31,而不能是32或33。現在假定b收到序號為31的資料並把序號為31-33的資料交付給主機,然後b刪除這些資料。接著把接收視窗向前移動3個序號,同時給a發出確認。其視窗值仍未20,但確認號34,表明b已經接收到序號33為止的資料。而b收到的37 38 40的資料沒有按序到達,先暫存在接收視窗中。

如果按照以上的方式進行傳送資料。當傳送視窗已滿,可用視窗減小到0,因此傳送停止。如果傳送視窗內所有資料都正確到達b,而發出的確認由於網路問題沒有到達a,為保證傳輸,此時a只能認為b還沒有收到這部分資料。於是a經過一段時間過(由超時計時器控制)重傳這部分資料,直到收到b的確認為止。

3.快取機制

傳送方的應用程序把位元組流寫入了tcp的傳送快取,接收方的應用程序從tcp的接受快取中讀取位元組流。下面進一步談論視窗與快取的關係。注:快取空間和序號空間都是有限的並且迴圈使用的。

傳送快取用來暫時存放:1.傳送應用程式傳送給傳送方tcp準備的資料2.tcp已傳送但尚未收到確認的資料。

傳送視窗通常只是傳送快取的一部分。已被確認的資料應當從傳送快取中刪除,因此傳送快取與傳送視窗的後沿是重合的。傳送應用程式必須控制寫入快取的速率,不能太快,否則傳送快取就會沒有存放資料的空間。

接收快取用來暫時存放:1.按序到達的,但尚未被接收應用程式讀取的資料。2,未按序到達的資料。

如果收到的分組檢測出有差錯,則要丟棄。如果接收應用程式來不及讀取收到的資料,接收快取最終就會被填滿。使接收視窗減小到0.反之,接收應用程式能夠及時從接收快取中讀取收到資料,接收視窗就會變大,但最大也不能超過接收快取的大小。

4.超時重傳的時間選擇

tcp每傳送乙個報文段,就對這個報文段設定一次計時器。只要計時器設定的重傳時間到還沒有收到確認,就要重傳這個報文段。由於資料鏈路層和運輸層的往返實驗概率分布存在很大差異,因此有必要選擇合適的超時重傳時間。

報文段的往返時延是指收到確認報文的時間與每乙個報文段發出的時間之差。報文段的平均往返時延rtt是由各個報文段的往返時延樣本加權平均得出來的。計算公式為:

平均往返時延rtt=α(舊的rtt)+(1-α)(新的往返時延樣本),1 ≤ α < 1 典型的值為α為7/8.

即使有乙個好的rtt,要選擇乙個合適的超時重傳時間rto(restransmission time out)仍然不是乙個容易的事情。, 顯然rto要大於rtt。其計算公式為 rto = β rtt, β > 1, 推薦是2

5.選擇確認sack

若收到的報文段無差錯,只是未按序號,中間還缺少一些序號的資料,採用選擇確認的方法來傳送缺少的資料,而不重傳已經正確接收到的資料。

用乙個例子來說明(selctive ack)工作原理。如圖所示,接收放收到了前面的位元組流不連續的兩個位元組塊。如果這些位元組的序號都在接收視窗內,那麼接收方就先收下這些資料,但要把這些資訊準確的告訴傳送放,使傳送方不要在重**送這些已經收到的資料。

tcp首部沒有哪個字段能夠提供上述這些位元組快的邊界資訊。如果要使用選擇確認,那麼在建立tcp連線時,就要在tcp首部的選項上加上「允許sack」的選項。

TCP可靠傳輸的實現

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

TCP可靠傳輸的實現

滑動視窗是指傳送方維護乙個固定大小的環形鍊錶做資料快取,快取上有三個指標 p1已傳送未確認的首位址,p2已傳送未確認的尾位址 允許傳送但未傳送首位址 p3允許傳送但未傳送尾位址 未傳送首位址 視窗的大小由接收方控制。傳送資料後,需要等待接收方的確認,直到收到確認資訊後,才會移動p1指標,相當於在未接...

TCP可靠傳輸的實現

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