目标ip可以ping和不可以ping时的常见网络问题排查命令;
一、延迟高的常见原因分析
- 网络链路问题
- 跨机房路由路径复杂,中间节点(如运营商骨干网)拥塞或故障。
- 物理距离过远,光缆传输延迟增加(例如跨洲际机房)。
- 带宽瓶颈
- 机房之间带宽不足,导致数据包排队或丢包。
- 服务器性能问题
- 机房B服务器负载高(CPU、内存、磁盘I/O过载)。
- 机房B服务进程卡顿(如数据库慢查询、应用线程阻塞)。
- 防火墙/安全组策略
- 防火墙限速、连接数限制或策略匹配耗时。
- 协议或应用层问题
- TCP重传率高、应用协议设计低效(如频繁握手)。
二、基础排查手段(B机房允许Ping时)
1. 网络层分析
# 检查路由路径(需安装 traceroute/mtr)
traceroute 163.11.11.11 # 传统路由追踪
mtr -r -c 10 163.11.11.11 # 动态统计丢包率和延迟# 检查带宽和丢包(需安装 iperf3)
# 在机房B启动服务端:
iperf3 -s
# 在机房A启动客户端:
iperf3 -c 163.11.11.11 -t 30 -i 1
2. 服务器性能检查
# 检查机房B的CPU/内存/磁盘(需SSH登录)
top -H -p $(pgrep your_service) # 查看服务进程资源占用
iostat -x 1 # 磁盘I/O状态
3. TCP连接分析
# 使用 tcpdump 抓包(机房A或B)
tcpdump -i eth0 host 163.11.11.11 -w capture.pcap
# 分析抓包文件(Wireshark或tcptrace)
三、B机房禁止Ping时的替代方案
若机房B禁止ICMP协议(Ping),可通过以下方法绕过限制:
1. TCP协议探测延迟
# 使用 tcping(模拟Ping的TCP版本)
tcping -d -p 80 163.11.11.11 # 测试TCP端口延迟(示例端口80)# 使用 curl 测试HTTP延迟(若机房B开放Web服务)
curl -o /dev/null -s -w "DNS解析耗时: %{time_namelookup}\n连接耗时: %{time_connect}\n总耗时: %{time_total}\n" http://163.11.11.11/
2. 应用层协议探测
# 使用 nc 测试端口连通性和响应
echo "PING" | nc -v -w 2 163.11.11.11 8080 # 测试TCP 8080端口# 使用 telnet 检查握手延迟(示例SSH端口)
time telnet 163.11.11.11 22
3. 全链路追踪(绕过ICMP)
# 使用 tcptraceroute(基于TCP协议的路由追踪)
tcptraceroute -p 80 163.11.11.11 # 指定TCP端口80# 使用 mtr 的TCP模式(需root权限)
mtr --tcp -P 443 163.11.11.11 # 指定TCP端口443
4. 日志与监控工具
- 应用日志:检查机房B服务的错误日志(如Nginx的
error.log
、Java应用的GC日志)。 - Prometheus + Grafana:监控机房B的HTTP请求延迟、数据库响应时间。
- NetData/CloudWatch:实时查看网络流量和TCP重传率。
四、优化建议
- 网络层优化
- 启用BGP多线接入,优化跨运营商路由。
- 使用专线(如MPLS VPN)替代公网传输。
- 协议优化
- 启用TCP BBR拥塞控制算法(Linux内核4.9+)。
- 使用QUIC协议(如HTTP/3)减少握手延迟。
- 架构优化
- 在机房A和B之间部署缓存(如Redis)或CDN节点。
- 将同步调用改为异步消息队列(如Kafka、RabbitMQ)。
五、示例:全链路排查流程
-
步骤1(机房A)
# 测试TCP端口延迟(假设B机房开放80端口) tcping -d -p 80 163.11.11.11 # 输出:Reply from 163.11.11.11:80, time=352ms
-
步骤2(机房A)
# 使用 tcptraceroute 定位延迟节点 tcptraceroute -p 80 163.11.11.11 # 输出:第5跳节点(202.97.90.1)延迟突增到280ms # 查看ip信息 curl ipinfo.io/54.177.11.11
-
步骤3(联系网络运营商)
- 提供traceroute结果,要求优化第5跳路由。
-
步骤4(机房B)
# 检查服务器TCP连接状态 ss -s | grep estab # 查看ESTABLISHED连接数 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' # 统计TCP状态
总结
- 若B机房禁止Ping,优先使用 TCP协议工具(tcping/tcptraceroute) 和 应用层探测(curl/nc)。
- 结合 全链路监控(Prometheus) 和 日志分析,定位延迟瓶颈。
- 长期建议优化网络架构(如专线、CDN)和协议配置(TCP BBR)。