Day 7-4 网络诊断工具

本章学习目标
| 目标 | 说明 |
|---|---|
| 理解网络基础 | 掌握 IP 地址、子网掩码、网关的核心概念,理解数据包如何在网络中流动 |
| 配置 Linux 网络 | 使用现代工具(nmcli / Netplan)为 Rocky Linux 10 和 Ubuntu 26.04 配置静态 IP |
| 理解 TCP/IP 模型 | 建立“请求如何到达服务器”的最小认知,区分 TCP 和 UDP |
| 熟练使用诊断工具 | 掌握 ip、ss、tcpdump、curl、ping、traceroute、mtr 等工具 |
| 独立排障 | 运用五层排查法,独立解决 SSH 无法连接、页面无法访问等常见故障 |
本章模块概览

本节导读
前几节我们学习了 IP 地址配置和 TCP/IP 分层模型。现在你已经知道了“数据怎么走”(模型),也知道了 IP 配置。但生产环境中总会遇到网络不通、访问慢、连不上的问题——怎么查?
本节我们学习一套完整的网络诊断工具链:从查看 IP 和路由(ip),到检查端口(ss),再到抓包分析(tcpdump)和测试连通性(ping/traceroute/mtr),最后验证 HTTP 服务(curl)。
工具速览:
| 工具 | 用途 | 对应层级 |
|---|---|---|
| ip | 查看 IP、路由、ARP | 网络层/链路层 |
| ss | 查看端口监听和连接状态 | 传输层 |
| tcpdump | 抓包分析网络流量 | 全栈 |
| curl | 测试 HTTP 服务 | 应用层 |
| ping | 测试网络连通性 | 网络层 |
| traceroute/mtr | 追踪网络路径 | 网络层 |
一、ip 命令族
传统的 ifconfig、route、arp 命令已经废弃,统一使用 ip 命令替代。
1.1 ip addr(查看 IP 地址)
# 查看所有网卡的 IP 地址(最常用)
[root@magedu ~]# ip addr show
# 简写形式
[root@magedu ~]# ip a
# 只查看 IPv4 地址
[root@magedu ~]# ip -4 -br addr
lo UNKNOWN 127.0.0.1/8
ens160 UP 10.0.0.142/24
# 查看指定网卡
[root@magedu ~]# ip addr show ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:00:fa:0a brd ff:ff:ff:ff:ff:ff
inet 10.0.0.142/24 brd 10.0.0.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
关键字段解读:
| 字段 | 含义 |
|---|---|
| state UP | 网卡已启用(DOWN 表示停用) |
| inet 10.0.0.142/24 | IPv4 地址和子网掩码 |
| link/ether | MAC 地址 |
| valid_lft forever | 静态 IP(DHCP 获取的会显示租约剩余时间) |
1.2 ip link(网卡管理)
# 查看网卡状态
[root@magedu ~]# ip link show
# 启动网卡
[root@magedu ~]# ip link set eth0 up
# 关闭网卡(慎用,会断网)
[root@magedu ~]# ip link set eth0 down
提示:ip link set ens160 up 相当于插上网线,或者把网卡的物理开关打开。它只告诉内核“这张网卡可以工作了”。
当执行 nmcli conn up ens160 时,它内部会帮你调用 ip link set ens160 up,所以通常不需要单独执行后者。
1.3 ip route(路由表)
# 查看路由表
[root@magedu ~]# ip route show
default via 10.0.0.1 dev ens160 proto static metric 100
10.0.0.0/24 dev ens160 proto kernel scope link src 10.0.0.142 metric 100
关键字段解读:
| 条目 | 含义 |
|---|---|
| default via 10.0.0.1 | 默认网关(所有外网流量走这里) |
| dev ens160 | 从哪块网卡出去 |
| 10.0.0.0/24 dev ens160 | 同一子网直接通信,不需要网关 |
如果看不到 default via 行,说明网关没有配置或没有获取到。
1.4 ip neigh(ARP 缓存)
ARP 协议用于将 IP 地址解析为 MAC 地址。ip neigh 查看本机的 ARP 缓存表。

