coding
hadoopCJ的gravatar頭像
hadoopCJ2019-09-25 13:40:20
TCP三次握手那些事兒

最近,一天下班沒啥事,幾個老哥談起來最近新來公司的幾個新人,說到了一個面試題,問他們TCP的3次握手咋回事,幾個人支支吾吾也沒答個所以然,我自己一想,自己好像也都忘了,于是又回過頭去炒了一頓回鍋飯,正好做個記錄吧。我們都知道TCP是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。TCP也是日常通訊中用的最廣泛的一種協議,TCP的連接需要三次握手。為了便于大家理解,我在網上隨便找了個原理圖。

話不多說。三次握手,我來解釋一下。

第一次握手:我們給服務器發消息“喂。老哥,咱兩建個鏈接唄”,我們做這個動作是想證明,我們有沒有發消息的能力,怎么證明呢,需要服務器把我們發的消息回傳回來。

第二次握手:服務器告訴我們“好呀,來啊,來啊”,同時再把我們發的消息回傳給我們。這個時候我們就可確定,我們發消息的能力是沒有問題的,同時服務器也需要通過這次握手來確定自己的發消息能力。也就是這次握手確定了我們的發消息能力,需要確定的是服務器的發消息能力。

第三次握手:我們告訴服務器“得嘞,我馬上就到,等我喲”。這時候服務器就確定了自己的發消息能力是沒有問題的,于是你們就可以愉快的玩耍了。

名詞解釋:SYN:synchronous建立聯機   ACK:acknowledgement 確認

原理圖解釋:

第一次握手:我們發送一個SYN=1,seq=x(x是隨機數字的意思)的數據包,服務器看到我們發過來數據包,就知道你要跟他建立鏈接。

第二次握手:服務器發給我們一個SYN=1,seq=y,ACK=x+1。服務器發送前兩個數據是為了確認自己的發消息能力,第三個數據在我們的seq上加1,以確認建立的是同一個鏈接。

第三次握手:我們只需要向服務器發送一個ACK=y+1,服務器便可以確認自己的發送能力了。

 


打賞

已有3人打賞

lczd888的gravatar頭像Ckxlnd的gravatar頭像最代碼官方的gravatar頭像

分享到:

最近瀏覽
a694110193 LV13小時前
星星
xxljxgz LV208小時前
太陽月亮
琦琦Zoey11小時前
暫無貢獻等級
Bsword LV213小時前
星星星星
暫無貢獻等級
陳簫goddess LV15前天
月亮月亮月亮星星星星星星
靈依ziNing LV4前天
月亮
8317073 LV1010月11日
月亮月亮星星星星
looking LV2010月11日
太陽月亮
頂部客服微信二維碼底部
>掃描二維碼關注最代碼為好友掃描二維碼關注最代碼為好友
2008大乐透走势图