TCP 三次握手和四次揮手及其狀態
三次握手:
TCP的三次握手過程:
- C端傳送SYN(SYN=1)標誌,同時傳送一個SEQ number(SEQ為一個隨機數),表示要和S端進行連線。(C: SYN_SENT S: LISTEN )
- S端接收到這個含有(SYN=1)的包之後,表示要接受這個包,則回覆一個ACK number(ACK=SEQ+1 ),然後也回覆一個SYN=1,ACK=1的包。( C:SYN_SENT, S:SYN_REVD)
- C端回覆一個ACK number包(ACK=SEQ+1), ACK = 1,然後連線就建立了,剩下的工作就是去傳輸了。(C: ESTABLISHED S:ESTABLISHED)
疑問:
這個地方之前自己存在一個誤區,誤以為SYN 和 SYN number是一個東西,結果導致兩者混淆,一直沒有真正理解這個三次握手,造成錯誤一直持續到現在,悔之晚矣。多加幾個疑問,
就會不再想當然了。
![](https://i.iter01.com/images/c9f1da5a8661b6059c9fd06b26feb816e5b188c1a03a516d81052ad44a9664ec.png)
圖中,可以看到第一條,首先10.0.0.61 向10.1.3.32 傳送了一個SYN包,及SYN的標誌位為1,並且傳送了一個Seq number=2856901853,
第二條:10.1.3.32接收到請求後,返回了一個SYN+ACK包,及確認以及連線包,Ack number=2856901853+1,然後隨機發了一個Seq=3836060639的隨機數。
第三條:10.0.0.61 接收到請求後,返回了一個ACK包,ACK number=3836060639+1 ,然後發了一個Seq=隨機數。
透過以上三條,則建立了一個有狀態的連線,隨後進行的是一個資料傳輸的過程。
三次握手的本質是,雙方可靠的交換了一個Seq號,透過該Seq號,確認了後續傳輸的有序性。
四次揮手:
四次揮手的過程,首先一個很重要的提醒是百度百科中的一句話,及TCP是全雙工的,所以需要來去雙方都來關閉連線。
假設A已經傳完了所有的資料
- A傳送一個FIN標誌位為1的包,表明自己已經完成了傳輸。
- B傳送一個ACK表示自己已經知道了,並且關閉了來自於A->B的連線。
- 過了一會兒,B也傳完了所有的資料,接著B傳送了一個FIN標誌為1的包,然後就傳給了A。
- A一看來了個FIN的標誌,從而說明已經收到了B的斷開連線的訊號,然後A發了一個ACK=1的包,正式斷開了所有連線。
仔細一看這段描述,發現有幾個問題,首先A發了一個FIN=1的包,只是說明A已經將該傳的都傳完了,至於B收到與否,A到底管不管,或者知道不知道。
所以,顯然,事情不應該如上面所說,如同三次握手一樣,必須存在著Seq number的介入。
正確過程如下:
- A傳送一個FIN=1的包,並且有個Seq number。(A:FIN_WAIT_1 B:ESTABLISHED)
- B收到後,返回一個ACK=1的包,並且返回一個Ack number= Seq number+1的包。(A: FIN_WAIT_1 B:CLOSE_WAIT)
- B傳輸完畢後,和另外一個連線一樣,發一個FIN=1的包,並同時攜帶一個Seq number。(A:FIN_WAIT_2 B:LAST_ACK)
- A收到後,返回一個ACK=1的包,並同時把Ack number = seq number +1的包發給A。(A:TIME_WAIT B:CLOSED)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29757574/viewspace-2135346/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- TCP 三次握手和四次揮手圖解(有限狀態機)TCP圖解
- TCP三次握手和四次揮手TCP
- TCP三次握手和四次揮手理解TCP
- TCP 三次握手四次揮手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協議的三次握手和四次揮手TCP協議
- 跟著動畫學TCP三次握手和四次揮手動畫TCP
- 網路協議 - TCP/IP 三次握手和四次揮手協議TCP
- 【網路】TCP協議中三次握手和四次揮手TCP協議
- 詼諧的談談TCP三次握手和四次揮手TCP
- TCP三次握手、四次揮手概念圖詳解TCP
- TCP的三次握手與四次揮手詳解TCP
- Wireshark抓包分析TCP“三次握手,四次揮手”TCP
- linux網路程式設計系列(四)--tcp包頭、三次握手、四次揮手、狀態Linux程式設計TCP
- 跟著動畫學習 TCP 三次握手和四次揮手動畫TCP
- TCP:三次握手和四次揮手,面試無死角答覆TCP面試
- 說說TCP為什麼需要三次握手和四次揮手?TCP
- 關於 TCP 三次握手和四次揮手,滿分回答在此TCP
- TCP協議中的三次握手與四次揮手TCP協議
- 通俗易懂的TCP“三次握手”與“四次揮手”TCP
- 跟著動畫來學習TCP三次握手和四次揮手動畫TCP
- 正本清源:TCP協議之三次握手和四次揮手TCP協議
- 【計算機網路】TCP連線三次握手和四次揮手計算機網路TCP