# 查看 ARP 缓存
[root@magedu ~]# ip neigh show
10.0.0.1 dev ens160 lladdr 52:54:00:00:fa:01 REACHABLE
10.0.0.254 dev ens160 lladdr 52:54:00:00:fa:fe STALE
| 状态 | 含义 |
|---|---|
| REACHABLE | 可达,正常通信 |
| STALE | 过期,需要重新解析 |
| FAILED | 解析失败 |
[root@magedu ~]# arping 10.0.0.2
ARPING 10.0.0.2 from 10.0.0.150 ens160
Unicast reply from 10.0.0.2 [00:50:56:ED:17:93] 0.679ms
Unicast reply from 10.0.0.2 [00:50:56:ED:17:93] 1.034ms
Unicast reply from 10.0.0.2 [00:50:56:ED:17:93] 0.821ms
Unicast reply from 10.0.0.2 [00:50:56:ED:17:93] 0.895ms
二、ss 连接状态查看
ss 比 netstat 更快(直接从内核获取信息),是生产环境首选。
2.1 基本用法
# 查看所有 TCP 监听端口(最常用)
[root@magedu ~]# ss -tlnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=5678,fd=6))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1234,fd=4))
| 选项 | 含义 |
|---|---|
| -t | TCP |
| -u | UDP |
| -l | 只显示监听端口 |
| -n | 不解析名称(显示数字端口) |
| -p | 显示进程信息(哪个程序在用) |
| -a | 显示所有连接(不只是监听) |
| -s | 统计摘要 |
2.2 状态筛选
# 查看已建立的连接
[root@magedu ~]# ss -tan state established
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 52 10.0.0.142:22 10.0.0.100:54321
0 0 10.0.0.142:80 10.0.0.200:12345
# 查看 TIME_WAIT 状态
[root@magedu ~]# ss -tan state time-wait
# 查看 CLOSE_WAIT 状态
[root@magedu ~]# ss -tan state close-wait
# 查看指定端口
[root@magedu ~]# ss -tan sport = :80
[root@magedu ~]# ss -tan dport = :3306
[root@magedu ~]# ss -tnlp | grep :80
2.3 常见连接状态
| 状态 | 含义 | 常见原因 |
|---|---|---|
| LISTEN | 服务正在监听 | 正常 |
| ESTABLISHED | 连接已建立 | 正常 |
| TIME_WAIT | 连接关闭等待 | 高并发场景常见 |
三、tcpdump 抓包分析
tcpdump 是命令行抓包工具,可以捕获经过网卡的数据包,是排查网络问题的最强手段。
# 安装
[root@magedu ~]# dnf install tcpdump -y
3.1 基本用法
# 抓取所有包(按 Ctrl+C 停止)
[root@magedu ~]# tcpdump -i ens160
# 限制抓包数量
[root@magedu ~]# tcpdump -i ens160 -c 100
# 不解析主机名和端口名(推荐,速度快)
[root@magedu ~]# tcpdump -i ens160 -nn
# 按端口过滤
[root@magedu ~]# tcpdump -i ens160 -nn port 80
[root@magedu ~]# tcpdump -i ens160 -nn port 22
# 按主机过滤
[root@magedu ~]# tcpdump -i ens160 -nn host 10.0.0.100
# 组合条件
[root@magedu ~]# tcpdump -i ens160 -nn host 10.0.0.100 and port 80
3.2 保存和读取
# 保存到文件(.pcap 格式,可用 Wireshark 打开)
[root@magedu ~]# tcpdump -i ens160 -nn -w capture.pcap
# 限制抓包数量,避免文件过大
[root@magedu ~]# tcpdump -i ens160 -nn -c 1000 -w capture.pcap
# 加时间戳,避免覆盖
[root@magedu ~]# tcpdump -i ens160 -nn port 80 -w /tmp/http_$(date +%Y%m%d_%H%M%S).pcap
# 读取文件
[root@magedu ~]# tcpdump -nn -r capture.pcap
# 读取文件并过滤端口
[root@magedu ~]# tcpdump -nn -r capture.pcap port 80
生产环境抓包流程:
# 1. 服务器上抓包
[root@magedu ~]# tcpdump -i ens160 -nn port 80 -c 100 -w /tmp/http.pcap
# 2. sz 下载到本地
[root@magedu ~]# sz /tmp/http.pcap
# 3. 用 Wireshark 打开分析
# 双击 .pcap 文件即可用 Wireshark 打开
关于 .pcap 文件:
| 后缀 | 说明 |
|---|---|
| .pcap | 最通用,Wireshark、tcpdump 默认格式 |
| .pcapng | 新版 Wireshark 默认格式,支持更多元数据 |
生产环境中使用 .pcap 后缀即可,兼容性最好。
3.3 输出解读
[root@magedu ~]# tcpdump -i ens160 -nn port 80
10:30:01.123456 IP 10.0.0.100.54321 > 10.0.0.142.80: Flags [S], seq 123456
10:30:01.123478 IP 10.0.0.142.80 > 10.0.0.100.54321: Flags [S.], seq 654321, ack 123457
10:30:01.123489 IP 10.0.0.100.54321 > 10.0.0.142.80: Flags [.], ack 654322
| 字段 | 含义 |
|---|---|
| 时间戳 | 10:30:01.123456 |
| 源地址 | 10.0.0.100.54321(IP + 端口) |
| 方向 | > 发送,< 接收 |
| 目标地址 | 10.0.0.142.80 |
| 标志 | [S]=SYN,[.]=ACK,[F]=FIN,[R]=RST |
3.4 实际排查场景
# 排查 SSH 连接问题
[root@magedu ~]# tcpdump -i ens160 -nn port 22
# 排查 HTTP 访问问题(-A 显示内容)
[root@magedu ~]# tcpdump -i ens160 -nn -A port 80
# 排查 DNS 解析问题
[root@magedu ~]# tcpdump -i ens160 -nn port 53
四、curl HTTP 验证
curl 是命令行 HTTP 客户端,用于测试 Web 服务连通性,是排障时的必备工具。
4.1 基本用法
# GET 请求
[root@magedu ~]# curl http://localhost:80
# 查看响应头(最常用)
[root@magedu ~]# curl -I http://localhost:80
HTTP/1.1 200 OK
Server: nginx/1.26.0
Content-Type: text/html
Content-Length: 4057
# 详细模式(含请求/响应头与 TLS 握手细节)
[root@magedu ~]# curl -v http://localhost:80
4.2 运维常用场景
# 验证服务本地是否正常(排除网络问题)
[root@magedu ~]# curl -I http://localhost:80
[root@magedu ~]# curl -I http://localhost:8080
# 测试接口响应时间
[root@magedu ~]# curl -w "%{http_code} %{time_total}\n" -o /dev/null -s http://localhost:8080
200 0.023
五、ping/traceroute/mtr
5.1 ping(连通性和延迟测试)

