图文详解: 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 之后发生了什么?
- 域名转 DNS 解析
- 构造 ICMP 请求包, 包内容:
- 请求IP
- 目标IP
- 呼叫序号: 区分多次 ping 请求
- 时间戳: 记录延时
- 校验码
- 拨号入网: 先包 IP 头, 再包 MAC 头
先定远程方向, 再找本地出口- 第一层 IP头, 定全网导航
- 起点(本机 IP)和终点(目标 IP)
- 报文类型 (ICMP 报文)
- 时间设置: 设置 TTL
- MAC 头, 本地传输出口 - 封装两类本地通讯字段:
- 发送方: 标注本机 MAC 地址
- 接收方: 标注本机 MAC 地址
- 第一层 IP头, 定全网导航
- 中转传递
- 校验完整性
- 规划中转路径: 根据路由表
- 更新包信息: TTL-1
- 收到应答
- 拆 MAC 头, 确保数据包是自己的
- 拆 IP 头, 核实 IP 与 自身 IP 匹配
- 校验 ICMP 请求包
ping 天生局限:
- 测不了网络真实负载
- 只管底层链路, 不管上层服务
- 人为防护规则限制会导致失真
ping 通了, 不代表网络没问题; 带宽瓶颈, 端口拦截, 服务崩溃, 规则限制, 这些 ping 覆盖不到的问题,才是日常用网故障的元凶;
如果 ping 通却用不了,按下面流程,从下到上逐层定位故障点:
测端口(telnet、nc 命令)→ 验带宽(iperf 工具)→ 查应用(服务日志)→ 看权限(防火墙规则)→ 监链路(抓包分析)
本文由作者按照
CC BY 4.0
进行授权