TCP 協議如何保證可靠傳輸

2021-09-20 13:32:24 字數 2793 閱讀 5957

一、綜述

1、確認和重傳:接收方收到報文就會確認,傳送方傳送一段時間後沒有收到確認就重傳。

2、資料校驗

3、資料合理分片和排序:

udp:ip資料報大於1500位元組,大於mtu.這個時候傳送方ip層就需要分片(fragmentation).把資料報分成若干片,使每一片都小於mtu.而接收方ip層則需要進行資料報的重組.這樣就會多做許多事情,而更嚴重的是,由於udp的特性,當某一片資料傳送中丟失時,接收方便無法重組資料報.將導致丟棄整個udp資料報.

tcp會按mtu合理分片,接收方會快取未按序到達的資料,重新排序後再交給應用層。

4、流量控制:當接收方來不及處理傳送方的資料,能提示傳送方降低傳送的速率,防止包丟失。

5、擁塞控制:當網路擁塞時,減少資料的傳送。

二、滑動視窗

上面籠統地說了tcp保證可靠傳輸的機制,下面說說如何用滑動視窗來實現。

為什麼要使用滑動視窗

因為傳送端希望在收到確認前,繼續傳送其它報文段。比如說在收到0號報文的確認前還發出了1-3號的報文,這樣提高了通道的利用率。但可以想想,0-4發出去後可能要重傳,所以需要乙個緩衝區維護這些報文,所以就有了視窗。

rtt:往返時間。

視窗是什麼

接收視窗:

「接收視窗」大小取決於應用(比如說tomcat:8080埠的監聽程序)、系統、硬體的限制。圖中,接收視窗是31~50,大小為20。

在接收視窗中,黑色的表示已收到的資料,白色的表示未收到的資料。

當收到視窗左邊的資料,如27,則丟棄,因為這部分已經交付給主機;

當收到視窗左邊的資料,如52,則丟棄,因為還沒輪到它;

當收到已收到的視窗中的資料,如32,丟棄;

當收到未收到的視窗中的資料,如35,快取在視窗中。

傳送視窗:

傳送視窗的大小swnd=min(rwnd,cwnd)。rwnd是接收視窗,cwnd用於擁塞控制,暫時可以理解為swnd= rwnd =20。

圖中分為四個區段,其中p1到p3是傳送視窗。

tips:傳送視窗以位元組為單位。為了方便畫圖,圖中展示得像以報文為單位一樣。但這不影響理解。

三、重傳和確認

什麼時候發確認:這是乙個複雜的策略。我們這裡先簡單地認為每收到乙個報文就發乙個確認。

怎麼確認(累計確認):

情況1:傳送ack=31(為什麼這個也要發,這個確認可以用於後面的擁塞控制)

情況2:傳送ack=34,並把接收視窗左邊緣設定成34,右邊緣設定成53

累計確認的好處:情況1中ack=31比描述收到32和33簡單;壞處:可能要重傳已經接收的資料。

傳送方收到確認時怎麼處理:

情況1:收到ack=31,什麼都不做,或者說繼續傳送可用視窗中的內容,如42~50

情況2:收到ack=34,傳送視窗視窗的左邊緣設定成34,右邊緣設定成53

什麼時候重傳:因為每個報文都有超時計數器,超時才重傳。超時重傳時間的選擇也是乙個策略。

tcp快取和視窗的關係:視窗是快取的一部分。

傳送快取=傳送視窗+ p3右邊的一部分

接收快取=接收視窗+部分已確認但主機還沒處理完的資料。

四、流量控制

一圖流,簡單來說就是接收方處理不過來的時候,就把視窗縮小,並把視窗值告訴傳送端。

當視窗值為0,而接受方把視窗值恢復(比如ack=1,ack=601,rwnd=200),但確認丟失,進入相互等待的死鎖局面。所以如果視窗值為0,傳送端就會開啟乙個持續計數器,每個一段時間詢問一下接收方。

五、擁塞控制

swnd=min(rwnd,cwnd),cwnd就是擁塞視窗大小。

慢開始和擁塞避免

ssthresh:處理擁塞時參照的乙個引數。例子中初始值為16,後來變為12。

當cwnd> ssthresh,cwnd以慢開始的方法指數增長;

當cwnd< ssthresh,cwnd以擁塞避免的方法線性增長。

值得注意的幾個點

1上圖是cwnd隨傳輸輪次的變化,每過乙個rtt就算一輪。

2超時就可以認為是擁塞了

快重傳和快恢復:上乙個演算法的加強版

快重傳:收到3個同樣的確認就立刻重傳,不等到超時;

快恢復:cwnd不是從1重新開始。

TCP協議如何保證可靠傳輸

一 可靠傳輸的要求 可靠的傳輸應該滿足下面兩個要求 1 傳輸的通道不產生差錯 2 保證傳輸資料的正確性,無差錯 不丟失 不重複 並且按序到達。這裡有兩層意思,一是能夠正確地傳輸資料,二是接收方能夠及時處理傳送方傳送的資料。二 可靠傳輸的工作原理 tcp為了提供可靠傳輸 1 首先,採用三次握手來建立t...

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

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

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

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