# 基本 ping
[root@magedu ~]# ping 10.0.0.1
# 限制次数
[root@magedu ~]# ping -c 4 10.0.0.1
# 间隔时间(秒)
[root@magedu ~]# ping -i 0.5 10.0.0.1
# 指定数据包大小
[root@magedu ~]# ping -s 1024 10.0.0.1
输出解读:
[root@magedu ~]# ping -c 4 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.196 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.436 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.361 ms
64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=0.298 ms
--- 10.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 49ms
rtt min/avg/max/mdev = 0.196/0.322/0.436/0.092 ms
| 字段 | 含义 |
|---|---|
| icmp_seq | 序列号,连续递增说明没丢包 |
| ttl | 生存时间,每经过一个路由器减 1 |
| time | 往返时间(毫秒) |
| 0% packet loss | 无丢包(>0% 表示有丢包) |
5.2 traceroute(路由追踪)
# 安装
[root@magedu ~]# dnf install traceroute -y
# ICMP 模式
[root@magedu ~]# traceroute -I baidu.com
# 不解析主机名(更快)
[root@magedu ~]# traceroute -n baidu.com
输出解读:
[root@magedu ~]# traceroute -n baidu.com
1 10.0.0.1 0.5ms 0.4ms 0.5ms
2 172.16.0.1 2.3ms 2.1ms 2.2ms
3 * * *
4 110.242.68.66 5.1ms 4.8ms 5.0ms
| 字段 | 含义 |
|---|---|
| 跳数 | 经过的第 N 个路由器 |
| IP 地址 | 路由器地址 |
| 三次探测时间 | 每次的往返时间 |
| * | 超时无响应(可能防火墙拦截) |
5.3 mtr(动态路由追踪)
mtr 结合了 ping 和 traceroute,动态显示丢包率和延迟,是排查网络质量的最佳工具。
# 安装
[root@magedu ~]# dnf install mtr -y
# 运行 mtr(交互式)
[root@magedu ~]# mtr baidu.com
# 只显示报告(不交互)
[root@magedu ~]# mtr -r baidu.com
# 不解析主机名
[root@magedu ~]# mtr -n baidu.com
输出示例:
[root@magedu ~]# mtr -r baidu.com
Start: 2025-01-15T10:00:00
HOST: localhost Loss% Snt Last Avg Best Wrst StDev
1. 10.0.0.1 0.0% 10 0.5 0.4 0.3 0.8 0.1
2. 172.16.0.1 0.0% 10 2.3 2.2 2.0 2.5 0.1
3. ??? 100.0% 10 0.0 0.0 0.0 0.0 0.0
4. 110.242.68.66 0.0% 10 5.1 4.9 4.5 5.3 0.2
| 字段 | 含义 |
|---|---|
| Loss% | 丢包率(关键指标) |
| Snt | 发送包数 |
| Last/Avg/Best/Wrst | 延迟统计 |
| StDev | 标准差(抖动) |
| ??? | 该跳不响应 |
六、firewalld 基础查看
6.1 查看防火墙状态和规则
# 查看防火墙状态
[root@magedu ~]# systemctl status firewalld
# 查看当前区域配置(最常用)
[root@magedu ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: ssh dhcpv6-client http https
ports: 8080/tcp 3306/tcp
forward: no
masquerade: no
| 字段 | 含义 |
|---|---|
| services | 放行的服务(预定义端口) |
| ports | 放行的自定义端口 |
| interfaces | 生效的网卡 |
七、本章小结
7.1 核心命令速记
查看类命令:
| 操作 | 命令 |
|---|---|
| 查看 IP 地址 | ip a 或 ip -4 -br addr |
| 查看路由表 | ip route show |
| 查看 ARP 缓存 | ip neigh show |
| 查看监听端口 | ss -tlnp |
| 查看已建立连接 | ss -tan state established |
| 查看连接统计 | ss -s |
| 查看防火墙规则 | firewall-cmd --list-all |
测试类命令:
| 操作 | 命令 |
|---|---|
| 测试连通性 | ping -c 4 目标IP |
| 追踪路由 | traceroute -I 目标IP |
| 动态路径分析 | mtr -r 目标IP |
| 测试 HTTP 服务 | curl -I http://localhost |
| 抓包分析 | tcpdump -i ens160 -nn port 80 |
7.2 排障工具选择指南
| 问题现象 | 首选工具 | 备选工具 |
|---|---|---|
| 服务器没 IP | ip a | nmcli dev status |
| 外网不通 | ip route + ping | traceroute |
| 端口不通 | ss -tlnp | telnet / nc |
| 服务返回异常 | curl -v | tcpdump |
| 网络延迟高 | ping | mtr |
| 怀疑丢包 | mtr | tcpdump |
| 防火墙拦截 | firewall-cmd --list-all | tcpdump |
7.3 学完本节应能独立完成
- 使用 ip 命令查看 IP 地址、路由和 ARP。
- 使用 ss 命令查看端口监听和连接状态。
- 使用 tcpdump 抓包分析网络流量,并导出 .pcap 文件用 Wireshark 深度分析。
- 使用 curl 测试 HTTP 服务。
- 使用 ping/traceroute/mtr 诊断网络路径。
- 查看防火墙开放端口。
下一节预告
Day 7-5:分层排障方法论。
我们已经掌握了网络诊断工具,下一节我们将学习怎么用这些工具——从物理层到应用层的五层排查法,以及 SSH 无法连接、页面无法访问两大真实场景的完整排障流程。
评论