【问题标题】:Problems related to so_reuseaddrso_reuseaddr相关问题
【发布时间】:2013-11-14 07:24:37
【问题描述】:

我正在阅读以下关于“so_reuseaddr 到底做了什么?”的答案

这个套接字选项告诉内核即使这个端口很忙(在 TIME_WAIT 状态),继续并重用它。如果很忙, 但是在另一个州,你仍然会得到一个已经在使用的地址 错误。如果您的服务器已关闭,这很有用,然后 在其端口上的套接字仍处于活动状态时立即重新启动。你 应该知道,如果有任何意外的数据进来,它可能会混淆 您的服务器,但虽然这是可能的,但不太可能。
已经指出'一个套接字是一个 5 元组(原型、本地地址、本地端口、远程地址、远程端口)。 SO_REUSEADDR 只是说您可以重用本地地址。 5 元组仍然必须是唯一的!迈克尔·亨特 (mhunter@qnx.com)。这是真的,这就是为什么您的服务器不太可能看到意外数据的原因。危险在于这样一个 5 元组仍然在网络上四处浮动,并且在它四处跳动时,来自同一客户端的新连接,在同一系统上,碰巧获得了相同的远程端口。 Richard Stevens 在 #2.7 '请解释 TIME_WAIT 状态'中对此进行了解释。

我只是无法得到最后几行The danger is....TIME_WAIT state. 它说如果网络上仍然有相同的浮动元组......但是如果 1 小时后还有相同的元组怎么办?看不懂,谁能解释一下?

【问题讨论】:

    标签: sockets tcp bind


    【解决方案1】:

    这是一个表达不佳的答案。请给个链接,我可以评论。

    危险在于带有旧 5 元组的数据包仍在网络中传输。如果它在新连接创建之后到达,它就有可能被视为该连接的预期用途,因此被传递到该连接,这将违反 TCP 的完整性保证。

    如果 1 小时后有相同的元组怎么办?

    不可能。 IP 数据包的最大分段生命周期 (MSL) 为一分钟。 TIME_WAIT 状态持续 2*MSL。这就是它的工作原理。

    【讨论】:

      猜你喜欢
      • 2011-07-31
      • 2013-01-09
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多