第5章:网络通信故障排查常用命令

对齐原书第 5 章:ifconfig、ping、telnet、netstat、lsof、nc、curl 与 tcpdump,建立可证伪的分层排障流程。

学习目标

  • 能设计从 interface、route、reachability、listener、process、application 到 packet 的最小排障命令链,并为每步写出可证伪 hypothesis
  • 能比较 ifconfig/ip、ping、telnet/nc、netstat/ss、lsof 与 curl 的观察边界,把 socket tuple、TCP state、PID/fd 和应用响应对齐
  • 能写出受限 tcpdump BPF filter,分析 handshake、RST、retransmission 和时序,同时控制 pcap 敏感数据与权限风险

为什么“把所有命令都跑一遍”不是排障

命令只产生观察,排障需要 hypothesis。ping 成功不能证明 TCP port 可用,nc 连通不能证明 HTTP 正确,curl 200 也不能说明其他客户端路径没有 packet loss。每一步都应回答一个问题,并决定下一步,而不是堆积互不关联的输出。

先预测“connection refused”“connect timeout”“HTTP 503”分别最接近哪一层,再切换下图,看命令顺序是否在最早可证伪处收敛。

分步1 / 3

从症状选择第一条假设

5.1 ifconfig:接口地址、状态与计数器

ifconfig -a 可查看 interface、IPv4/IPv6 address、flags、MTU 和 RX/TX counters;现代 Linux 更常用 ip -br addrip link -sip route,信息更完整。排查时确认 interface 是否 UP、地址/prefix 是否正确、route 选中的 source 是否符合预期,并比较 drop/error counter 的时间增量。

ip -br addr
ip -s link show dev eth0
ip route get 10.0.0.9
# 兼容旧环境
ifconfig -a

容器/namespace 中的 lo、veth 和 route 与 host 不同。必须在故障流量实际所在 namespace 执行命令。

5.2 ping:ICMP 往返不是应用健康

ping 观察 ICMP echo reply、round-trip time、loss 和 TTL,可快速验证 DNS 解析后的 IP 与基本 L3 reachability。但 firewall 可能禁 ICMP 而允许 TCP,也可能 ICMP 正常而 application port 被拒绝。

ping -c 5 -W 1 10.0.0.9
ping -M do -s 1472 -c 3 10.0.0.9  # Linux IPv4 path-MTU probe

5.3 telnet:交互式 TCP 明文探测

telnet host port 可验证 TCP connect,并手工输入简单明文协议;它不验证 TLS certificate、HTTP redirect 或结构化 payload。连接后出现空白只说明 session 建立,不代表 server 已正确响应。

telnet 10.0.0.9 8080
GET /health HTTP/1.1
Host: service.example
Connection: close
 

不要把 production credentials 输入 telnet;终端 history、proxy 和 capture 都可能保留明文。

5.4 netstat/ss:tuple、state 与 queue

netstat -lntp 展示 listener,netstat -ant 展示 TCP states;现代 Linux 通常用更快的 ss -lntpss -antss -ti。关注 local/peer tuple、LISTEN/ESTABLISHED/SYN-SENT/TIME-WAIT、Recv-Q/Send-Q、timer 与 retransmission 信息。

分步1 / 3

选择目标 TCP state 与端口

5.5 lsof:从端口找到进程与文件描述符

lsof -nP -iTCP:8080 -sTCP:LISTEN 把 endpoint 映射到 command、PID、user 和 fd;-nP 避免 DNS/service-name lookup 干扰。权限不足时可能看不到其他 user 的 process,空输出不一定证明没有 owner。

sudo lsof -nP -iTCP:8080 -sTCP:LISTEN
sudo lsof -nP -a -p 4242 -iTCP
readlink /proc/4242/exe

PID 可能重用;incident 记录还要保存 process start time、executable path、container/pod identity 与 binary build-id。

5.6 nc:可脚本化的 TCP/UDP 探针

nc -vz -w 3 host port 做 TCP connect probe,nc -l 可建立临时 listener,nc -u 可发送 UDP datagram。不同 nc 实现参数有差异,脚本先记录版本。UDP “发送成功”只表示 datagram 交给本机 kernel,不证明对端收到。

nc -vz -w 3 10.0.0.9 8080
printf 'PING\r\n' | nc -w 2 10.0.0.9 6379
nc -l 127.0.0.1 9090

5.7 curl:拆分 DNS、connect、TLS、TTFB 与 body

curl -v 展示解析、connect、TLS 和 headers;--resolve 可固定 hostname 到指定 IP,同时保留 Host/SNI;-w 输出分阶段 timing。使用 -k 跳过证书验证会改变结论,不能把它作为正常健康证明。

curl -sS -o /dev/null \
  --connect-timeout 2 --max-time 5 \
  --resolve service.example:443:10.0.0.9 \
  -w 'dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} ttfb=%{time_starttransfer} total=%{time_total}\n' \
  https://service.example/health

header 可能包含 bearer token、cookie 或内部 topology。分享 curl -v 输出前先脱敏,生产探测使用只读 endpoint 和最小权限身份。

5.8 tcpdump:用最小抓包证明 wire 上发生了什么

tcpdump 能观察 interface 上的 timestamp、direction、五元组、flags、sequence/ack、length 与 payload snapshot。先定义要证明 handshake、RST、retransmission 还是应用时序,再写 BPF filter;同时在 client/server 抓包可区分 packet 在哪一段丢失。

分步1 / 3

选择抓包目标与最小过滤器

sudo timeout 30 tcpdump -i any -nn -s 128 \
  'host 10.0.0.9 and tcp port 8080' \
  -w /secure/inc-042.pcap
tcpdump -nn -tttt -r /secure/inc-042.pcap

本章回顾:让每条命令回答一个问题

  1. ifconfig/ip 证明 interface/address/route;ping 只证明有限的 ICMP reachability。
  2. telnet/nc 探测 transport;ss/netstat 说明 tuple/state/queue;lsof 说明 PID/fd owner。
  3. curl 把 HTTP 路径拆成 DNS/connect/TLS/TTFB/body,不能用 -k 伪造健康。
  4. tcpdump 提供 packet-level evidence,但必须有假设、过滤器、时间窗口和数据安全边界。
  5. 客户端与服务端证据对齐后,才能区分请求未发、途中丢失、内核排队和应用未处理。

练习

问题 1:客户端报 connect timeout;ping 通,服务端 ss -lntp 也有 listener。下一步如何最小化取证?

问题 2:ss 显示 Send-Q 持续增长,怎样避免直接断言“网络慢”?

问题 3:怎样设计一次可分享给外部团队的 tcpdump 取证,避免泄露?

术语表

名词解释

本章出现的专业名词,用大白话再讲一遍。

network evidence chain
route selection
ICMP reachability
connection five-tuple
socket queue evidence
socket ownership evidence
active port probe
time to first byte
BPF capture filter
retransmission evidence

讨论

评论区加载中…