1.TCP为什么要有一个"TIME_WAIT"的状态
"TIME_WAIT"状态存在的原因主要有两点:
(1) 可靠的终止 TCP 连接。
假设上图中用于确认服务器结束报文段6的TCP报文段7丢失,那么服务器将重发结束报文段,因此客户端需要停留在某个状态以处理重复收到的结束报文段.否则客户端将以复位报文段来回应服务器,服务器则认为这是一个错误,因为他期望的是一个像TCP报文段7那样的确认报文段.
(2) 保证让迟来的 TCP 报文有足够的时间被识别并被丢弃 ;
在 Linux 系统上,一个TCP 端口不能被同时打开多次(两次及以上)。当一个TCP 连接处于 TIMEWAIT 状态时,我们将无法立即使用该连接占用着的端口来建立一个新连接。反过来思考,如果不存在 TIME WAIT 状态,则应用程序能够立即建立一个和刚关闭的连接相似的连接(这里说的相似,是指它们具有相同的 P 地址和端口号)。这个新的、和原来相似的连接被称为原来的连接的化身 (incarmation)。新的化身可能接收到属于原来的连接的、携带应用程序数据的 TCP 报文段(迟到的报文段),这显然是不应该发生的。文章来源:https://www.toymoban.com/news/detail-427291.html
2.拓展
带外数据
有些传输层协议具有带外 (out of Band,ooB)数据的概念,用于迅速通告对方本端发生的重要事件。因此,带外数据比普通数据有更高的优先级,它应该总是立即被发送,而不论发送缓冲区中是否有排队等待发送的普通数据。
UDP 没有实现带外数据传输,TCP 也没有真正的带外数据。不过 TCP 利用其头部中的 紧急指针标志和紧急指针两个字段,给应用程序提供了一种传输紧急数据的方式。一般只有一个字节数据。文章来源地址https://www.toymoban.com/news/detail-427291.html
到了这里,关于97-TCP为什么要有一个“TIME_WAIT“的状态的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!