连载中 17/20

tcpdump 抓包:把线上网络问题放到显微镜下

2026-10-09 · 14 阅读 · 0 评论 · 0 赞

什么时候轮到抓包

应用日志、APM、系统指标都查完仍然两头对不上的问题,才轮到抓包出场:请求到底发出去没有(发都没发,是客户端的锅)、对端到底回没回(回了没收到,是链路的锅)、连接是谁先断的(看 FIN/RST 谁先出手)。抓包是终审证据——它记录的是网卡上真实发生的每一个字节,不掺任何一层的谎。

三分钟上手

# 抓指定目标的包,数字形式显示地址和端口(不做 DNS 反查,快且不抖动)
$ tcpdump -i any -nn host 10.0.0.20 and port 6379 -c 100

# 常用过滤表达式(BPF 语法)
host 10.0.0.20                    # 收发双方任一是它
src 10.0.0.5 and dst port 443     # 源地址 + 目标端口
tcp port 8080 or udp port 53      # 或条件
not port 22                       # 排除 SSH(不然终端自己刷屏)
net 10.244.0.0/16                 # 整个网段

# 常用参数
-i any        # 所有网卡(容器环境必用)
-nn           # 不解析域名/端口名
-c 100        # 抓满 100 个包自动停(线上保命参数)
-w out.pcap   # 原始字节存文件,拿回本地用 Wireshark 细看
-s 0          # 完整抓包不截断(新版本默认已完整)

读懂三次握手的真身

12:01:01.123456 IP 10.0.0.5.52333 > 10.0.0.20.6379: Flags [S],  seq 1200, win 64240
12:01:01.123502 IP 10.0.0.20.6379 > 10.0.0.5.52333: Flags [S.], seq 8800, ack 1201
12:01:01.123511 IP 10.0.0.5.52333 > 10.0.0.20.6379: Flags [.], ack 8801

// Flags 含义:S=SYN  .=ACK  F=FIN  R=RST  P=PSH(有数据快取走)
// [S.] 是 SYN+ACK 合并包;纯 [.] 是普通确认
// 时间戳精确到微秒——RTT 直接两行相减就算出来

两个高频判读:只有 [S] 没有 [S.]——SYN 发出去石沉大海,防火墙丢包或对端没监听;出现 [R]——连接被粗暴拒绝,配合“谁发的 R”定位责任方:服务端发 R 是没进程监听或主动踢,中间设备发 R 常是超时清理。

线上抓包的正确姿势

抓包本身有开销(内核拷贝每一帧给用户态),大流量机器上无过滤地抓等于 DoS 自己。守三条规矩:第一,过滤表达式写窄——限定 host + port,绝不抓 any any;第二,-c 限包数或 timeout 限时——tcpdump timeout 命令包一层,防止忘了它还挂着;第三,-w 存盘离线分析——生产机上只负责抓,细看回本地 Wireshark。容器环境注意 -i any 配合 netns,veth 两端会看到重复包,去重后再下结论。

和 tcpdump 搭配的兄弟

轻量场景有更省力的选择:ss -i 看单条连接的 RTT、重传、窗口(第九篇用过);nstat / netstat -s 看内核协议栈统计(重传包总数、RST 计数);strace -e trace=network 看进程的 connect/send/recv 系统调用。原则:先用统计缩小嫌疑,再用抓包定罪。下一篇:Wireshark——拿到 pcap 文件之后,怎么三步定位一次慢请求。

☕
503

10 年全栈工程师 · 503咖啡馆主理人

#tcpdump#抓包#BPF#pcap#排错

评论 (0)

热门推荐

连载中 11/22

主从搭建实操:从零配出一主两从

光讲原理不过瘾?手把手搭一主两从:my.cnf 六个参数、复制账号、GTID、CHANGE REPLICATION SOURCE TO、SHOW REPLICA STATUS 验收,附翻车排查清单。

#MySQL#主从复制#GTID#主从搭建#高可用
2026-05-07 · 10114 阅读 · 0 评论 · 0 赞
连载中 16/22

连接池:HikariCP 参数与连接风暴

连接池不是越大越好:8 核机器配 1000 连接反而更慢的数学原理,HikariCP 四个必调参数,maxLifetime 与 wait_timeout 的隐形陷阱。

#MySQL#连接池#HikariCP#maxLifetime#连接风暴
2026-05-10 · 9877 阅读 · 0 评论 · 0 赞
连载中 4/16

缓存穿透:恶意 ID 打穿 MySQL 的四道防线

请求的数据在缓存和数据库里都不存在时,缓存形同虚设。聊聊参数校验、空值缓存、布隆过滤器、限流熔断四道防线的原理与组合打法。

#Redis#缓存穿透#布隆过滤器#高可用
2026-05-16 · 9307 阅读 · 21 评论 · 287 赞