TCP序列號和確認號詳解

2021-07-15 05:29:46 字數 1292 閱讀 5008

1.序列號和確認號的簡介及作用

tcp協議工作在osi的傳輸層,是一種可靠的面向連線的資料流協議,tcp之所以可靠,是因為它保證了傳送資料報的順序。順序是用乙個序列號來保證的。 響應包內也包括乙個序列號,表示接收方準備好這個序列號的包。在tcp傳送乙個資料報時,它會把這個資料報放入重發佇列中,同時啟動計時器,如果收到了關於這個包的確認資訊,便將此資料報從佇列中刪除,如果在計時器超時的時候仍然沒有收到確認資訊,則需要重新傳送該資料報。另外,tcp通過資料分段中的序 列號來保證所有傳輸的資料可以按照正常的順序進行重組,從而保障資料傳輸的完整。

2.tcp的通訊過程

在tcp通訊中主要有連線的建立、資料的傳輸、連線的關閉三個過程!每個過程完成不同的工作,而且序列號和確認號在每個過程中的變化都是不同的。

2.1 tcp建立連線

tcp建立連線,也就是我們常說的三次握手,它需要三步完成。在tcp的三次握手中,傳送第乙個syn的一端執行的是主動開啟。而接收這個syn並發回下乙個syn的另一端執行的是被動開啟。

這裡以客戶端向伺服器發起連線來說明。

1) 第1步:客戶端向伺服器傳送乙個同步資料報請求建立連線,該資料報中,初始序列號(isn)是客戶端隨機產生的乙個值,確認號是0;

2) 第2步:伺服器收到這個同步請求資料報後,會對客戶端進行乙個同步確認。這個資料報中,序列號(isn)是伺服器隨機產生的乙個值,確認號是客戶端的初始序列號+1;

先把tcp協議的序列號搞清楚:

1、開始c端隨機生成初始sequence(c),發到s,flag為syn (eg.seq(c)=0)

2、s端回應c端,也隨機生成初始sequence(s) eg. seq(s)=0,ack=sequence(c)+1,表示收到c端的連線請求,flag為syn+ack(eg. seq(s)=0, ack=1)

3 、c端回應s端,ack=sequence(s)+1,表示收到s端的連線回應,flag為ack (eg. ack=1)

至此三次握手建立,此後雙方的序列號變化為:

剛開始任一方(不分c或s)的sequence=sequence(握手時)+1

至於next sequence是wireshark自己加上去的,其值為 n_sequence=此次傳送包的sequence+tcp層以上負載的資料長度.也就是下次發包時該方將會使用的sequence值

5、同理任一方的ack=收到的對方的sequence+其tcp層以上負載的資料長度,也就是期待對方下一次發包所使用的sequence值

回家後再完成這篇文章

參考資料:

TCP序列號和確認號詳解

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

TCP序列號和確認號詳解

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

TCP三次握手的過程,以及序列號和確認號的作用

tcp握手協議 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。1 第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 syn 同步序列編號 synchronize sequence numbers 2 第二次握...