TCP戀愛史:三次握手和四次分手
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
- TCP的三次握手與四次分手TCP
- 圖解TCP三次握手與四次分手圖解TCP
- 簡析TCP的三次握手與四次分手TCP
- TCP 的 三次握手 四次握手TCP
- TCP三次握手和四次揮手TCP
- TCP三次握手和四次揮手理解TCP
- TCP三次握手四次揮手TCP
- TCP三次握手&四次揮手TCP
- TCP 三次握手四次揮手TCP
- TCP:三次握手、四次握手、backlog及其他TCP
- 簡述TCP三次握手和四次揮手TCP
- TCP建立連線三次握手和釋放連線四次握手TCP
- TCP 三次握手 與 四次揮手TCP
- TCP 、 UDP、三次握手、四次揮手TCPUDP
- TCP三次握手與四次揮手TCP
- TCP的三次握手四次揮手TCP
- 說說TCP的三次握手和四次揮手TCP
- 圖解TCP的三次握手和四次揮手圖解TCP
- TCP協議的三次握手和四次揮手TCP協議
- TCP 三次握手和四次揮手及其狀態TCP
- TCP的三次握手與四次揮手TCP
- TCP三次握手四次揮手介紹TCP
- TCP三次握手及四次揮手理解TCP
- TCP-三次握手和四次揮手簡單理解TCP
- TCP協議特點和三次握手/四次揮手TCP協議
- 跟著動畫學TCP三次握手和四次揮手動畫TCP
- 看圖理解TCP的三次握手和四次揮手TCP
- TCP協議三次握手連線四次握手斷開和DOS攻擊TCP協議
- 詳解TCP一:三次握手、四次揮手TCP
- tcp三次握手、四次揮手過程解析TCP
- 【網路】TCP協議中三次握手和四次揮手TCP協議
- 談談TCP協議的三次握手和四次揮手TCP協議
- 詼諧的談談TCP三次握手和四次揮手TCP
- TCP:三次握手和四次揮手,面試無死角答覆TCP面試
- 網路協議 - TCP/IP 三次握手和四次揮手協議TCP
- 跟著動畫學習 TCP 三次握手和四次揮手動畫TCP
- TCP連線為什麼三次握手和四次揮手TCP