在tcp協議三報文握手建立連線的過程中,tcp請求報文段中存在ack和ack兩個數值。要搞清楚這兩個數值的含義,得了解tcp報文段的首部格式:
1、tcp報文段的首部格式:
tcp報文段分為首部與資料部分兩大部分,首部存放tcp報文段相關資訊,資料部分存放tcp報文段資料內容。首部按順序存在20個固定位元組與4n個長度可變的選項位元組,這裡不討論首部無關字段,與主題相關的兩個欄位為「確認號」欄位與「ack」字段(如下圖)。
重要前提:tcp連線中傳送的位元組流中的每乙個位元組都按順序編號,編號相關的資訊存放於「序號」欄位中。
(1)確認號字段:該欄位存放的資訊為期望收到對方下乙個報文段的第乙個資料位元組的序號。 例:a向b傳送資料報文段,b需給a傳送乙個收到確認報文段來告知a已收到其發來的資料報文段。在b給a傳送的確認報文段中,確認號為501,即表明序號1-500的位元組已成功收到,接下來期望收到從a發來的序號為501的位元組。
(2)ack欄位:在tcp報文段中,欄位ack=1時,確認號字段才有效。tcp規定,在連線建立後所有傳送的報文段都必須把ack置1。
2、三報文握手中ack與ack的含義
tcp的連線建立時,使用三報文握手的方式建立連線(例如下圖)。
客戶端與伺服器來回共傳送三個tcp報文段來建立運輸連線,三個tcp報文段分別為:
(1)客戶端a向伺服器b傳送的tcp請求報文段「syn=1,seq=x」;
(2)伺服器b向客戶端a傳送的tcp確認報文段「syn=1,ack=1,seq=y,ack=x+1」;
(3)客戶端a向伺服器b傳送的tcp確認報文段「ack=1,seq=x+1,ack=y+1」。
ack:這裡出現的ack即為上面所說的tcp報文段首部中的「ack欄位」,置1時該報文段為確認報文段。
ack:而ack則為tcp報文段首部中「確認號字段」的具體數值。ack=x+1說明b希望a下次發來的報文段的第乙個資料位元組為序號=x+1的位元組;ack=y+1說明a希望b下次發來的報文段的第乙個資料位元組為序號=y+1的位元組。
TCP之ACK傳送場景
我現在的理解,在有以下幾種情景,tcp會把ack包發出去 1.收到1個包,啟動200ms定時器,等到200ms的定時器到點了 第二個包沒來 於是對這個包的確認ack被傳送。這叫做 延遲傳送 2.收到1個包,啟動200ms定時器,200ms定時器還沒到,第二個資料報又來了 兩個資料報乙個ack 3.收...
TCP的SEQ和ACK的生成
tcp協議工作在osi的傳輸層,是一種可靠的面向連線的資料流協議,tcp之所以可靠,是因為它保證了傳送資料報的順序。順序是用乙個序列號來保證的。響應包內也包括乙個序列號,表示接收方準備好這個序列號的包。在tcp傳送乙個資料報時,它會把這個資料報放入重發佇列中,同時啟動計時器,如果收到了關於這個包的確...
TCP的SEQ和ACK的生成
tcp的seq和ack的生成 1.序列號和確認號的簡介及作用 tcp協議工作在osi的傳輸層,是一種可靠的面向連線的資料流協議,tcp之所以可靠,是因為它保證了傳送資料報的順序。順序是用乙個序列號來保證的。響應包內也包括乙個序列號,表示接收方準備好這個序列號的包。在tcp傳送乙個資料報時,它會把這個...