tpc的time-wait

close wait是被动关闭那方,time wait是主动关闭连接那方。

四次握手第三次后,也就是主动关闭连接的那方,收到被动关闭那方的fin后,自己直接进入time-wait状态,然后发一个ack给被动那方,经过2*msl时间无论如何都会直接关闭。可以保证对方重发过来的fin消息可以顺利收到,而不会由于自己close让对方直接报错。另外这个时间也可以防止新的连接会受到本来给老的连接的tcp包,这段时间老的包肯定都到达了。

 

使用tcp-tw-recycle依赖于ipv4.tpc-timestamps的时间戳功能(双方都必须启用)

 

打开tcp-tw-reuse,表示处于time wait状态的连接,可以被新的连接请求服用,通过tcp时间戳,内核帮忙解决延迟包后到达的问题。这个东西用只能在客户端可以提高处理能力。

 

相反,如果使用tcp-tw-recycle,那么内核会更快回收time-wait状态的连接,而不是2*msl。处于time-wait后,记录最后一次通信时间戳,以后这个对方对端主机发过来的连接请求全部丢弃。也就是客户端发过来sync请求连接,这边time-wait的端口由于recycle,不会回应ack

这个东西最好别用,比如有nat这种网络转发节点情况下,一个负载均衡收到一个包后,会转发给多个Webserver。那么对于Webserver来说,其实只有一个负载均衡的源地址ip,因为负载均衡转发给Webserver的话,需要把自己的地址写到包里面。于是就会发生时间戳错乱的情况,那么新建的连接请求就收不到了

 

,

 

posted @ 2018-12-30 18:12  notlate  阅读(236)  评论(0编辑  收藏  举报