用最簡單的例子幫助理解TCP的三次握手和四次揮手
- 本文並非講解tcp三次握手的實現過程,而是想通過最簡單的例子理解tcp這樣設計的原理
- 爲何TCP需要三次握手而不是兩次一次握手,爲何需要四次揮手,想必大家心裏都有這些疑惑,這裏我就以個人的見解對此作下說明
三次握手
-
首先,讓我們對比一下兩個場景
-
場景一
-
a問b,你喫飯了嗎
-
b答,我吃了
-
場景二
-
a問b,你喫飯了嗎
-
b答,我吃了,你呢
-
a答,我也吃了
-
以上場景一其實就是兩次握手,這兩次握手後只有a確定a發給b的消息b能正常收到,但此時b完全不知道自己發給a的信息a能否收到
-
而場景二其實就是三次握手,前兩次握手a是確定了b能收到,但b卻不知道a是否能收到b發的信息,但如果b也向a提問了,同時能收到a的正確回答,此時b才能確定a也能正常收到b發送的信息,這樣第三次握手後雙方就都確定了他們之間能彼此順暢地溝通
-
不知道我舉這樣的例子,你是否對三次握手有了更好的理解,因爲兩次握手只有一方確定,而三次握手雙方都能確定,因此TCP三次握手就夠了,多了也沒什麼太多的意義
四次揮手
- 建立連接需要三次握手,想必大家都弄明白了,但爲何斷開連接要四次呢
- 還是照例,看一下以下場景
- 場景一
- a對b說,我數據都傳完了,我要斷開連接
- b對a說,我知道了,你斷開吧
- a對b說,我斷開了
- 場景二
- a對b說,我數據都傳完了,以後不會對你傳數據了,我們斷開連接吧
- b回答,我知道了,你先別斷開,等我把要傳給你的數據傳完了你再斷開
- 一會兒後,b對a說,我傳完了
- a對b說,我知道了,然後大家就斷開連接了
- 想必看完場景二你就知道爲何要四次揮手了吧,一方要斷開連接時另一方可能還在傳數據,此時最後還是等它傳完了再斷開比較好