動畫:用動畫給女朋友講解 TCP 四次分手過程

一隻不甘平凡的小鹿發表於2019-10-21

在這裡插入圖片描述
作者 | 小鹿
來源 | 公眾號:小鹿動畫學程式設計


一、寫在前邊

大家好,我們又見面了,做為一個業餘的動畫師,上次的用動畫的形式講解 TCP 三次握手過程再各大平臺收到了廣大讀者的喜愛,說文章有趣、有貨、有內容,也受到了很多讀者的關注。很多讀者留言說什麼時候用動畫講一講 TCP 四次揮手的過程,為了應大家的要求,今天我們就生動有趣的用動畫給大家分享 TCP 四次揮手(分手)過程。

動畫:用動畫給面試官解釋 TCP 三次握手過程

上次的三次握手動畫是給面試官看的,那麼今天我們們換種更加有樂趣的方式,用動畫和你女(男)朋友講解 TCP 四次分手過程,講解完,考驗一下你女(男)朋友和不和你分手呢。什麼?首先你先有一個女(男)朋友,這一點小鹿早就考慮到了各大單身人士。

獲取方式:

如果你沒有女朋友,公眾號後臺回覆“女朋友”,即可獲取。小鹿不要臉的說,作為一個優秀的動畫師,女性讀者也是很多的,哈哈,公眾號回覆“男朋友”,小鹿會給你隨機發放一個,嘿嘿,不信你試試。還等什麼,把你女(男)朋友拉過來給她(他)講吧。


二、思維導圖

在這裡插入圖片描述

三、為何要進行 TCP 三次握手/四次分手?

TCP 的三次握手和四次分手和你戀愛是一模一樣的,從相識到相戀到分手,然後認識另一個女孩再不管重複這個過程就是資料傳輸在網路中不斷建立起三次握手和四次分手過程。

戀愛就戀愛吧,分手就分手吧,握手握來握去,揮手揮來揮去不嫌麻煩嗎?

因為上篇文章 TCP 三次握手中的為什麼要進行三次握手部分講解的不怎麼詳細,小鹿課下就收集了一些資料,做了一個總結,在這裡補充下。


3.1 為什麼要進行三次握手?

在謝希仁著《計算機網路》第四版中講“三次握手”的目的是“為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤”。

舉個簡單易懂的例子,你在微信對一個女孩表白,這條資訊由於網路問題延遲傳送了。

在這裡插入圖片描述

然後此時你不耐煩了,去和微信另一個女孩表白,然後另一個女孩告訴你同意了,然後你心裡很高興,把高興的心情分享給了女孩,女孩知道了你和她在一起很高興,此時三次握完畢,你戀愛了。

在這裡插入圖片描述
突然,到了第二天,發給第一個女孩的資訊才收到,女孩認為你要和他表白,此時你已經和另一個女孩戀愛了,然後第一個女孩給你發微信同意了你的表白,但是你不理睬,那個女孩還在苦苦等待你給她分享此時的高興心情。現在我們發現如果沒有分享高興的心情給女孩(也就是第三次握手過程),那麼那個女孩一直等待,白白浪費了心思,所謂的千年都等不了一回。

在這裡插入圖片描述
如果你是客戶端,女孩是服務端,服務端收到延遲的報文,以為你要和它連線,所以會給你傳送確認同意連線,但你一直不搭理它,所以服務端的資源也就這麼白白浪費掉了。所以知道為什麼要進行三次握手了吧。

在《計算機網路》書中講“三次握手”的目的是為了解決“網路中存在延遲的重複分組”的問題。


3.2 為什麼要 TCP 四次分手?

我們知道,TCP協議是一種面向連線的、可靠的、基於位元組流的運輸層通訊協議,而且TCP是全雙工模式。

對於初學者來說,定義太枯燥、無味,其實意思就是你和你女朋友聊天是面向連線的,只有連線起來才可以通訊的,可靠就是你傳送的資訊可以保證送達到對方,全雙工意思就是你不僅可以給你女朋友發訊息,而且她也可以給你發資訊。

為什麼非要進行 TCP 四次分手?我們接著上回說到,你現在和第二個女孩子戀愛了,突然有一天發現第一個女孩子是因為沒有收到你的表白而錯過了在一起的時機,那麼你要和第二個女孩子分手,那過程對應在 TCP 四次分手是怎麼樣子的?
在這裡插入圖片描述
你要給第二個女孩子微信發訊息,我們分手吧,此時第二個女孩子收到訊息知道了,非常傷心,就遮蔽了你。但是,此時你還沒有遮蔽她,她完全可以給你繼續發訊息,她給你發訊息說,好吧,此時你收到了確認訊息,此時是第二次分手過程。那麼女孩又給你傳送訊息,渣男,永遠不要來找我。此時你又接收到訊息,看到訊息之後發了一個拜拜,然後你就直接遮蔽拉黑了對方,此時女孩微信顯示你刪除了對方,然後就把你也拉黑刪除了。那麼四次分手到此為止,恭喜你,成功獲得下一個女孩子。

