1. 程式人生 > 實用技巧 >邂逅TCP的三次握手

邂逅TCP的三次握手

TCP的三次握手

TCP的三次握手的三次握手和四次揮手是大家最容易遇到的問題,那麼TCP的三次握手和四次揮手究竟是怎麼回事呢?今天我們來說說TCP的三次握手。
首先我們要了解所謂的握手是怎麼一種怎樣的程序,然後就是為啥得握三次才行?
兩臺主機要進行通訊,要先證明兩臺主機都具備“收”和“發”的能力。所以,TCP的三次握手的目的是為了確認:兩臺主機都具備“”和“的能力。
三次握手實際就是主機A和主機B之間發了三條資訊。主機A需要確認B既可以發也可以收,B也需要確認A既可以發也可以收之後,才會開始真正的通訊。如果有任何一方的收發存在問題,通訊都無法成功。

TCP的第一次握手

第一次握手: 主機A給主機B傳送請求建立連線,二是發出一個序列號。(這裡我們假設為249)

在實際連線中,請求連線用SYN=1表示,序列號用seq = n表示,其中n為一個數也就是這裡的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的序列號。

在第一次傳送資訊的過程中,B知道A可以發,第二次傳送資訊,A接到之後,A就知道了B可以接收也可以發出。那最後只有一個未證明,那就是B還不知道A能不能接收到自己的資訊。雖然主機A接收到了資訊,但是B並不知道,所以B要生成一個數,讓A回覆這個數+1才能確認A也能收到資訊,這就是B要發出序列號的原因。
第二次握手讓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