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...
Traceroute 路径探测与基线对比流程 源主机 跳1: 10.0.0.1 跳2: 172.16.1.1 跳3: 10.0.1.1 基线对比 历史路径指纹: a1b2c3d4e5f6 | 当前路径指纹: a1b2c3d4e5f6 | 状态: ✅ 一致 异常告警示例 路径指纹不匹配 | 新增跳4: 192.168.1.1 | 延迟从 2.1ms 升至 15.3ms

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 网络延迟与丢包基线建立方法

基线不是一次性的,需要持续采集并动态更新。以下为推荐的基线建立步骤:

  1. 采集周期: 每 5 分钟执行一次 Ping 测试(连续 10 个包),记录 min/avg/max/mdev 和丢包率。
  2. 窗口计算: 取过去 24 小时的 P50/P95/P99 作为动态基线。
  3. 异常判定: 当前值超过 P95 基线 2 倍或丢包率 > 0.5% 时触发告警。
  4. 路径变化: 每日凌晨执行一次 Traceroute,与历史路径指纹对比。
  5. 端口扫描: 每 15 分钟对关键端口执行一次 Netcat 检查,记录状态和响应时间。
网络连通性基线自动化采集架构 采集层 Ping / Traceroute / nc 存储层 时序数据库 / 基线表 分析层 P95/P99 计算 / 指纹比对 告警层 阈值触发 / 路径变更通知 基线自动更新:每 24 小时重新计算 P95/P99,每 7 天更新路径指纹
重要提醒: 网络基线核验不能仅依赖单一工具。ICMP 被过滤时用 TCP Ping(如 nc -zv);UDP 端口用特定协议检查;Traceroute 遇到 * * * 时切换 ICMP 模式。值班脚本应内置 fallback 逻辑,避免误报。