TCP的SEQ和ACK的生成

2021-06-28 14:16:47 字數 2100 閱讀 9761

**:

tcp的seq和ack的生成

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;

注意:因為乙個syn將占用乙個序號,所以要加1。

初始序列號(isn)隨時間而變化的,而且不同的作業系統也會有不同的實現方式,所以每個連線的初始序列號是不同的。tcp連線兩端會在建立連線時,互動一些資訊,如視窗大小、mss等,以便為接著的資料傳輸做準備。

rfc793指出isn可以看作是乙個32bit的計數器,每4ms加1,這樣選擇序號的目的在於防止在網路中被延遲的分組在以後被重複傳輸,而導致某個連線的一端對它作錯誤的判斷。

2.2 tcp傳輸資料

在tcp建立連線後,就可以開始傳輸資料了。tcp工作在全雙工模式,它可以同時進行雙向資料傳輸。這裡為了簡化,我們只談伺服器向客戶端傳送資料的情況,而客戶端向伺服器傳送資料的原理和它是類似的,這裡便不重複說明。

伺服器向客戶端傳送乙個資料報後,客戶端收到這個資料報後,會向伺服器傳送乙個確認資料報。

傳輸資料的簡要過程如下:

1)   傳送資料:伺服器向客戶端傳送乙個帶有資料的資料報,該資料報中的序列號和確認號與建立連線第三步的資料報中的序列號和確認號相同;

資料分段中的序列號可以保證所有傳輸的資料按照正常的次序進行重組,而且通過確認保證資料傳輸的完整性。

2.3 tcp關閉連線

前面我們提到,建立乙個連線需要3個步驟,但是關閉乙個連線需要經過4個步驟。因為tcp連線是全雙工的工作模式,所以每個方向上需要單獨關閉。在tcp關閉連線時,首先關閉的一方(即傳送第乙個終止資料報的)將執行主動關閉,而另一方(收到這個終止資料報的)再執行被動關閉。

關閉連線的4個步驟如下:

1)   第1步:伺服器完成它的資料傳送任務後,會主動向客戶端傳送乙個終止資料報,以關閉在這個方向上的tcp連線。該資料報中,序列號為客戶端傳送的上乙個資料報中的確認號值,而確認號為伺服器傳送的上乙個資料報中的序列號+該資料報所帶的資料的大小;

2)   第2步:客戶端收到伺服器傳送的終止資料報後,將對伺服器傳送確認資訊,以關閉該方向上的tcp連線。這時的資料報中,序列號為第1步中的確認號值,而確認號為第1步的資料報中的序列號+1;

3)   第3步:同理,客戶端完成它的資料傳送任務後,就也會向伺服器傳送乙個終止資料報,以關閉在這個方向上的tcp連線,該資料報中,序列號為伺服器傳送的上乙個資料報中的確認號值,而確認號為客戶端傳送的上乙個資料報中的序列號+該資料報所帶資料的大小;

4)   第4步:伺服器收到客戶端傳送的終止資料報後,將對客戶端傳送確認資訊,以關閉該方向上的tcp連線。這時在資料報中,序列號為第3步中的確認號值,而確認號為第3步資料報中的序列號+1;

注意:因為fin和syn一樣,也要佔乙個序號。理論上伺服器在tcp連線關閉時傳送的終止資料報中,只有終止位是置1,然後客戶端進行確認。但是在實際的tcp實現中,在終止資料報中,確認位和終止位是同時置為1的,確認位置為1表示對最後一次傳輸的資料進行確認,終止位置為1表示關閉該方向的tcp連線。

TCP的SEQ和ACK的生成

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

TCP的SEQ和ACK的生成

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

TCP連線中seq和ack是什麼東西呢

seq是序列號,這是為了連線以後傳送資料用的,ack是對收到的資料報的確認,值是等待接收的資料報的序列號。在第一次訊息傳送中,a隨機選取乙個序列號作為自己的初始序號傳送給b 第二次訊息b使用ack對a的資料報進行確認,因為已經收到了序列號為x的資料報,準備接收序列號為x 1的包,所以ack x 1,...