TCP戀愛史 三次握手和四次分手

2021-06-26 12:37:18 字數 1934 閱讀 5511

tcp協議非常重要,這裡把它的連線和釋放整理一下。

1、  客戶端發起,像伺服器傳送的報文syn=1,ack=0,然後選擇了乙個初始序號:seq=x。

syn是幹什麼用的?

在鏈結的時候建立乙個同步序號,當syn=1同時ack=0的時候,表明這是乙個連線請求的報文段。如果對方有意鏈結,返回的報文裡面syn=1,ack=1,。從這個意義上來說,syn=1的時候,就表明這是乙個『請求』或者『接受請求』的報文。

syn=1的報文段不能攜帶資料。但是要消耗掉乙個序號,

ack是幹什麼用的?

僅當ack=1的時候,確認字型大小(期望收到對方下乙個報文段的第乙個資料位元組的編號)才有效。因此,tcp規定,當鏈結建立之後,所有往來的報文裡面的ack都應該是1(事實上,也只有客戶端發起的鏈結請求報文的ack沒有置1)。

現在的狀態:客戶端進入syn-send狀態;

2、  伺服器接收到了syn=1,ack=0的請求報文之後,返回乙個syn=1,ack=1的確認報文。

同時,確認號ack=x+1,同時也為自己選擇乙個初始序號seq=y

現在的狀態:伺服器進入syn-revd狀態;

3、  客戶端接收到了伺服器的返回資訊之後,還要給伺服器返回最後一條確認,ack=1,確認號ack=y+1;

現在的狀態:客戶端進入established狀態。

下面說一下為什麼兩次握手不行,非得三次:

首先說明一種正常的情況,就是客戶端傳送了一條請求鏈結的報文,但是由於網路原因丟失了,所以,不可能接收到伺服器端的確認。這個時候,客戶端就就只有再一次傳送原來的請求報文,這次伺服器收到之後返回確認,客戶端再確認一次,鏈結確立。

然後考慮一種不正常的情況,客戶端發了兩次請求鏈結的報文,第二條被伺服器捕捉到,返回資料,完成了兩次握手。資料傳送完成之後,鏈結關閉。但是這時候,第一條擁塞的請求報文現在到達了伺服器端,伺服器還以為客戶端要又一次建立連線,於是傳送確認,然後把自己敞開,等著客戶端傳送過來資料。於是,很多的網路資源就是這樣浪費掉了。

要是實行三次握手,伺服器收到了一條過期的請求報文,返回確認資訊,客戶端接收到了伺服器的資訊之後感到莫名其妙,心想:我他媽又沒要鏈結,你返回這個是不是瘋了。於是不置一詞。伺服器過一段時間還沒有收到第三次握手的資料,知道客戶端並沒有要求建立鏈結的請求,含淚離開。

現在雙方的狀態都是established狀態。

1、  客戶端發起請求,請求斷開鏈結。fin=1,seq=u。u是之前傳送過來的最後乙個位元組的序號+1。

fin:用來釋放乙個鏈結,當fin=1的時候,表明此報文的傳送方已經完成了資料的傳送,沒有新的資料要傳送,並要求釋放鏈結。

客戶端進入fin-wait-1狀態,等著伺服器返回確認;

2、  伺服器收到客戶端的請求斷開鏈結的報文之後,返回確認資訊。ack=1,seq=v,ack=u+1。

伺服器進入close-wait狀態。

這個時候,客戶端不能給伺服器傳送資訊報文,只能接收。但是伺服器要是還有資訊要傳給伺服器,仍然能傳送。

3、  當伺服器也沒有了可以傳的資訊之後,給客戶端傳送請求結束的報文。fin=1,ack=1,

ack=u+1,seq=w。

這個時候的狀態:伺服器進入last-ack狀態。

4、  客戶端接收到fin=1的報文之後,返回確認報文,ack=1,seq=u+1,ack=w+1。

傳送完畢之後,客戶端進入等待狀態,等待兩個時間週期。關閉。

為什麼最後還要等待兩個時間週期呢?

1、  客戶端的最後乙個ack報文在傳輸的時候丟失,伺服器並沒有接收到這個報文。這個候。

伺服器就會超時重傳這個fin訊息,然後客戶端就會重新返回最後乙個ack報文,等待兩個時間週期,完成關閉。如果不等待這兩個時間週期,伺服器重傳的那條訊息就不會收到。伺服器就因為接收不到客戶端的資訊而無法正常關閉。

2、  預防上一次在三次握手中提到的失效的報文干擾。兩個時間週期過去之後,所有的報文都會在網路中消失,保證下一次重新連線的時候有亂七八糟的報文影響。

原文: 

TCP戀愛史 三次握手和四次分手

tcp協議非常重要,這裡把它的連線和釋放整理一下。首先是三次握手 1 客戶端發起,像伺服器傳送的報文syn 1,ack 0,然後選擇了乙個初始序號 seq x。syn是幹什麼用的?在鏈結的時候建立乙個同步序號,當syn 1同時ack 0的時候,表明這是乙個連線請求的報文段。如果對方有意鏈結,返回的報...

TCP戀愛史 三次握手和四次分手

tcp協議非常重要,這裡把它的連線和釋放整理一下。1 客戶端發起,像伺服器傳送的報文syn 1,ack 0,然後選擇了乙個初始序號 seq x。syn是幹什麼用的?在鏈結的時候建立乙個同步序號,當syn 1同時ack 0的時候,表明這是乙個連線請求的報文段。如果對方有意鏈結,返回的報文裡面syn 1...

TCP三次握手,四次分手

tcp報文重要字段 1 序號 seq序號,佔32位 2 確認號 ack序號,32位,只有標誌位ack位1時,確認號才有效。ack seq 1 3 標誌位 共六個 urg 緊急指標,告訴接收tcp模組緊要指標域指著緊要資料。ack 置1時表示確認號 為合法,為0的時候表示資料段不包含確認資訊,確認號被...