84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
我的理解是,reuse 只会抛弃时间戳后退的 fin 包来,而 recycle 会抛弃所有时间戳后退的包,不止 fin 包,这个理解对不对?
如果对,那么如果遇到了 NAT 后面的多个客户端,reuse 打开的情况下为什么能够正确关闭连接?NAT 后面的多个客户端的时钟不一定一致,fin 包有可能时间戳后退,就被抛弃了。
ringa_lee
首先,这个问题你应该发往Stackoverflow的,中文社区里面大神还是很少,具体的某个点就更少了!net.ipv4.tcp_tw_recycle = {0|1} 是否启用timewait快速回收;注意:开启此功能在NAT环境下可能会出现严重的问题:因为TCP有一种行为,它可以缓存每个连接最新的时间戳,后续请求中如果时间戳小于缓存中的时间戳,即被视为无效并丢弃相应的请求报文;Linux是否启用这种行为取决于tcp_timestamp和tcp_tw_recycle,而前一个参数默认是启用的,所以启用后面的参数就会激活此功能; 因此,如果是NAT环境,安全起见,应该禁用tcp_tw_recycle。另一种解决方案:把tcp_timestamps设置为0,tcp_tw_recycle设置为1并不会如想象中奏效,因为一旦关闭了tcp_timestamps,那么即便打开了tcp_tw_recycle,后面的参数也没有效果。此时降低net.ipv4.tcp_max_tw_buckets的值就可以显著降低tw连接的数量了。
net.ipv4.tcp_tw_recycle = {0|1}
tcp_timestamp
tcp_tw_recycle
tcp_timestamps
net.ipv4.tcp_max_tw_buckets
net.ipv4.tcp_tw_reuse = {0|1} 是否开启tw重用,即是否允许将TIME-WAIT sockets 用于新的TCP连接,就是数据结构不会收,只更改一下ip和port就继续使用,并不是你说的那个功能!
net.ipv4.tcp_tw_reuse = {0|1}
TIME-WAIT sockets
首先,这个问题你应该发往Stackoverflow的,中文社区里面大神还是很少,具体的某个点就更少了!
net.ipv4.tcp_tw_recycle = {0|1}
是否启用timewait快速回收;注意:开启此功能在NAT环境下可能会出现严重的问题:因为TCP有一种行为,它可以缓存每个连接最新的时间戳,后续请求中如果时间戳小于缓存中的时间戳,即被视为无效并丢弃相应的请求报文;Linux是否启用这种行为取决于tcp_timestamp
和tcp_tw_recycle
,而前一个参数默认是启用的,所以启用后面的参数就会激活此功能; 因此,如果是NAT环境,安全起见,应该禁用tcp_tw_recycle
。另一种解决方案:把tcp_timestamps
设置为0,tcp_tw_recycle
设置为1并不会如想象中奏效,因为一旦关闭了tcp_timestamps
,那么即便打开了tcp_tw_recycle
,后面的参数也没有效果。此时降低net.ipv4.tcp_max_tw_buckets
的值就可以显著降低tw连接的数量了。net.ipv4.tcp_tw_reuse = {0|1}
是否开启tw重用,即是否允许将TIME-WAIT sockets
用于新的TCP连接,就是数据结构不会收,只更改一下ip和port就继续使用,并不是你说的那个功能!