邂逅TCP的三次握手
TCP的三次握手
TCP的三次握手的三次握手和四次揮手是大家最容易遇到的問題,那麼TCP的三次握手和四次揮手究竟是怎麼回事呢?今天我們來說說TCP的三次握手。
首先我們要了解所謂的握手是怎麼一種怎樣的程序,然後就是為啥得握三次才行?
兩臺主機要進行通訊,要先證明兩臺主機都具備“收”和“發”的能力。所以,TCP的三次握手的目的是為了確認:兩臺主機都具備“收”和“發的能力。
三次握手實際就是主機A和主機B之間發了三條資訊。主機A需要確認B既可以發也可以收,B也需要確認A既可以發也可以收之後,才會開始真正的通訊。如果有任何一方的收發存在問題,通訊都無法成功。
TCP的第一次握手
第一次握手: 主機A給主機B傳送請求建立連線,二是發出一個序列號。(這裡我們假設為249)
在主機A給序列號賦值為249,並請求建立連線。
第一次握手是為了讓B主機知道A具備發的能力,即A可以發出資訊。
TCP的第二次握手
第二次握手:主機B回覆資訊給主機A 收到250 傳送序號99.
在實際情況中,這次回覆一共有三條資訊,一是同意和A主機建立連線(SYN=1),二是確認收到剛才的資訊(ack = 剛才的seq+1 為250),三是自己發出自己的序列號(seq=x,其中x為一個數)。主機B同意建立連線併發出“收到250”表示收到剛才的資訊,但是記住一定要對剛才A返回的序列號做+1處理,所以收到A的序列號是249,回覆A的序列號是250.“傳送序列號99”是主機B傳送給A的序列號。
第二次握手讓A知道B能接受到,也能發出。
TCP的第三次握手
第三次握手:主機A傳送資訊給主機B 收到序號100 這次序號是250
第三次回覆也有三條資訊,一是表示現在開始傳送(SYN=0),二是成功收到B資訊(ack=剛才的seq+1),三是這次的資訊的序號是250(seq=最開始發出的序列號+1)
第三次握手讓B知道A能接收到。
圖例
如果你理解了上面的內容,那麼圖表將會讓你更能深刻理解。
主機A | 主機B | |
---|---|---|
收 | 第三次握手 | 第二次握手 |
發 | 第一次握手 | 第二次握手 |
第一次:SYN = 1 請求建立連線 seq = n 傳送序列號
第二次: SYN = 1 同意建立連線 ack= seq +1回覆收到 seq = x 傳送新的序列號
第三次:SYN = 0 開始傳送 ack = x+1 成功收到資訊 seq = n+1這次資訊的序號 即最開始發出的序號+1