上述過程就闡述了為什麼要進行 TCP 四次分手,為了能夠讓對方遮蔽你直至最後雙方互相刪除掉,然後你又可以和另一個女孩三次握手了。


四、TCP 四次分手過程

初始化狀態:客戶端和服務端都在連線狀態,接下來開始進行四次分手斷開連線操作。
在這裡插入圖片描述

  • 第一次分手:第一次分手無論是客戶端還是服務端都可以發起,因為 TCP 是全雙工的。

假如客戶端傳送的資料已經傳送完畢,傳送FIN = 1 告訴服務端,客戶端所有資料已經全發完了,服務端你可以關閉接收了,但是如果你們服務端有資料要發給客戶端,客戶端照樣可以接收的。此時客戶端處於FIN = 1等待服務端確認釋放連線狀態。

在這裡插入圖片描述

  • 第二次分手:服務端接收到客戶端的釋放請求連線之後,知道客戶端沒有資料要發給自己了,然後服務端傳送ACK = 1告訴客戶端受到你發給我的資訊,此時服務端處於 CLOSE_WAIT 等待關閉狀態。

在這裡插入圖片描述

  • 第三次分手:此時服務端向客戶端把所有的資料傳送完了,然後傳送一個FIN = 1,用於告訴客戶端,服務端的所有資料傳送完畢,客戶端你也可以關閉接受資料連線了。此時服務端狀態處於LAT_ACK狀態,來等待確認客戶端是否收到了自己的請求。

在這裡插入圖片描述

  • 第四次分手:此時如果客戶端收到了服務端傳送完的資訊之後,就傳送ACK = 1,告訴服務端,客戶端已經收到了你的資訊。但是我們發現上圖中有一個 2 MSL 的延遲等待。

在這裡插入圖片描述

五、為什要有 2 MSL 等待延遲?

對應這樣一種情況,最後客戶端傳送的ACK = 1給服務端的過程中丟失了,服務端沒收到,服務端怎麼認為的?我已經傳送完資料了,怎麼客戶端沒回應我?是不是中途丟失了?然後服務端再次發起斷開連線的請求,一個來回就是2MSL,這裡的兩個來回由那一個來回組成的?

客戶端給服務端傳送的ACK = 1丟失,服務端等待 1MSL沒收到,然後重新傳送訊息需要1MSL。如果再次接收到服務端的訊息,則重啟2MSL計時器,傳送確認請求。客戶端只需等待2MSL,如果沒有再次收到服務端的訊息,就說明服務端已經接收到自己確認訊息;此時雙方都關閉的連線,TCP 四次分手完畢。


六、如果雙方建立連線,一方出問題怎麼辦?

如果雙方建立連線,一方出問題怎麼辦?為了防止出現上述戀愛故事中千年等一回的情況,已經建立連線,但是服務端一直等待接收,傳送端出現問題一直不能傳送。

所以設計一個保活的計時器,如果一方出現問題,另一方過了這個計時器的時間,就傳送試探報文,以後每隔 75 秒傳送一次。若一連傳送10個探測報文仍然沒反應,伺服器就認為客戶端出了故障,接著就關閉連線。


七、小結

今天用動畫的形式給你女(男)朋友講了 TCP 四次分手的過程,文章的內容以及展現形式是最基礎的內容。

最後小鹿為大家整理的三次握手和四次分手整張圖,如下:
在這裡插入圖片描述

最後希望你和你的女朋友永遠三次握手,永不四次分手。

上一篇:動畫:用動畫給面試官解釋 TCP 三次握手過程


推薦閱讀:

1、面試:你真的懂網路分層模型嗎?(上)

2、面試:你真的懂網路分層模型嗎?(下)



❤️ 不要忘記留下你學習的腳印 [點贊 + 收藏 + 評論]

文章都看完了,為何不妨點個贊呢?嘻嘻,那就說明你很自私,你怕那麼好的文章讓別人也看到。開個小小玩笑。

其實我也很自私,我把我的一直以來堅持原創的公眾號:「小鹿動畫學程式設計」偷偷給你,裡邊匯聚了小鹿以動畫形式講解的資料結構與演算法、網路原理、Web 等技術文章。

在這裡插入圖片描述

動一動你的小手,點贊就完事了,每個人出一份力量(點贊 + 評論)就會讓更多的學習者加入進來!非常感謝! ̄ω ̄=


作者Info:

【作者】:小鹿

【原創公眾號】:小鹿動畫學程式設計。

【簡介】:和小鹿同學一起用動畫的方式從零基礎學程式設計,將 Web前端領域、資料結構與演算法、網路原理等通俗易懂的呈獻給小夥伴。先定個小目標,原創 1000 篇的動畫技術文章,和各位小夥伴共同努力一起學習!公眾號回覆 “資料” 送一從零自學資料大禮包!

【轉載說明】:轉載請說明出處,謝謝合作!~

相關文章