您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關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是一個東西,結果導致兩者混淆,一直沒有真正理解這個三次握手,造成錯誤一直持續到現在,悔之晚矣。多加幾個疑問,
就會不再想當然了。
圖中,可以看到第一條,首先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)
以上就是TCP三次握手和四次揮手及其狀態是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。