TCP连接的参数设置



1、tcp_tw_recycle

在对外服务的web server上,为了加快time_wait状态的socket回收,希望打开tcp_tw_recycle配置。但是,这样做存在风险。

如果打开了tcp_tw_recycle,并且同时tcp_timestamp是打开的(默认打开),那么本机的kernel就会检查对端的数据包的timestamp。检查的时机发生在:本机记录tw_timestamp, 此后收到syn包时,就检查timestamp是否比tw_timestamp大,若小则认为是已经tw_recycle的连接上的包,则丢弃这个syn包。

通常,业务服务器会接在LVS(或TGW)之后,来自不同客户端的请求,其源地址被修改成共用的网关地址(lvs-dr),业务服务器会认为是来自同一个连接的包。不同客户端的时间戳可能是跳跃的,所以服务器记录的tw_timestamp可能比较大,那么小于这个时间戳的syn包就会被服务器丢弃。

服务器端记录的tw_timestamp只对对应的连接(socket)有效 ??? 还是对所有socket都有效???


所以,在打开tcp_tw_recycle时,可以关闭tcp_tw_timestamp(要关闭 /proc/sys/net/ipv4/tcp_timestamps)。

最可靠的是,在对外服务的服务器上不要开tcp_tw_recycle。


2、tcp_timestamp


3、tcp_tw_reuse




你可能感兴趣的:(TCPIP,Linux)