TCP的可靠性保證機制

2021-10-02 19:27:18 字數 1830 閱讀 4440

我們常說,udp是不可靠的通訊協議,而後來發展的tcp彌補了udp的不可靠缺陷,那麼tcp是靠什麼來保證可靠性的呢?

當接收方收到報文時就會確認,如果傳送方傳送一段時間後沒有確認就重傳

tcp會利用視窗控制來提高傳輸速度,意思是在乙個視窗大小內,不用一定要等到應答才能傳送下一段資料,視窗大小就是無需等待確認而可以繼續傳送資料的最大值

如果資料段1001-2000丟失,後面資料每次傳輸,確認應答都會不停地傳送序號為1001的應答,表示我要接收1001開始的資料,傳送端如果收到3次相同應答,就會立刻進行重發

接收視窗:

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

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

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

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

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

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

傳送視窗

如果視窗很大,傳送端連續傳送大量的資料,可能會造成網路的擁堵,tcp為了防止這種情況從而設計了擁塞控制

慢啟動:定義擁塞視窗,一開始將該視窗大小設為1,之後每次收到確認應答(經過乙個rtt),將擁塞視窗大小*2

擁塞避免:設定慢啟動閾值,擁塞避免是指當擁塞視窗大小達到這個閾值,擁塞視窗的值不再指數上公升,而是加法增加(每次確認應答/每個rtt,擁塞視窗大小+1),以此來避免擁塞

將報文段的超時重傳看做擁塞,則一旦發生超時重傳,我們需要先將閾值設為當前視窗大小的一半,並且將視窗大小設為初值1,然後重新進入慢啟動過程

快速重傳:在遇到3次重複確認應答(高速重發控制)時,代表收到了3個報文段,但是這之前的1個段丟失了,便對它進行立即重傳。

然後,先將閾值設為當前視窗大小的一半,然後將擁塞視窗大小設為慢啟動閾值+3的大小

這樣,在tcp通訊中,網路的吞吐量呈現逐漸上公升,並且隨著擁堵來降低吞吐量,再進入慢慢上公升的過程,網路不會輕易發生癱瘓

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

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

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

TCP如何保證可靠性

重傳機制 針對資料報丟失或者出現定時器超時 確認應答 停止等待協議,傳送之後等待收到應答。序列號 針對資料報到達接收端主機順序亂掉 流量控制 針對避免網路擁堵時候 針對高效傳輸資料報的流動視窗的控制 擁塞控制 針對剛開始啟動的時候避免一下子傳送大量資料報而導致網路癱瘓的慢啟動演算法和擁塞控制。校驗和...

TCP 如何保證可靠性

1.校驗和 校驗範圍包括tcp首部和資料部分。在傳送方將整個報文段分為多個16位的段,然後將所有段進行反碼相加,將結果存放在校驗和字段中,接收方用相同的方法進行計算,若最終結果為校驗字段所有位是全1則正確 udp中為0是正確 否則出現錯誤。若校驗出包有錯,則丟棄報文段並且不給出響應,這時tcp傳送資...

TCP 保證傳輸可靠性

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