linux - tcp_tw_reuse 和 tcp_tw_recycle 在原理上有什么区别?
ringa_lee
ringa_lee 2017-04-17 16:03:21
0
1
1229

我的理解是,reuse 只会抛弃时间戳后退的 fin 包来,而 recycle 会抛弃所有时间戳后退的包,不止 fin 包,这个理解对不对?

如果对,那么如果遇到了 NAT 后面的多个客户端,reuse 打开的情况下为什么能够正确关闭连接?NAT 后面的多个客户端的时钟不一定一致,fin 包有可能时间戳后退,就被抛弃了。

ringa_lee
ringa_lee

ringa_lee

全部回复(1)
Peter_Zhu

首先,这个问题你应该发往Stackoverflow的,中文社区里面大神还是很少,具体的某个点就更少了!
net.ipv4.tcp_tw_recycle = {0|1} 是否启用timewait快速回收;注意:开启此功能在NAT环境下可能会出现严重的问题:因为TCP有一种行为,它可以缓存每个连接最新的时间戳,后续请求中如果时间戳小于缓存中的时间戳,即被视为无效并丢弃相应的请求报文;Linux是否启用这种行为取决于tcp_timestamptcp_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就继续使用,并不是你说的那个功能!

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!