【问题标题】:TCP TIME_WAIT StateTCP TIME_WAIT 状态
【发布时间】:2016-09-09 12:56:57
【问题描述】:

假设我有一台服务器运行日间服务。

然后我使用telnet连接这个白天服务器,服务器发送时间数据并关闭连接,现在,因为服务器是应该进入TIME_WAIT状态的主动关闭端。

那么为什么我可以在最后一次 telnet 之后立即对白天服务进行 telnet,而服务器应该仍处于 TIME_WAIT 状态?

【问题讨论】:

    标签: sockets tcp


    【解决方案1】:

    这些状态属于一个会话。会话是由源 IP/端口、目标 IP/端口和传输类型(例如 TCP 或 UDP)组成的 5 元组。如果限制只是基于服务器端的属性,那几乎会使互联网无法使用(想想每四分钟左右在 Google 上只允许一次搜索)。

    因此,只要您不使用相同的 5 元组,您就可以立即开始一个新会话。换句话说,即使您可能从相同的源 IP 连接到相同的目标 IP 和端口,您的源端口几乎肯定会有所不同。

    因此它将是一个不同的会话,一个不会处于等待状态的会话。

    大多数客户端在创建会话时通常会使用零作为端口号,这向通信堆栈表明它应该为会话分配任意/随机/可用端口。

    【讨论】:

    • 我刚回到我的课本上,在阅读了您的答案后再次阅读了该部分。都是因为我的粗心xD,它说套接字对不能被拯救而不是服务器的端口。非常感谢!
    【解决方案2】:

    服务器 未处于 TIME_WAIT 状态。源/目标 IP:port 之间的先前连接处于 TIME_WAIT 状态,这意味着您不能重用该元组。但是客户端默认总是使用一个新的出站端口,所以是一个新的元组。所以您可以立即连接。

    否则 TCP/IP、互联网、此站点等根本无法工作。

    【讨论】:

    • 谢谢。我错过了在我的教科书中肯定写在那里的“套接字对”......
    猜你喜欢
    • 2013-04-07
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 2014-09-13
    相关资源
    最近更新 更多