TCP協議之TCP的可靠性傳輸

2021-09-19 10:14:55 字數 3298 閱讀 4381

tcp保證可靠性主要有以下幾個方面:

1. 超時重傳機制

2. 流量控制

3. 擁塞控制

4. 資料校驗

超時重傳是tcp協議保證資料可靠性的另乙個重要機制。其原理是在傳送某乙個資料以後就開啟乙個計時器,在一定時間內如果沒有得到傳送的資料報的ack報文,那麼就重新傳送資料,直到傳送成功為止。

簡單來說,就是tcp的傳送方在傳送資料時,會開啟乙個計時器等待確認訊息,接收方在接收到資料時會返回確認,若超過計時器時間沒有收到確認,tcp認為報文段丟失或損壞,需要對報文段中的資料進行重新組織和重傳。

造成傳送方沒有收到ack原因可能有:

1.接收方已經接收到資料,但是確認ack在傳輸過程中由於網路原因丟失了。

2.資料在傳送過程中丟失,接收方根本沒有收到傳送方發來的資料。

如果傳送方傳送資料過快,接收者來不及接收,那麼就會造成資料分組丟失,為了避免分組丟失,控制傳送者的傳送速度,使得接收者來得及接收,這就是tcp的流量控制。

tcp通過滑動視窗協議(連續arq協議)來實現流量控制。滑動視窗協議既保證了分組無差錯、有序接收,也實現了流量控制。

補充:滑動視窗協議(連續arq協議)

在arq協議傳送者每次只能傳送乙個分組,在應答到來前必須等待。而連續arq協議的傳送者擁有乙個傳送視窗,傳送者可以在沒有得到應答的情況下連續傳送視窗中的分組。這樣降低了等待時間,提高了傳輸效率。

傳送視窗的大小由接收視窗的剩餘大小決定。接收者會把當前接收視窗的剩餘大小寫入應答tcp報文段的頭部,傳送者收到應答後根據該值和當前網路擁塞情況設定傳送視窗的大小。傳送視窗的大小是不斷變化的。從而達到控制傳送速率。

流量控制會引發的死鎖

當傳送者收到了乙個視窗為0的應答,傳送者便停止傳送,等待接收者的下乙個應答。但是如果這個視窗不為0的應答在傳輸過程丟失,傳送者一直等待下去,而接收者以為傳送者已經收到該應答,等待接收新資料,這樣雙方就相互等待,從而產生死鎖。

持續計時器
為了避免流量控制引發的死鎖,tcp使用了持續計時器。每當傳送者收到乙個零視窗的應答後就啟動該計時器。時間一到便主動傳送報文詢問接收者的視窗大小。若接收者仍然返回零視窗,則重置該計時器繼續等待;若視窗不為0,則表示應答報文丟失了,此時重置傳送視窗後開始傳送,這樣就避免了死鎖的產生。

計算機網路中的頻寬、交換節點中的快取和處理機等,都是網路的資源。在某段時間,若對網路中的某一資源的需求超過了該資源所能提供的可用部分,這種情況叫擁塞。

擁塞控制是為了防止過多資料注入網路中,避免出現網路中負載過大。

擁塞控制的目的:

1.緩解網路壓力

2.保證分組按時到達

常見擁塞控制演算法

1.慢開始演算法與擁塞避免演算法

慢開始傳送方維護著乙個視窗,傳送方視窗的大小取決於接收方的視窗大小和網路中的擁塞程度,視窗的大小是隨著傳送過程動態變化的。

傳送方還維持著乙個慢開始門限:

1.傳送視窗 < 慢開始門限:使用慢開始演算法

2.傳送視窗 > 慢開始門限:使用擁塞避免演算法

3.傳送視窗 = 慢開始門限:使用慢開始演算法或擁塞避免演算法

具體過程:

1.傳送方的傳送視窗設定為1,並傳送資料分組m。

2.當接收方接收到m1時,返回確認應答,此時傳送方的傳送視窗設定為原來的2倍,並傳送m2,m3。以後每次收到確認應答都會擴大為原來的2倍。

3.若傳送視窗》慢開始門限,則使用擁塞避免演算法,每次收到確認應答後都將傳送視窗+1。

4.若傳送方出現了超時重傳,則表明網路出現擁塞,此時: a)慢開始門限設為當前傳送視窗的一半 b)傳送視窗設為1 c)啟用擁塞避免演算法。

慢開始演算法的作用:慢開始演算法將傳送視窗從小擴大,而且按指數級擴大,從而避免一開始就往網路中注入過多的分組從而導致擁塞;它將視窗慢慢擴大的過程其實也在探測網路擁塞情況的過程,當發現出現擁塞時,及時降低傳送速度,從而減緩網路擁塞。

擁塞避免
擁塞避免演算法作用:使視窗呈線性增長,而非呈指數級增長,從而使網路更不容易發生網路負載。

2.快重傳演算法和快恢復演算法

快重傳原理

因為tcp具有累計確認的能力,因此接收者在接收到乙個分組時不會立即發出確認應答,可能需要等待多個分組之後再發出累計確認。而快重傳演算法要求接收方在收到乙個失序的報文段後就立即發出前乙個正確分組的確認應答,這樣讓傳送方盡早知道有乙個分組有可能丟失了。

快恢復原理
傳送方在一連收到三個重複確認後就應當立即重傳對方尚未收到的報文段,而不必等待設定的重傳計時器超時。

接收方發現tcp首部和資料在傳送端到接收端之間發生的任何改動。如果接收方檢測到檢驗和有差錯,則tcp段會被直接丟棄。

檢驗和計算過程

tcp首部校驗和計算三部分:tcp首部+tcp資料+tcp偽首部。
傳送端:

首先,把偽首部、tcp報頭、tcp資料分為16位的字,如果總長度為奇數個位元組,則在最後增添乙個位都為0的位元組。

把tcp報頭中的校驗和字段置為0。

其次,用反碼相加法(對每16bit進行二進位制反碼求和)累加所有的16位字(進製也要累加,進製則將高位疊加到低位)。

最後,將上述結果作為tcp的校驗和,存在檢驗和字段中。

接收端:

將所有原碼相加,高位疊加到低位, 如計算結果的16位中每一位都為1,則正確,否則說明發生錯誤。

驗證示例:

校驗和 反碼求和過程

以4bit 為例

傳送端計算:

資料: 1000 0100 校驗和 0000

則反碼:0111 1011 1111

疊加: 0111+1011+1111 = 0010 0001 高於4bit的, 疊加到低4位 0001 + 0010 = 0011 即為校驗和

接收端計算:

資料: 1000 0100 檢驗和 0011

反碼: 0111 1011 1100

疊加: 0111 + 1011 +1100 = 0001 1110 疊加為4bit為1111. 全為1,則正確。

TCP協議 如何保證傳輸可靠性

tcp協議保證資料傳輸可靠性的方式主要有 校驗和 序列號 確認應答 超時重傳 連線管理 流量控制 擁塞控制 計算方式 在資料傳輸的過程中,將傳送的資料段都當做乙個16位的整數。將這些整數加起來。並且前面的進製不能丟棄,補在後面,最後取反,得到校驗和。傳送方 在傳送資料之前計算檢驗和,並進行校驗和的填...

TCP 保證傳輸可靠性

tcp協議保證資料傳輸可靠性的方式主要有 計算方式 在資料傳輸的過程中,將傳送的資料段都當做乙個16位的整數。將這些整數加起來。並且前面的進製不能丟棄,補在後面,最後取反,得到校驗和。傳送方 在傳送資料之前計算檢驗和,並進行校驗和的填充。接收方 收到資料後,對資料以同樣的方式進行計算,求出校驗和,與...

TCP協議如何保證傳輸的可靠性

tcp提供一種面向連線的 可靠的位元組流服務。面向連線 意味著兩個使用tcp的應用 通常是乙個客戶和乙個伺服器 在彼此交換資料之前必須先建立乙個tcp連線。在乙個tcp連線中,僅有兩方進行彼此通訊。廣播和多播不能用於tcp。tcp通過下列方式來提供可靠性 1 應用資料被分割成tcp認為最適合傳送的資...