tcp_timestamps,tcp_tw_reuse,tcp_tw_recycle,tcp_fin

解决这类问题,方法很重要,最好的做法其实是阅读官方的RFC,源码,然后进行实际测试验证。

tcp_timestamps,tcp_tw_reuse,tcp_tw_recycle

几篇比较好的解释这三个参数的文章:

https://serverfault.com/questions/502305/linux-networking-port-exhaustion
http://perthcharles.github.io/2015/08/27/timestamp-intro/
http://perthcharles.github.io/2015/08/27/timestamp-NAT/
https://vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux

RFC: https://tools.ietf.org/html/rfc1323

其中描述的部分可以很容易的验证,还有几个问题没搞清楚。

  1. 既然是per-host,那么同一个client的多个连接的请求过来,也可能受到timestamps的影响,不只是隐藏在NAT后的多个client会有这个问题。

    测试:上面一篇文章中指出当开启timestamps时,处于last_ack状态的连接在收到syn请求后并不会返回rst,而是重发一次fin。
    测试条件:将ip_local_port_range范围设为只有一个port;开启tcp_tw_reuse

通过在断开telnet连接时设置IPtables规则模拟ack包丢失,可以看到当重新telnet时,client向server发了syn包,server回了ack,client又发了rst,并再次syn包,server这次发来了syn+ack包,由于有iptables规则,server收不到client回的ack包,因此发了多次syn+ack,当取消iptables规则后,server成功收到ack,连接建立完成。
image.png

规则:
iptables -A OUTPUT -p tcp --tcp-flags ALL ACK --source 127.0.0.1 --sport 10240 -j DROP


tcp_fin_timeout不是msl值。https://huoding.com/2016/09/05/542


学到的一些概念:
paws,rrt,rto

转载于:https://blog.51cto.com/zxdlife/2293798

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值