我在一个 Java 客户端库中遇到了这句话:
socket.setReuseAddress(true);
以为是用来提高性能的,因为该SO_REUSEADDR选项可以表示socket即使属于其他socket也可以强行使用TIME_WAIT端口。
但是我也发现这个选项主要用在服务器端,可以让服务器快速重启,而不是等待 TIME_WAIT 套接字关闭。
我的问题是这个选项对客户端有用吗,比如这个客户端库?这会像某些攻击一样对另一个套接字有害吗?
非常感谢!
-迪米
这取决于您所说的“客户”是什么意思。您还提到了“客户端库”,与此无关。
这经常被误解,SO_REUSEADDR是为了能够重用 中的套接字TIME_WAIT,并且TIME_WAIT仅发生在 TCP 连接的一侧,即发起终止序列的一端,即发送第一个FIN数据包,即shutdown(SHUT_WR)首先调用或首先调用close,尽管后者不清楚/可能取决于其他因素,例如连接状态或平台,以及在首次调用之前不应调用的 原因。这篇文章以及文章末尾引用的两篇文章内容非常丰富。它清楚地表明这可能发生在侦听(服务器)端以及客户端,并建议实际上让客户端始终启动终止(“主动关闭”),以便服务器不会在 中累积套接字,这将更多一个问题。closeshutdown(SHUT_WR)TIME_WAITTIME_WAIT
| 归档时间: |
|
| 查看次数: |
1372 次 |
| 最近记录: |