这类问题老网工见多了。
假设有两个主机,主机A(192.168.0.1)和主机B(192.168.0.2),现在我们要监测主机A和主机B之间网络是否可达,
nerror="javascript:errorimg.call(this);">
nerror="javascript:errorimg.call(this);">
首先把一件事讲清楚:
- ping 用的是 ICMP 协议
- 网页访问、API 调用、数据库连接,用的是 TCP 或 UDP
很多网络设备(尤其是防火墙、云主机)对这两类协议的处理逻辑是完全不同的。
所以第一件事不是继续 ping,而是换工具测试目标端口,比如:
这才是“服务是否可达”的基本测试手段。
这个是最常见的根源。
allow icmp any any
deny tcp any any
怎么排查?
- 看 安全组 / 防火墙策略 是否只允许 ICMP,其他都被 Drop
- 在服务端看监听状态,用 netstat -ntlp、ss -ntlp 看是否在监听
- 配合 tcpdump 抓包,看包是不是到了但没回应
这个坑新手容易踩,比如部署 Nginx、MySQL、Redis 时:
为啥?
ss -ntlp
LISTEN 0 128 127.0.0.1:6379 ...
改服务配置,把监听地址从 127.0.0.1 改成 0.0.0.0 或实际网卡 IP,就好了。
这个问题在双网卡、双出口的机器上特别常见。
原因在于:
- 请求是从网卡 eth0 发出去的
- 返回却走 eth1,结果对端收不到回包
- 表现就是 ping 通,服务死
这种问题看着像网络问题,其实是服务器自身的问题,很多时候和网络设备毫无关系。
有时候你以为是“访问不了”,其实是大包被截断了。
常见的场景是:
- IPSEC/VPN 通道、GRE 隧道里走了应用
- 没调 MTU,或者中间丢包严重
nerror="javascript:errorimg.call(this);">
原创:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部
