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就继续使用,并不是你说的那个功能!