我读过一本 TCP 和套接字编程书籍。我有个问题,
TCP的TIME_WAIT状态应该如书上说的保持2MSL时间段。但是,如何像互联网探索这样的应用程序没有这个问题呢?
根据文档,它是 4 分钟,但在 Internet explore 中我甚至不需要等待 10 秒来刷新网页?
这是如何工作的?我很困惑请解释一下。
有几种可能性,我在下面列出了其中的一些。
首先是并非所有会话都在TIME_WAIT
状态中移动。如果对方关闭连接,则本地转换为ESTABLISHED
、和CLOSE_WAIT
,因此不涉及。LAST_ACK
CLOSED
TIME_WAIT
其次,TIME_WAIT
状态适用于一个会话,它是一个 5-tuple {protocol,source-ip,source-port,dest-ip,dest-port}
。
如果这些值中的任何一个在下一个会话(通常是源端口)发生变化,则不受上一个会话的影响。
最后,浏览器不必在每次请求后关闭会话。更有可能(为了提高效率)维护一个打开的会话池以便重新使用它们,例如当您想要下载一个包含 50 个图像的页面(一个会话而不是 51 个)时。
它甚至可以在页面完全加载后使此类会话保持打开状态,以防您访问该服务器上的其他内容。