文章

图文详解: ping 通了就代表网络没问题吗

本文简洁介绍了 ping 原理, 以及 ping 过后网络不通的解决思路

本文来自 - 图文详解: ping 通了就代表网络没问题吗? - 牛牛码特

ping 的核心: ICMP 协议 (互联网控制消息协议) - 只负责传递网络通不通的基础信号 - 为独立专线

ping 的特点:

  • 简单
  • 轻量
  • 快速
  • 底层

ping 通了代表什么? - 以 ping baidu.com 为例

1
2
3
4
5
6
7
8
9
root@ubuntu:~# ping baidu.com
PING baidu.com (110.242.74.102) 56(84) bytes of data.
64 bytes from 110.242.74.102 (110.242.74.102): icmp_seq=1 ttl=50 time=35.3 ms
64 bytes from 110.242.74.102 (110.242.74.102): icmp_seq=2 ttl=50 time=36.4 ms
64 bytes from 110.242.74.102 (110.242.74.102): icmp_seq=3 ttl=50 time=39.5 ms
^C
--- baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 35.279/37.076/39.531/1.797 ms

1. TTL = 50: 数据包中转次数

TTL 的特点: 数据包每经过一个路由器, 数值就会自动减1;

常见 Linux 服务器 TTL 为 64, 则通过的路由数: 64 - 50 = 14;

Note: 一般情况下, TTL 值默认为: 64; 但是有的情况还是有很大不同, 如下:

操作系统/设备 默认起始 TTL 值 备注
Linux / Unix / macOS 64 最常见现代 Linux 值
Windows (XP 及以上) 128 微软的标准值
某些旧 Windows 32 如 Win95/98,很少见了
路由器/网络设备(如 Cisco) 255 常见于某些厂商

2. time=35.3 ms

数字越低, 底层链路响应速度越快

3. 0% packet loss: 数据包丢失率

这三个指标, 直观反应三层状态:

  • 目标设备在线
  • 传输状态稳定
  • 基础链路畅通

ping 之后发生了什么?

  1. 域名转 DNS 解析
  2. 构造 ICMP 请求包, 包内容:
    • 请求IP
    • 目标IP
    • 呼叫序号: 区分多次 ping 请求
    • 时间戳: 记录延时
    • 校验码
  3. 拨号入网: 先包 IP 头, 再包 MAC 头
    先定远程方向, 再找本地出口
    1. 第一层 IP头, 定全网导航
      • 起点(本机 IP)和终点(目标 IP)
      • 报文类型 (ICMP 报文)
      • 时间设置: 设置 TTL
    2. MAC 头, 本地传输出口 - 封装两类本地通讯字段:
      • 发送方: 标注本机 MAC 地址
      • 接收方: 标注本机 MAC 地址
  4. 中转传递
    1. 校验完整性
    2. 规划中转路径: 根据路由表
    3. 更新包信息: TTL-1
  5. 收到应答
    • 拆 MAC 头, 确保数据包是自己的
    • 拆 IP 头, 核实 IP 与 自身 IP 匹配
    • 校验 ICMP 请求包

ping 天生局限:

  • 测不了网络真实负载
  • 只管底层链路, 不管上层服务
  • 人为防护规则限制会导致失真

ping 通了, 不代表网络没问题; 带宽瓶颈, 端口拦截, 服务崩溃, 规则限制, 这些 ping 覆盖不到的问题,才是日常用网故障的元凶;

如果 ping 通却用不了,按下面流程,从下到上逐层定位故障点:
测端口(telnet、nc 命令)→ 验带宽(iperf 工具)→ 查应用(服务日志)→ 看权限(防火墙规则)→ 监链路(抓包分析)

本文由作者按照 CC BY 4.0 进行授权