原創 | 老生常談,TCP爲啥要三次握手?

前言

今天肥朝和大家嘮嘮老生常談的一個問題,TCP爲什麼要三次握手。爲什麼會突然想起這個話題呢?

按照肥朝以往的風格,網上一搜就一大把的文章,肥朝一般都是不願意去提及的。其實每個技術人都或多或少萌生過寫博客的想法,但是後面發現想寫的內容網上似乎都有,最後就斷了這個念頭。

圖片

因此,肥朝的定位就兩個,一個是成體系的源碼解析類文章(類似17年的Dubbo源碼解析和19年的圖解SpringBoot源碼),一個是真實場景源碼實戰,既然是真實場景,那麼雷同的概率就幾乎忽略不計了。

既然如此,那爲啥要提TCP的三次握手?這些別說網上了,大學課本都大把,而且還權威。

對於學習的一些思考

計算機原理網絡編譯原理數據結構與算法等標配計算機知識上,我們經常遇到的問題是,學了面試完就忘,下次面試又要重新“背”題,這樣就會導致時間成本過大。因此這段時間肥朝也在思考如何學習這個問題。因爲這些標配的知識點,往往晦澀難懂,需要一定的功力和工作年限才能做到理解性記憶。我在思考,學習知識的過程,能否也像架構演進一樣,從0到1,從1到10,從10到100這樣呢?具體是什麼意思呢?

就像架構演進一樣,我們先用最簡單的單機應用快速搭建業務搶佔市場,而不是一上來就直接分佈式、高可用,容器化。

同理我們理解一個知識點,是不是一開始並不一定要這麼權威,而是先粗略瞭解他的大致基本思路,等工作經驗、知識體系逐步豐滿完善,我們再回過頭,再進一步學習,這樣效果是否會更好?

回到主題

要說TCP爲什麼是三次握手,那麼其實換個角度而言,就是要證明2次太少,4次又沒必要。

所謂的三次握手,他的本質是什麼?TCP是可靠傳輸協議,他的本質其實就是要確定客戶端和服務端,他們的發送接收能力是沒有問題的。也就是客戶端要考察服務端的發送接收能力,服務端也要考察客戶端的發送接收能力。

第一次握手

肥朝小聲逼逼:第一次握手服務端收到了數據包,確定了客戶端的發送能力是沒有問題的(如圖)

第二次握手

肥朝小聲逼逼:第二次握手客戶端收到了數據包,這個時候,就能證明服務端的發送能力是沒有問題的。但是服務端的接收能力有沒有問題呢?第一次握手的時候,我們提出的問題是“怎麼找到肥朝的公衆號?”,收到的回答是“公衆號搜索名稱肥朝就可以了,你試下可以了告訴我”。回答正好是我們剛纔問的,那就說明,服務端的接收能力是沒有問題的(如圖)

那麼,回到剛開始的問題,爲啥兩次握手不行,因爲這個時候,客戶端已經確定了服務端的發送接收能力都沒有問題,但是服務端,卻沒有確定,客戶端的接收能力,到底有沒有問題。

第三次握手

圖片

肥朝小聲逼逼:第三次握手,服務端收到了數據包,發現確實是剛纔提問的答案,那麼,就確定了客戶端的接收能力是沒有問題的。

再次回到剛纔的問題,3次,是完成雙方考察發送接收能力的最少次數。這也就是爲啥不是2次,也不是4次。

寫在最後

當然你想看更專業的TCP相關知識,大學和考研教輔資料也是不錯的選擇。留言和肥朝說一下你的春節學習情況吧。



圖片


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