TCP的三次握手和四次揮手通常同時(shí)被談起,上篇文章我們說到了TCP的三次握手,那么四次揮手又是什么呢?
今天我們就聊聊什么是四次揮手。在說什么是四次揮手之前,我們還是要提出幾個(gè)問題。
1.為什么要揮手那么多次?一次揮手不行嗎?
2.為什么握手需要三次,揮手卻需要四次?
相信大家對“鄧哥”這種生物的習(xí)性應(yīng)該已經(jīng)熟悉了,主要的四大習(xí)性就是:“抽煙、喝酒、燙頭、浪~”。我們今天依然用鄧哥的例子來讓大家記住四次揮手~我們今天就用鄧哥和某位鄧嫂互相喂飯的例子來讓大家了解四次揮手的真正過程~
在講故事之前我們依然以一句話來說明四次揮手的根本目的,四次揮手核心就在于四個(gè)時(shí)間節(jié)點(diǎn),分別是:發(fā)完了,知道發(fā)完了,收完了,知道收完了。
有一天鄧哥和某位鄧嫂在一家餐廳吃飯,兩個(gè)人點(diǎn)了一份咖喱土豆,只見鄧哥一勺一勺的喂鄧嫂。
鄧哥喂鄧嫂吃飯的過程,就相當(dāng)于是兩臺機(jī)器之間互相通信的過程。每喂一勺飯,都相當(dāng)于是一次數(shù)據(jù)傳遞。
當(dāng)鄧哥喂完最后一勺的時(shí)候,鄧哥對鄧嫂說:“喂完了~木有了~”
這時(shí)候相當(dāng)于A向B傳輸數(shù)據(jù),數(shù)據(jù)傳遞完了,但是數(shù)據(jù)傳遞完了之后,不能直接斷開,因?yàn)锽并不知道數(shù)據(jù)傳遞完了,所以A(鄧哥)告訴B(鄧嫂)數(shù)據(jù)傳遞完了(喂完了)。這就是第一次揮手:A告訴B數(shù)據(jù)發(fā)送完了。
鄧哥說喂完了的時(shí)候,鄧嫂因?yàn)樽炖镞€有很多飯沒有咽下,所以沒法和鄧哥說話~所以只能點(diǎn)點(diǎn)頭表示知道了~
這時(shí)候,因?yàn)锽(鄧嫂)還沒有接受完數(shù)據(jù)(沒有咽下),所以雖然知道A(鄧哥)把數(shù)據(jù)傳完了(喂完了),所以只能先回復(fù)A(鄧哥)知道你傳完了(喂完了)。這就是第二次揮手:B知道A發(fā)完了
鄧哥眼睜睜的看著鄧嫂一口一口的吃完了所有的飯~眼里流下了饑餓的淚花。待鄧嫂咽下了最后一口飯的時(shí)候,開心的笑著說:“吃完了~好飽呀~”
這時(shí),雖然A(鄧哥)已經(jīng)發(fā)送完了數(shù)據(jù),但是還不確定B(鄧嫂)接收完數(shù)據(jù),所以A還要等著,因?yàn)橐坏〣沒有接收成功,A還要繼續(xù)發(fā)送。所以A要等著B反饋已經(jīng)接收完了,才能真正斷開連接。所以這時(shí)候當(dāng)B接收完數(shù)據(jù)的時(shí)候,B要告訴A接收完了。這就是第三次揮手:B告訴A接收完了。
鄧哥雖然還餓著~但是依然含著淚點(diǎn)頭~說道:“咱們走吧~”
這時(shí)A(鄧哥)知道了B(鄧嫂)接收完數(shù)據(jù)了,就可以放心的斷開連接了。這就是第四次揮手:A知道B接收完了。
我們用一張圖表示四次揮手:
A(鄧哥) B(鄧嫂)
發(fā) 第一次揮手 發(fā)完了 第二次揮手 知道發(fā)完了
收 第四次揮手 知道收完了
第三次揮手 收完了
那么為什么握手只需要三次而揮手卻需要四次呢?
就是因?yàn)楫?dāng)A告訴B發(fā)完了的時(shí)候,B還有可能沒接收完消息,所以只能先回復(fù)一部分,告訴A已經(jīng)收到發(fā)完了的消息了。當(dāng)消息完全接收完畢之后,才會告訴A已經(jīng)接收完了。