记一次网络故障的解决

本文记录了一次网络故障排查过程,问题表现为用户无法打开web.runningdoctor.cn,但监控无异常、tracert结果正常。经过分析,发现与tcp_timestamps和tcp_tw_recycle内核参数相关,特别是tcp_timestamps可能导致服务器拒绝连接。最终通过修改内核参数和监控程序,找出服务器因时间戳问题拒绝连接的故障原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发现问题

1.用户无法打开web.runningdoctor.cn
2.监控状态无异常、无报警
3.tracert结果无异常、丢包率正常
4.用户无法访问的时候,我们能打开网站
5.多地代理访问网站,结果正常
6.有打开网站特别慢的时候,延迟30S

猜测问题

这里写图片描述

复现问题

这里写图片描述
偶然的一次 刷到了页面不存在
于是赶紧tracert一下 看看网络连通性
(但是不科学 因为这次请求被拒绝 我tracert并不及时 也许这个时候的tracert结果是能请求到页面时的 所以最后知道结果反推这次尝试应该说是一次失败的尝试)

试着解决问题

这里写图片描述
做出这种尝试但是还是没有确定问题到底出现在C端还是S端 ,所以只能每种都去试试,推测一下,改了再观察。

Try

plus:
1. Netstat 看到很多Time_wait
2. 查看TIME_wait的解决思路
3. 修改内核参数,重启应用程序

当时的内核一些网络配置参数:
net.ipv4.tcp_syncookies = 1(半开连接攻击????)
打开TCP SYN cookie选项,有助于保护服务器免受SyncFlood攻击。
net.ipv4.tcp_tw_reuse = 1(socket重用)
怀疑是不是socket占用太多导致建立不起tcp链接
net.ipv4.tcp_tw_recycle = 0(罪魁两巨头之一 default=1)
打开socket的快速回收机制
net.ipv4.tcp_fin_timeout = 20
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 180000
net.ipv4.icmp_echo_ignore_all=0
(这里无非就是打开一些上限 其实并没有达到上限)
net.ipv4.tcp_timestamps = 0 (罪魁祸首)
校验数据包头的时间戳 乱序的包将会被丢弃 满足递增的条件才保留
这里写图片描述

后来我被派到了医院里去 于是我打算通过一个小程序去监测我们web的80和443端口,看看他们这边有没有发生请求我们服务器的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值