【发布时间】:2016-09-09 12:56:57
【问题描述】:
假设我有一台服务器运行日间服务。
然后我使用telnet连接这个白天服务器,服务器发送时间数据并关闭连接,现在,因为服务器是应该进入TIME_WAIT状态的主动关闭端。
那么为什么我可以在最后一次 telnet 之后立即对白天服务进行 telnet,而服务器应该仍处于 TIME_WAIT 状态?
【问题讨论】:
假设我有一台服务器运行日间服务。
然后我使用telnet连接这个白天服务器,服务器发送时间数据并关闭连接,现在,因为服务器是应该进入TIME_WAIT状态的主动关闭端。
那么为什么我可以在最后一次 telnet 之后立即对白天服务进行 telnet,而服务器应该仍处于 TIME_WAIT 状态?
【问题讨论】:
这些状态属于一个会话。会话是由源 IP/端口、目标 IP/端口和传输类型(例如 TCP 或 UDP)组成的 5 元组。如果限制只是基于服务器端的属性,那几乎会使互联网无法使用(想想每四分钟左右在 Google 上只允许一次搜索)。
因此,只要您不使用相同的 5 元组,您就可以立即开始一个新会话。换句话说,即使您可能从相同的源 IP 连接到相同的目标 IP 和端口,您的源端口几乎肯定会有所不同。
因此它将是一个不同的会话,一个不会处于等待状态的会话。
大多数客户端在创建会话时通常会使用零作为端口号,这向通信堆栈表明它应该为会话分配任意/随机/可用端口。
【讨论】:
服务器 未处于 TIME_WAIT 状态。源/目标 IP:port 之间的先前连接处于 TIME_WAIT 状态,这意味着您不能重用该元组。但是客户端默认总是使用一个新的出站端口,所以是一个新的元组。所以您可以立即连接。
否则 TCP/IP、互联网、此站点等根本无法工作。
【讨论】: