JAVA面試-計算機網路-TCP三次握手

CS發表於2021-03-29

學習原因

這個是面試的一個常問熱點,所以務必要掌握。

通俗示例

小紅是人事部門的員工,現在正在招收IT人員,小明看到招聘資訊和待遇,感覺很適合自己,所以準備和小紅髮訊息瞭解具體情況。而簡歷在本故事中代表最終要傳送的資料。

首先,小明發訊息給小紅,向她表示想要應聘公司的IT部門,想要投簡歷進一步交流了解。這是第一次資訊交流,這個時候簡歷還沒有投遞,只是小明讓小紅知道他想要投簡歷應聘這個職位。這也是第一次握手的作用,用於客戶端詢問服務端是否可以進行互動。

而小紅看到了小明的資訊後,就回訊息和他說,可以啊,我們人數還沒招滿,我歡迎你投簡歷。這是第二次資訊交流,是小紅表示她有空,也有興趣接收小明的簡歷。這也是第二次握手的作用,用於服務端向客戶端表示可以接收資訊。

小明看到訊息後,又回了小紅資訊說,謝謝你能給我機會去應聘這個職位,我現在簡歷準備好了,也做好傳送簡歷的準備了,你現在開放一下郵箱,兩分鐘後就能接收到我的簡歷了。這是第三次資訊互動,為了小紅知道小明已經做好傳送簡歷準備,並讓小紅開放接收簡歷的渠道,讓簡歷能順利接收。這也是第三次握手的作用,讓服務端知道客戶端已經做好傳送資訊準備,並讓服務端開放資訊接收,從而完成三次握手。

小紅看到訊息後,開啟了郵箱接收功能,過了一會,就接收到了小明的簡歷了。

以上就是三次握手的通俗表達,第一次小明詢問是否還招人,第二次是小紅回覆還招人,第三次是小明為了確保小紅能收到資訊,進行最終的確認。這就是三次握手的通俗表達。

有的人可能覺得最後還要再提醒,就很墨跡,覺得可以改成下面這個步驟:

1、小明跟小紅髮訊息,我想要應聘貴公司,如果還招人的話,我直接投簡歷給您。這是第一次

2、小紅回訊息說,我們還招人,你投吧。然後就開啟郵箱等待接收簡歷。這是第二次

3、小明看到資訊後,直接傳送簡歷,然後小紅就可以接受到簡歷了。

按照上面的描述,直接就省略了小明第三次最終確認的步驟,減少了資訊互動的步驟,提升了資訊互動效率,何樂而不為呢?按照效率來說,的確是這樣的,畢竟少了一次資訊最終確認,但是這樣可能導致資源浪費的問題。

我再講兩個例子,來描述只交換資訊兩次的兩大弊端。

弊端一:

1、小明跟小紅髮訊息,我想要應聘貴公司,如果還招人的話,我直接投簡歷給您。這是第一次。但是好巧不巧,這一次傳送時頁面一直轉圈圈等待,小明以為沒有傳送出去,重新整理頁面又再傳送一遍。而實際上第一次由於網路卡頓,已經發出去了,但是比第二次更晚到達。

2、這時候,小紅接受到小明第二次傳送的資訊,小紅回訊息說,我們還招人,你投吧。然後就開啟郵箱等待接收簡歷。這是第二次。小明接收到資訊後就直接傳送簡歷過去,完成資訊互動。

3、而在小紅接收到簡歷後,突然,小明傳送的第一次資訊突破重重關卡又到了,這是時候小紅就接收到小明第一次的傳送資訊。然後小紅以為這是小明要重新發一個建立給她,所以又開放郵箱,並回復小明說,你可以發訊息了。

4、這時候小明看到訊息直接蒙逼,簡歷都發過去了,沒法發第二遍了,所以小紅和小明都只能在那乾瞪眼。半小時後小紅氣憤的關閉了郵箱。

弊端二:

1、小明跟小紅髮訊息,我想要應聘貴公司,如果還招人的話,我直接投簡歷給您。這是第一次。

2、小紅回訊息說,我們還招人,你投吧。然後就開啟郵箱等待接收簡歷。這是第二次。

小明看到訊息後,剛準備發訊息,但好巧不巧,家裡停電了,沒網了,小明只能在這苦苦等待。而小紅呢,完全不知道小明那邊的問題,也是在那裡傻等,等著小明發簡歷。從而導致小紅沒法去處理其它問題,而小紅等了半小時後,直接關了小明的聯絡。

可以看到,如果沒有第三次的最終確認,提前確認傳送環境等,可能就導致小紅白等半小時。

而又有人可能會說了,你這不扯淡嘛,難道第三次確認之後,就能保證小明能百分百成功傳送簡歷到小紅那裡了嗎?就算有第三次的環境確認,最後傳送的時候還是可能因為停電沒網而導致傳送不成功嘛。

對,的確,即使最終確認後,最終傳送也會有斷網的風險。甚至就算提升到10000000次握手,都無法確保資訊能夠準確傳送和接收,為什麼?因為傳送過去的確認資訊,只能保證傳送當時的那一刻,傳送方環境是好的,就好像12點整小明傳送資訊說我的電腦好的一匹,隨時可以傳送資訊,但是小紅接收到資訊可能是12點10分,這十分鐘時間裡面的電腦狀態是隨時會變化的,可能十二點零一秒,電腦就用不了了,所以,無論多少次握手,都無法確保資訊能準確傳送。

那三次握手的意義是什麼?

因為三次握手是確保雙方互相知道對方狀態正常的最低成本方案。

這句話怎麼理解?

我們再說如果只要兩次握手,

第一次傳送資訊,是小明傳送資訊給小紅,只是確認小紅是否還招人,並沒有向小紅表述他的環境能百分百傳送成功簡歷。所以小紅不知道小明能否百分百傳送成功簡歷。

第二次傳送資訊,是小紅髮送資訊給小明,讓小明知道她能接收資訊。這個時候小明知道小紅做好接收簡歷準備,但是小紅不知道小明做好簡歷傳送準備。

如果是三次握手,

第一次傳送資訊,是小明傳送資訊給小紅,只是確認小紅是否還招人,並沒有向小紅表述他的環境能百分百傳送成功簡歷。所以小紅不知道小明能否百分百傳送成功簡歷。

第二次傳送資訊,是小紅髮送資訊給小明,讓小明知道她能接收資訊。這個時候小明知道小紅做好接收簡歷準備,但是小紅不知道小明做好簡歷傳送準備。

第三次傳送資訊,是小明傳送資訊給小紅,讓小紅知道小明已經做好傳送簡歷的準備。這個時候小明知道小紅做好接收簡歷準備,小紅也知道小明做好簡歷傳送準備。

這就是三次握手和兩次握手的本質區別。一個是雙方知道,一個只是單方面知道。如此三次握手比兩次握手更加安全。

而最低成本方案的概念就是說,通過三次接收,雙方都知道對方已經OK了,直接發資料就行,沒必要再第四次,第五次握手了。

三次握手處理問題的本質

三次握手最終要解決的問題,就是網路資訊互動的不穩定問題。提升資訊互動成功率,降低由於無法接受到資訊而導致的資源浪費問題。

以上就是三次握手的理解,之後還會繼續進行修改,如果有什麼建議,我會及時採納和更正。

相關文章