关于SO_REUSEADDR和SO_REUSEPORT的使用
2011-05-18 14:54
459 查看
SO_RESUEADDR主要有四个方面的作用:
1. 允许一个监听服务器到,bind到现在使用的端口上,即使之前存服务端口的连接存在
例如: (1)启动服务端口:45001,该端口处于listen状态
(2)有一个客户端连接到该端口上,可以派生子进程来处理该链路
(3)关闭监听端口,但是步骤2中的链路存在
(4)重新启动监听端口45001
步骤(4)在socket后执行bind的时候会报错“Address already in use”,如果该进程在socket之后和bind之前设置了SO_REUSEADDR,bind将会成功。
2. 允许不同的进程bind到同一个机器上相同端口不同IP地址上
例如:主机上有两个IP地址,172.17.252.81 172.17.252.82 172.17.252.83
进程A可以bind IP:172.17.252.81 端口:45001 (用netstat看时,172.17.252.81.45001)
进程B可以bind IP:172.17.252.82 端口:45001 (用netstat看时,172.17.252.82.45001)
进程C可以bind IP:统配地址 端口:45001 (用netstat看时,*.45001)
当有客户端请求时,按照最适合的原则,比如客户端connect时指定的IP:172.17.252.81则有进程A处理该服务
如果没有启动进程A和B,客户端connect时指定的IP:172.17.252.81则有进程C处理该服务
该情况可能存在风险,对于特权端口,我们都不能bind成功
对于非特权端口,比如45001,主机上有多个IP地址,采用了统配IP来处理客户的请求,我们可以启动bind具体IP的服务端口,来
处理客户端的请求,对于应用来说是比较危险的。
3.允许同一个进程bind到同一个机器相同端口不同IP的地址上,与情况2类似
4.允许完全重复的bind,端口和IP相同,此时需要传输协议的支持,一般只支持UDP
SO_REUSEPORT
1.该选项允许完全的绑定,IP和端口可以完全一样,每个socket都必须制定该选项
2.如果多播地址,与SO_RESUEADDR含义相同
1. 允许一个监听服务器到,bind到现在使用的端口上,即使之前存服务端口的连接存在
例如: (1)启动服务端口:45001,该端口处于listen状态
(2)有一个客户端连接到该端口上,可以派生子进程来处理该链路
(3)关闭监听端口,但是步骤2中的链路存在
(4)重新启动监听端口45001
步骤(4)在socket后执行bind的时候会报错“Address already in use”,如果该进程在socket之后和bind之前设置了SO_REUSEADDR,bind将会成功。
2. 允许不同的进程bind到同一个机器上相同端口不同IP地址上
例如:主机上有两个IP地址,172.17.252.81 172.17.252.82 172.17.252.83
进程A可以bind IP:172.17.252.81 端口:45001 (用netstat看时,172.17.252.81.45001)
进程B可以bind IP:172.17.252.82 端口:45001 (用netstat看时,172.17.252.82.45001)
进程C可以bind IP:统配地址 端口:45001 (用netstat看时,*.45001)
当有客户端请求时,按照最适合的原则,比如客户端connect时指定的IP:172.17.252.81则有进程A处理该服务
如果没有启动进程A和B,客户端connect时指定的IP:172.17.252.81则有进程C处理该服务
该情况可能存在风险,对于特权端口,我们都不能bind成功
对于非特权端口,比如45001,主机上有多个IP地址,采用了统配IP来处理客户的请求,我们可以启动bind具体IP的服务端口,来
处理客户端的请求,对于应用来说是比较危险的。
3.允许同一个进程bind到同一个机器相同端口不同IP的地址上,与情况2类似
4.允许完全重复的bind,端口和IP相同,此时需要传输协议的支持,一般只支持UDP
SO_REUSEPORT
1.该选项允许完全的绑定,IP和端口可以完全一样,每个socket都必须制定该选项
2.如果多播地址,与SO_RESUEADDR含义相同
相关文章推荐
- SO_REUSEADDR和SO_REUSEPORT的误解
- Linux下端口复用(SO_REUSEADDR与SO_REUSEPORT)
- 关于SO_REUSEADDR的使用说明~
- 关于SO_REUSEADDR的使用说明~
- SO_REUSEADDR与SO_REUSEPORT平台差异性与测试
- SO_REUSEADDR和SO_REUSEPORT异同
- linux下tcp socket的SO_REUSEPORT和SO_REUSEADDR
- 套接字选项:SO_REUSEADDR与SO_REUSEPORT
- SO_REUSEPORT和SO_REUSEADDR
- Linux下端口复用(SO_REUSEADDR与SO_REUSEPORT)
- SO_REUSEADDR和SO_REUSEPORT异同
- TCP/IP编程之SO_REUSEADDR和SO_REUSEPORT套接字选项
- Linux下端口复用(SO_REUSEADDR与SO_REUSEPORT)
- SO_REUSEADDR和SO_REUSEPORT异同
- SO_REUSEADDR与SO_REUSEPORT平台差异性与测试
- Linux下端口复用(SO_REUSEADDR与SO_REUSEPORT)
- SO_REUSEADDR与SO_REUSEPORT平台差异性与测试
- SO_REUSEADDR和SO_REUSEPORT异同
- SO_REUSEADDR和SO_REUSEPORT异同
- 关于SO_REUSEADDR的使用说明