tcp_tw_recycle

问题背景

服务经过F5使用lb的方式对外提供服务,client链接某LB VIP的时候,发现client发送了syn,server直接回了rst断了链接。
上网查询相关信息,发现不少的状况是由于打开了tcp_tw_recycle致使的(特别是在NAT的状况下),那么tw_recycle和tw_reuse有什么联系和关联,又是如何触发问题的呢。git

tw_recyle

客户端开启了选项后,tw的socket不会等待2msl的时间,rto时间后就会被释放,对于server端来讲,可能某个时刻会有大量的tw连接。打开tw_recycle的话,会打开协议栈的Per-host PAWS机制。致使server看到timestamp小于当前值的话,会rst掉报文,这在nat的状况下会带来必定的问题,由于sip,dip,dport都是固定,链接数量到必定程度的话,必定会有sport的重复,然而各个client的timestamp又不能保证时序,会带来问题。
http://perthcharles.github.io...
那tw_recycle的机制又是如何实现的呢,开启了msl,它将会在超时重发(RTO)间隔后移除(底层会根据当前链接的延迟情况根据RTT来计算RTO值)。可是4.1内核版本以后,此内核参数已经废弃github

  1. timestamp参数是如何生效的。
  2. 打开tw_recycle,为什么会致使PAWS。

开启了tw_recycle后,tw socket会当即回收。这时若是ack报文丢失,那么client会重传fin报文,此时server可能已经使用此socket创建新的链接了,而且有报文的交互,在这种状况下,server须要rst掉此连接。那么如何区分是以前的连接,仍是新建的连接,协议栈用timestamp来区分,timestamp小于当前的,认定是以前的连接,统一rst。
为何tw_reuse不会有这样的问题,由于tw_reuse是影响主动发出的连接,tw_reuse的socket发出syn,被对端ack(因为number不一致),本端会回应rst,并重传syn包,不影响链接的创建。
可是tw_recycle会rst掉对端的syn,此时直接影响到链接的创建。换句话说,若是tw_recycle的socket,被复用主动发起syn的话,效果和tw_reuse应该一致。服务器

因此主要区别是
tw_reuse被适用于主动发起的连接,若是五元组匹配
tw_recycle直接释放tw_socket, 影响主动发起和接收的连接。接收的连接会被rstsocket

tw_reuse

tw_reuse只针对出向的链接有效。举例
服务器的某个socket链接如今正处在time_wait的状态。按照正常的逻辑来讲,在这个TW socket被回收以前,都不能使用这个ip和port创建新的tcp链接。可是在开启了tw_reuse的状况下,则能够复用这个socket,发出syn包,创建新的链接。tcp

RTT&RTO

RTO: Retransmission TimeOut
RTT: Round Trip Time(往返时间:链路传输时间+路由器排队/处理时间+末端处理时间)post

https://juejin.im/post/5c0642...server

相关文章
相关标签/搜索