一、linux网络内核调优:三次握手
博客专区 > for。 的博客 > 博客详情
一、linux网络内核调优:三次握手
for。 发表于2年前
一、linux网络内核调优:三次握手
  • 发表于 2年前
  • 阅读 50
  • 收藏 2
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: linux网络内核调优:三次握手

TCP 三次握手过程如下:

三次握手图

与三次握手的系统参数有(系统默认值):

  • net.ipv4.tcp_syn_retries = 6
  • net.ipv4.tcp_synack_retries = 5

/etc/sysctl.conf 中添加或修改,执行sysctl -p 即可生效。

tcp_syn_retries

tcp_syn_retries 与 TCP 三次握手的第一步相关,也就是客户端向服务器发送一个 SYN 数据包。

在没有接收到服务器响应的情况下,SYN 数据包的会尝试发送 tcp_syn_retries 次。

查看系统设置

cat /proc/sys/net/ipv4/tcp_syn_retries 
6

测试

测试代码:http://my.oschina.net/lowkey2046/blog/716557

服务端(192.168.1.24),客户端(192.168.1.21)

  1. 正常情况下执行一次程序,主要是为了产生相应的路由数据
  2. 直接断开服务端网络
  3. 启动客户端
./client 192.168.1.24
connect: Connection timed out
connect_server 192.168.1.24 error

wireshark 抓包

测试截图

客户端的在 connect 函数上进行三次握手。客户端在发出 SYN 数据包后,等待服务器的响应。如果没有收到服务端响应,会尝试重发 SYN 数据包。总共尝试了6次,也就是 tcp_syn_retries 的数值。默认情况下,时间超过了60s。

优化方案

可以通过减小该数值提前结束连接,减少重试次数。

tcp_synack_retries

tcp_synack_retries 与 TCP 三次握手的第二步相关。也就是服务器向客户端发送一个 SYN-ACK 数据包。

服务器在接收到客户端发送的 SYN 数据包后,会发送 SYN-ACK 数据包进行响应。如果没有收到客户端对该 TCP 报文的响应,服务器会尝试重新发送 SYN-ACK 数据包,总共会尝试 tcp_synack_retries 次。

cat /proc/sys/net/ipv4/tcp_synack_retries 
5

测试

这个要构建数据包才可以测试,暂时省略。

优化方案

可以通过减小该数值提前结束连接,减少重试次数。

参考资料

tcp_syn_retries等参数详解

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
for。
粉丝 79
博文 47
码字总数 18257
×
for。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: