4. 网络连通性核验:Ping与Traceroute的使用、端口连通性检查(Telnet/Netcat)、网络延迟与丢包基线
网络连通性是值班环境中最基础的核验项。无论是日常巡检、故障定界,还是变更后的回滚验证,SRE 都需要在第一时间确认“网络通不通”、“路径对不对”、“端口开没开”。本章围绕三层连通性(ICMP)、路径探测(UDP/TCP)和四层端口可达性(TCP)三个维度,建立可量化的网络基线核验方法。
4.1 三层连通性核验:Ping 与延迟/丢包基线
Ping 基于 ICMP Echo 请求/应答,是最直接的连通性验证手段。但值班场景下,不能只看“通/不通”,必须建立延迟(RTT)和丢包率的数值基线。
基线核验要点: 每次 Ping 测试应记录最小/平均/最大 RTT 和丢包率;当平均 RTT 超过基线 30% 或丢包率 > 0.5% 时,触发告警。
| 指标 | 正常基线 | 警告阈值 | 严重阈值 |
|---|---|---|---|
| 平均 RTT | < 10 ms(同机房) < 50 ms(同城) < 200 ms(跨洲) |
基线 × 1.5 | 基线 × 3 |
| 丢包率 | 0% | 0.1% – 0.5% | > 0.5% |
| RTT 抖动 | < 5 ms | 5 – 20 ms | > 20 ms |
# 标准 Ping 基线测试(连续 100 个包)
ping -c 100 -i 0.2 10.0.1.1
# 输出关键字段解析
# rtt min/avg/max/mdev = 0.123/0.456/0.789/0.012 ms
# 0% packet loss
值班避坑: 部分云环境或安全组会丢弃 ICMP 包,此时 Ping 不通不代表业务不通。应配合端口连通性检查(4.3 节)综合判断。
4.2 路径探测核验:Traceroute 与路由基线
Traceroute 通过递增 TTL 值探测每一跳路由,用于发现路径变化、路由黑洞或非对称路径。SRE 应建立标准路径基线:记录从源到目标经过的每一跳 IP 和平均延迟。
# Linux 使用 UDP 模式(默认)
traceroute -n -q 3 10.0.1.1
# 输出示例
# 1 10.0.0.1 0.345 ms 0.312 ms 0.298 ms
# 2 172.16.1.1 1.234 ms 1.198 ms 1.211 ms
# 3 10.0.1.1 2.101 ms 2.089 ms 2.112 ms
# 使用 ICMP 模式(部分网络 UDP 被过滤)
traceroute -I -n 10.0.1.1
路径基线异常场景: 当出现新跳数、跳数减少、某跳延迟突增 5 倍以上、或出现 * * *(无响应)时,应怀疑路由变更或链路故障。
路径基线应每周自动采集一次,与历史数据对比。以下为路径基线记录表示例:
| 目标 IP | 跳数 | 第一跳延迟 | 最后一跳延迟 | 路径指纹(MD5) |
|---|---|---|---|---|
| 10.0.1.1 | 3 | 0.3 ms | 2.1 ms | a1b2c3d4e5f6... |
| 10.0.2.1 | 5 | 0.3 ms | 4.5 ms | f6e5d4c3b2a1... |
4.3 四层端口连通性检查:Telnet 与 Netcat
端口连通性检查验证 TCP 服务是否在监听状态。Telnet 和 Netcat(nc)是值班最常用的工具。注意:Telnet 在部分最小化系统上未预装,Netcat 是更通用的选择。
| 工具 | 命令示例 | 成功标志 | 失败标志 |
|---|---|---|---|
| Telnet | telnet 10.0.1.1 80 |
显示 Connected to 10.0.1.1 |
Connection refused 或超时 |
| Netcat | nc -zv 10.0.1.1 80 |
返回 succeeded! |
Connection refused 或 timed out |
| Netcat(批量) | nc -zv 10.0.1.1 80 443 3306 |
逐端口显示状态 | 失败端口显示 refused |
# 单端口检查(推荐 Netcat)
nc -zv -w 3 10.0.1.1 80
# 批量端口检查
for port in 80 443 3306 6379; do
nc -zv -w 2 10.0.1.1 $port
done
# 使用 /dev/tcp(Bash 内置,无需额外工具)
echo >/dev/tcp/10.0.1.1/80 && echo "Port 80 open" || echo "Port 80 closed"
自动化脚本建议: 将端口检查结果输出为 JSON 格式,便于后续基线比对和告警触发。示例:
{"host":"10.0.1.1","port":80,"status":"open","latency_ms":1.2}
4.4 网络延迟与丢包基线建立方法
基线不是一次性的,需要持续采集并动态更新。以下为推荐的基线建立步骤:
- 采集周期: 每 5 分钟执行一次 Ping 测试(连续 10 个包),记录 min/avg/max/mdev 和丢包率。
- 窗口计算: 取过去 24 小时的 P50/P95/P99 作为动态基线。
- 异常判定: 当前值超过 P95 基线 2 倍或丢包率 > 0.5% 时触发告警。
- 路径变化: 每日凌晨执行一次 Traceroute,与历史路径指纹对比。
- 端口扫描: 每 15 分钟对关键端口执行一次 Netcat 检查,记录状态和响应时间。
重要提醒: 网络基线核验不能仅依赖单一工具。ICMP 被过滤时用 TCP Ping(如
nc -zv);UDP 端口用特定协议检查;Traceroute 遇到 * * * 时切换 ICMP 模式。值班脚本应内置 fallback 逻辑,避免误报。