TCP 如何保證可靠性

2021-10-23 09:59:43 字數 1441 閱讀 5332

1.校驗和

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

2.確認應答與序列號:

tcp將每個位元組的資料都進行了編號,這就是序列號。

序列號的作用是

(1)保證可靠性(當接收到的資料總少了某個序號的資料時,能馬上知道);

(2)保證資料的按序到達;

(3)提高效率,可實現多次傳送,一次確認

(4)去除重複資料

應答機制可實現資料可靠傳輸。在tcp的首部中有乙個標誌位-ack,此標誌位表示確認號是否有效。接收方對於按序到達的資料會進行確認,當標誌位ack=1時確認首部的確認字段有效。進行確認時,確認字段值表示這個值之前的資料都已經按序到達了。而傳送發如果收到了已傳送資料的確認報文,則繼續傳輸下一部分的資料,若等待一定時間還沒有收到確認報文就會啟動重傳機制。

3.超時重傳:

當報文發出後在一定時間內未收到接收方的確認,傳送方就會重傳。兩種情況:(1)請求方的請求由於網路擁塞等原因丟失;(2)目的方的ack丟失(接收方接收到重複的資料時就將其丟掉,重新傳送ack。而要識別出重複的資料,前面提到的序列號就起作用了。)

重傳時間的確定:報文段發出到收到應答中間有乙個報文段的往返時間rtt,顯然超時重傳時間rto會略大於這個rtt,tcp會根據網路情況動態的計算rtt,即rto是不斷變化的。在linux中,超時以500ms為單位進行控制,每次判定超時重發的超時時間都是500ms的整數倍。其規律為:如果重發一次仍得不到應答,就等待2500ms後再進行重傳,如果仍然得不到應答就等待4500ms後重傳,依次類推,以指數形式遞增,重傳次數累計到一定次數後,tcp認為網路或對端主機出現異常,就會強行關閉連線。

4.連線管理

tcp建立連線的三次握手和斷開連線時的四次揮手。

5.流量控制:

接收端處理資料的速度是有限的,如果傳送方傳送資料的速度過快,導致接收端的緩衝區滿,而傳送方繼續傳送,就會造成丟包,繼而引起丟包重傳等一系列連鎖反應。

因此tcp支援根據接收端的處理能力,來決定傳送端的傳送速度,這個機制叫做流量控制。

在tcp報文段首部中有乙個16位視窗長度,當接收端接收到傳送方的資料後,在應答報文ack中就將自身緩衝區的剩餘大小,放入16視窗大小中。這個大小隨資料傳輸情況而變,視窗越大,網路吞吐量越高,而一旦接收方發現自身的緩衝區快滿了,就將視窗設定為更小的值通知傳送方。如果緩衝區滿,就將視窗置為0,傳送方收到後就不再傳送資料,但是需要定期傳送乙個視窗探測資料段,使接收端把視窗大小告訴傳送端。

6.擁塞控制:

TCP如何保證可靠性

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

TCP如何保證可靠性傳輸

校驗和 在資料傳輸的過程中,將傳送的資料段都當做乙個16位的整數。將這些整數加起來。並且前面的進製不能丟棄,補在後面繼續相加,最後取反,得到校驗和。傳送方 在傳送資料之前計算檢驗和,並進行校驗和的填充。接收方 收到資料後,對資料以同樣的方式進行計算,求出校驗和,與傳送方的進行比對。注意 如果接收方比...

TCP 協議如何保證可靠性

tcp 協議保證資料傳輸可靠性的方式主要有 傳送的資料報的二進位制相加然後取反,目的是檢測資料再傳輸過程中的任何變化。如果收到段的檢驗和有差錯,tcp 將丟棄這個報文段和不確認收到此報文段。tcp 給傳送的每乙個包進行編號,這就是序列號。在 tcp 傳輸的過程中,每次接收方收到資料後,都會對傳輸方進...