TCP的三次握手和四次挥手通常同时被谈起,上篇文章我们说到了TCP的三次握手,那么四次挥手又是什么呢?
今天我们就聊聊什么是四次挥手。在说什么是四次挥手之前,我们还是要提出几个问题。
1.为什么要挥手那么多次?一次挥手不行吗?
2.为什么握手需要三次,挥手却需要四次?
相信大家对“邓哥”这种生物的习性应该已经熟悉了,主要的四大习性就是:“抽烟、喝酒、烫头、浪~”。我们今天依然用邓哥的例子来让大家记住四次挥手~我们今天就用邓哥和某位邓嫂互相喂饭的例子来让大家了解四次挥手的真正过程~
在讲故事之前我们依然以一句话来说明四次挥手的根本目的,四次挥手核心就在于四个时间节点,分别是:发完了,知道发完了,收完了,知道收完了。
有一天邓哥和某位邓嫂在一家餐厅吃饭,两个人点了一份咖喱土豆,只见邓哥一勺一勺的喂邓嫂。
邓哥喂邓嫂吃饭的过程,就相当于是两台机器之间互相通信的过程。每喂一勺饭,都相当于是一次数据传递。
第一次挥手:
当邓哥喂完最后一勺的时候,邓哥对邓嫂说:“喂完了~木有了~”
这时候相当于A向B传输数据,数据传递完了,但是数据传递完了之后,不能直接断开,因为B并不知道数据传递完了,所以A(邓哥)告诉B(邓嫂)数据传递完了(喂完了)。这就是第一次挥手:A告诉B数据发送完了。
第二次挥手:
邓哥说喂完了的时候,邓嫂因为嘴里还有很多饭没有咽下,所以没法和邓哥说话~所以只能点点头表示知道了~
这时候,因为B(邓嫂)还没有接受完数据(没有咽下),所以虽然知道A(邓哥)把数据传完了(喂完了),所以只能先回复A(邓哥)知道你传完了(喂完了)。这就是第二次挥手:B知道A发完了
第三次挥手:
邓哥眼睁睁的看着邓嫂一口一口的吃完了所有的饭~眼里流下了饥饿的泪花。待邓嫂咽下了最后一口饭的时候,开心的笑着说:“吃完了~好饱呀~”
这时,虽然A(邓哥)已经发送完了数据,但是还不确定B(邓嫂)接收完数据,所以A还要等着,因为一旦B没有接收成功,A还要继续发送。所以A要等着B反馈已经接收完了,才能真正断开连接。所以这时候当B接收完数据的时候,B要告诉A接收完了。这就是第三次挥手:B告诉A接收完了。
第四次挥手:
邓哥虽然还饿着~但是依然含着泪点头~说道:“嗯,咱们走吧~”
这时A(邓哥)知道了B(邓嫂)接收完数据了,就可以放心的断开连接了。这就是第四次挥手:A知道B接收完了。
我们用一张图表示四次挥手:
A(邓哥) | B(邓嫂) | |
发 | 第一次挥手 发完了 | 第二次挥手 知道发完了 |
收 | 第四次挥手 知道收完了 | 第三次挥手 收完了 |
那么为什么握手只需要三次而挥手却需要四次呢?
因为当A告诉B发完了的时候,B还有可能没接收完消息,所以只能先回复一部分,告诉A已经收到发完了的消息了。当完全接收完毕之后,才会告诉A已经接收完了。