在《三次握手与Socket API》中我们详细讲解了三次握手以及与之相关的API,三次握手是TCP协议的初始阶段,用来建立双方通信连接,显然有建立连接就有断开连接,那么TCP是如何断开连接的呢?
奇怪的四次挥手
TCP协议建立连接需要进行三次信息交互,断开连接时却需要四次信息交互,这四次信息交互被形象的称为四次挥手,那么TCP在断开连接时为什么需要奇怪的四次挥手而不是三次挥手呢?要想回答这个问题我们必须对TCP协议有进一步的理解。
话多的人与话少的人
生活中总会有这两类人,一类话多,一类话少,话少的那个言简意赅很快就无话可说了,话多的那个滔滔不绝没完没了,因此就会有这样的情形:
A: 今天天气这不错啊
A: 今天饭也好吃
A: 是吧
是的 :B
我说完了 :B
A: 我还没说完呢
A: 明天就周五啦
A: 开心
A: blablabla
A: 我也说完了
当这两类人在聊天时就会出现B说完但A没说完的情况,这时B不再说话但是可以继续听A说,当A也说完后整个聊天过程才算结束。
TCP通信过程和人聊天又有多大区别呢?
有话多话少的人当然也会有数据多数据少的客户端以及服务器。
为什么要四次挥手:半关闭
在TCP通信中一方表示“我说完了”实际上是通过向对方发送一条带有FIN标识的消息来实现的,当一方收到FIN信息时就知道接下来对方就不会再发送数据了,这在TCP协议中被称为半关闭,half-close。