1、linux网络内核调优:三次握手

TCP 三次握手过程以下:服务器

三次握手图

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

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

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

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.net

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

  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。server

优化方案

能够经过减少该数值提早结束链接,减小重试次数。blog

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等参数详解

相关文章
相关标签/搜索