【計算機網絡】最幽默風趣的“三次握手”打開方式。

TCP是一個面向連接的協議。運輸連接就是用來傳送TCP報文的,因此,連接的建立和釋放是每一次面向連接的通信中,必不可少的過程。
在這裏插入圖片描述
所以,運輸連接有三個階段:

  • 連接的建立
  • 數據傳送
  • 連接釋放

一般需要解決的問題就是:
1.一方能夠知曉另一方的存在。
2.雙方約定一些參數。
3.能對運輸實體進行分配。
TCP連接的建立採用CS(client - server)的方式,主動發起連接建立的進程是客戶端 , 被動等待的進程是服務器

TCP連接建立

在這裏插入圖片描述
第一次握手:建立連接時,客戶端發送syn包(syn=x)到服務器,並進入SYN_SENT狀態,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。

第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(syn=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。

問題
爲什麼客戶端最後一次還需要發送一次確認呢?

主要是爲了防止已經失效的連接請求報文,突然又傳到了服務端,產生錯誤。

所謂的“失效的連接”請求報文是這樣產生的。第一次客戶發送請求連接報文,但是由於請求連接報文丟失而沒有收到確認。於是客戶在第二次發送一次請求連接報文,後來受到了服務端的確認報文,建立連接。

第一次發送的報文丟失,第二個到達,沒有失效的連接請求報文。如果是,第一次請求連接報文並沒有丟失,而是在網絡中滯留的時間比較長,假設時間延誤的有點長,以至於第二次釋放連接之後纔到達服務端。(爲何要這樣假設? 連接只能是一對一)。此時,就會認爲是客戶又新建立了一次連接 ,於是,服務端向客戶發送確認報文,同意建立連接。如果沒有第三次握手,此刻應該是建立連接成功。
對於客戶端來說 ,並沒有發出建立連接的請求,所以,完全不理會服務端的確認,也不會向服務端發送數據 ,但是服務端卻認爲新的連接已經建立。一直等待客戶 發送數據 ,這就浪費了 服務端資源。

趣解
開始建立連接

TCP 三次握手好比在一個夜高風黑的夜晚,你一個人在小區裏散步,不遠處看見棟單元樓的陽臺上又一個漂亮的妹紙。

你首先向妹子招手(syn),妹子看到你向自己招手後,向你點了點頭擠出了一個微笑(ack)。你看到妹子微笑後確認了妹子成功辨認出了自己(進入estalished狀態)。

但是妹子有點不好意思,向樓下和樓上看了一看,有沒有可能你是在看別人呢,她也需要確認一下。妹子也向你招了招手(syn),你看到妹子向自己招手後知道對方是在尋求自己的確認,於是也點了點頭擠出了微笑(ack),妹子看到對方的微笑後確認了你就是在向自己打招呼(進入established狀態)。

回顧以下,這個過程中總共有四個動作,

  • 你招手
  • 妹子點頭微笑
  • 妹子招手
  • 你點頭微笑

其中妹子連續進行了兩個動作,先是點頭微笑(回覆對方),然後再次招手(尋求確認),實際上我們可以將這兩個動作合成一個動作,招手的同時點頭和微笑(syn+ack)。於是這四個動作就簡化成了三個動作。

  • 你招手
  • 妹子點頭微笑並招手
  • 你點頭微笑

這就是三次握手的本質,中間的一次動作是兩個動作的合併。

握手完成後,開始TCP 數據傳輸

TCP需要反覆的讓對方確認聽到自己說的話。

你喊了一句 我宣你 (data),妹子聽見了之後要向你回覆自己聽見了(ack)。如果你喊了一句,半天沒聽到妹子回覆,你會很低落,好比談戀愛的時候,你滿腔熱情,而妹子忽冷忽熱,所以你鍥而不捨,一次不行,就兩次,兩次不行就三次,這就是【舔狗文化tcp重傳=。

也有可能是妹子知道你的本意了,但是妹子有點害羞,遲遲沒有回覆亦或是妹子回覆了你沒收到,以至於你沒收到妹子的回覆。你不能判斷究竟到底妹子喜不喜歡你,對你有沒有好感,沒關係,舔狗嘛?要主動點,重傳一下就好。

會重傳,妹子就有可能同一句話聽見了兩次,這就是去重

紙上得來終覺淺,欲知此時要躬行

參考: 計算機網絡【謝希仁】
https://www.cnblogs.com/Qing-840/p/9283367.html
https://baijiahao.baidu.com/s?id=1614404084382122793&wfr=spider&for=pc
https://blog.csdn.net/qq_38950316/article/details/81087809

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章