1、python的socket编程中socket.SO_REUSEADDR的含义:Socket中SO_REUSEADDR详解
2、socket编程的TIME_WAIT和CLOSE_WAIT状态:
(1)定义:TCP四次挥手时,主动发起断开连接的一方最后会进入TIME_WAIT状态,而被动断开连接的一方最后会进入CLOSE_WAIT状态:
(2)为什么需要TIME_WAIT状态?
a.防止上一次连接中的包,迷路后重新出现,影响新连接(经过2MSL,上一次连接中所有的重复包都会消失)
b.可靠的关闭TCP连接。在主动关闭方发送的最后一个 ACK(FIN) ,有可能丢失,这时被动方会重新发FIN, 如果这时主动方处于 CLOSED 状态 ,就会响应 RST 而不是 ACK。所以主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。另外这么设计TIME_WAIT 会定时的回收资源,并不会占用很大资源的,除非短时间内接受大量请求或者受到攻击。
(3)如何解决TIME_WAIT过多问题?
让服务器能够快速回收和重用那些TIME_WAIT的资源,如修改/etc/sysctl.conf文件的配置内容,修改完之后执行/sbin/sysctl -p让参数生效