TCP的ACK原理和延遲確認機制

2022-02-02 09:27:34 字數 955 閱讀 5589

某天晚上睡覺前突然想到 tcp的ack確認是單獨發的還是和報文一起發的,下面看一下別人的解答

一、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包傳送,減少了網路流量。

延遲確認(delayed ack)

setsockopt(fd, ipproto_tcp, tcp_quickack, (int), sizeof(int))

一般與nagle 在特定場景下使用

TCP的SEQ和ACK的生成

tcp協議工作在osi的傳輸層,是一種可靠的面向連線的資料流協議,tcp之所以可靠,是因為它保證了傳送資料報的順序。順序是用乙個序列號來保證的。響應包內也包括乙個序列號,表示接收方準備好這個序列號的包。在tcp傳送乙個資料報時,它會把這個資料報放入重發佇列中,同時啟動計時器,如果收到了關於這個包的確...

TCP的SEQ和ACK的生成

tcp的seq和ack的生成 1.序列號和確認號的簡介及作用 tcp協議工作在osi的傳輸層,是一種可靠的面向連線的資料流協議,tcp之所以可靠,是因為它保證了傳送資料報的順序。順序是用乙個序列號來保證的。響應包內也包括乙個序列號,表示接收方準備好這個序列號的包。在tcp傳送乙個資料報時,它會把這個...

TCP的SEQ和ACK的生成

tcp的seq和ack的生成 1.序列號和確認號的簡介及作用 tcp協議工作在osi的傳輸層,是一種可靠的面向連線的資料流協議,tcp之所以可靠,是因為它保證了傳送資料報的順序。順序是用乙個序列號來保證的。響應包內也包括乙個序列號,表示接收方準備好這個序列號的包。在tcp傳送乙個資料報時,它會把這個...