【从零学Netty】Netty调优:SO_REUSEADDR参数详解


SO_REUSEADDR参数详解

作用

1、让关闭连接释放的端口能更快的重用

​ TCP主动关闭方发送完ACK包确认关闭后会进入TIME_WAIT状态等待一段时间才会真正的关闭掉。TIME_WAIT持续时长在Linux系统默认是两分钟。也就是说一般情况下两分钟后这个端口才能再被重新使用,开启SO_REUSEADDR能让端口被释放后1秒就能够重用。但是重用端口后的程序可能会收到以前的数据包,造成错乱。如果网络环境比较好,没有丢包的情况发生,1S足够发送完ACK包,这个时候开启这个参数就能让端口更快的重用,提升端口使用效能。

2、允许绑定一个地址,即使这个地址当前已经存在已建立的连接
  1. SO_REUSEADDR允许启动一个监听服务器并绑定一个端口,即使以前建立的将此端口用做他们的本地端口的连接仍存在。这通常是重启监听服务器时出现,若不设置此选项,则bind时将出错。
  2. SO_REUSEADDR允许在同一端口上启动同一服务器的多个实例,只要每个实例绑定一个不同的本地IP地址即可。对于TCP,我们根本不可能启动捆绑相同IP地址和相同端口号的多个服务器。
  3. SO_REUSEADDR允许单个进程绑定同一端口到多个套接口上,只要每个捆绑指定不同的本地IP地址即可。这一般不用于TCP服务器。
  4. SO_REUSEADDR允许完全重复的绑定:当一个IP地址和端口绑定到某个套接口上时,还允许此IP地址和端口绑定到另一个套接口上。一般来说,这个特性仅在支持多播的系统上才有,而且只对UDP套接口而言,TCP不支持多播。

总结

  1. SO_REUSEADDR的作用主要两个:

    a. 让关闭连接释放的端口能更快的重用

    b. 允许绑定一个地址,即使这个地址当前已经存在已建立的连接

  2. 网络环境比较好的情况下可以开启


文章作者: maybe
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 maybe !