网络编程-再看TCP的四次挥手
假设一开始已经有一个连接在1234端口建立,我们关闭这个连接;过一会我们在同样的ip和端口建立连接,但是TCP必须防止在前一次连接中的老的报文在它原先的连接已终止后,还出现在这个新的连接中,因此,TCP将不允许在处于TIME_WAIT状态的ip和端口处建立新的连接。而2MSL时间过后,老的报文早已在网络中消失了,也就避免了这种情况的发生。 这种情况可以很容易通过《网络编程-一个简单的echo程序》的server程序来观察:
在服务端终端ctrl+c终止服务端,然后再次启动server:
终止服务端后,服务端处于TIME_WAIT状态,此时再次启动server,将不能使用原来的ip和端口建立连接,因此出现Address already in use的报错。 但是需要注意:
半打开的TCP连接 假设一个连接建立之后,突然有一方异常终止连接了,但是另一个不知道,这个时候TCP的连接就是半打开的。如果服务端不加处理,那么最终就会导致服务端有大量的半打开连接。那么服务端如何知道客户端的连接已经异常终止了呢?如果等待服务端发送数据出错时发现,那么这个时候可能已经太晚了。 幸运的是,TCP有保活定时器。即服务端可以通过设置保活选项来了解客户端是否已经终止连接。 通过下面的方式可以看到很多连接有这样的定时器:
但可惜的是,这样的定时器时间太长了,并且它不能代表应用程序能够正常工作,能够正常收发数据,因此应用层常常也会实现一个心跳机制。 总结 本文花了大量篇幅介绍了TIME_WAIT状态,这也是面试中常问的问题,重新梳理TCP的四次挥手是很有必要的。
(编辑:达州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- DTS音效大师如何分割音乐 切割音频文件就是这么容易
- VR厂商Kludge Interactive和Odders Lab联合发起“Collab De
- 沃尔玛在旗下4500多家门店中部署了VR头戴设备
- 5G·真MR平行世界 悉见《商场守护者Mall Rush》携手中国电信
- Atreca、百济神州、IGM Biosciences就新冠肺炎新型抗体疗法
- Google 将终止对 VR 应用 Expeditions 的支持
- 视频编辑王怎么加音乐 往视频中添加音频文件的办法
- 5G即将到来,各大设备运营商都做了哪些准备?
- 微型激光投影模组厂商TriLite获数百万美元融资
- 苹果AR眼镜又有新专利曝光,可在任意表面上进行触摸操作