TCP的ACK原理和延遲確認機制
阿新 • • 發佈:2018-11-05
一、ACK定義
TCP協議中,接收方成功接收到資料後,會回覆一個ACK資料包,表示已經確認接收到ACK確認號前面的所有資料。
ACK欄位長度為32位,能表示0~2^32-1之間的值。
二、ACK作用
傳送方在一定時間內沒有收到服務端的ACK確認包後,就會重新發送TCP資料包。傳送方收到了ACK,表明接收方已經接收到資料,保證了資料的可靠達到。
三、ACK機制
接收方在接收到資料後,不是立即會給傳送方傳送ACK的。這可能由以下原因導致:
1、收到資料包的序號前面還有需要接收的資料包。因為傳送方傳送資料時,並不是需要等上次傳送資料被Ack就可以繼續傳送TCP包,而這些TCP資料包達到的順序是不保證的,這樣接收方可能先接收到後傳送的TCP包(注意提交給應用層時是保證順序的)。
2、為了降低網路流量,ACK有延遲確認機制。
3、ACK的值到達最大值後,又會從0開始。
四、ACK延遲確認機制
接收方在收到資料後,並不會立即回覆ACK,而是延遲一定時間。一般ACK延遲傳送的時間為200ms,但這個200ms並非收到資料後需要延遲的時間。系統有一個固定的定時器每隔200ms會來檢查是否需要傳送ACK包。這樣做有兩個目的。
1、這樣做的目的是ACK是可以合併的,也就是指如果連續收到兩個TCP包,並不一定需要ACK兩次,只要回覆最終的ACK就可以了,可以降低網路流量。
2、如果接收方有資料要傳送,那麼就會在傳送資料的TCP資料包裡,帶上ACK資訊。這樣做,可以避免大量的ACK以一個單獨的TCP包傳送,減少了網路流量。