背景

服务器、客户端所在网络环境均为NAT模式。

案例环境信息

服务器操作系统:Centos 7.9

客户端操作系统:Windows 10 专业版

客户端浏览器:Google Chrome

现象

  1. 客户端会不定时出现:无法访问此网站,XXX.XXX的响应时间过长,报错代码:ERR_CONNECTION_TIMED_OUT
  2. 当客户端出现无法访问网站时,同一时刻用手机上网访问同一个站点时能正常访问,同时ping目标网站也能正常ping通。网站间歇性无法访问_TCP RETRANSMISSION

排查过程

  1. 当网站不能访问时,检查服务器出口及客户端出口带宽是否被占满,发现流量正常,带宽未占满。
  2. 在客户端进行长ping,能正常ping通,且延时较低。
  3. 使用其他网络环境发现可以正常访问。
  4. 在客户端进行抓包,解析抓包数据显示第一个数据包发送就存在TCP重传包:TCP RETRANSMISSION

网站间歇性无法访问_TCP RETRANSMISSION_02

  1. 第一个数据发送就存在TCP重传,说明在规定的时间内,服务器并未回包。
  2. 网上查询相关资料,得知在NAT网络环境中,Linux服务器内核参数配置TCP快速回收【net.ipv4.tcp_tw_recycle = 1】和TCP时间戳【net.ipv4.tcp_timestamps = 1】,多个客户端使用同一个外网IP地址访问服务器时,NAT网络传输的数据包时间戳存在乱序可能,导致服务器认为数据包不可信从而丢弃。
  3. 检查WAF服务器及后端服务器发现均配置了内核参数:
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestamps = 1

解决方案

在WAF服务器及后端服务器取消TCP快速回收和TCP时间戳配置
  1. 修改sysctl.conf文件
vim /etc/sysctl.conf

2.修改配置

net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_timestamps = 0

3.应用生效

sysctl -p

验证

多个客户端对网站进行大量访问操作,以及使用JMeter进行长达30分钟压测,均未出现无法访问网站,问题解决。