tcpdump抓redis主从同步包需聚焦连接、认证、psync协商、rdb传输及replconf心跳等关键阶段,结合-a、-s 0、-w参数提升可读性与完整性。

直接用 tcpdump 抓 Redis 主从同步包,关键不在“能不能抓”,而在于“抓得准、看得懂”。主从同步过程包含连接建立、认证、能力协商、全量同步(RDB 传输)和增量传播(命令转发)多个阶段,每个阶段都有明确的 TCP 行为和 RESP 协议特征。分析时需分层推进:先确认 TCP 连接是否正常,再聚焦应用层命令交互。
明确抓包范围:只盯主从通信链路
主从同步默认走 TCP,Redis 主节点端口(如 6379),从节点作为客户端主动连接。抓包必须限定在两者之间,避免干扰:
- 若主从在同一台机器(如本地测试),用
lo或lo0回环接口:sudo tcpdump -i lo port 6379 -nn -A - 若跨主机,指定主节点 IP 和端口,并过滤方向:
sudo tcpdump -i eth0 host 192.168.1.100 and port 6379 -nn -A(假设主节点 IP 是 192.168.1.100) - 加
-A参数让内容以 ASCII 显示,可直接看到PING、AUTH、PSYNC、REPLCONF等明文指令
识别主从同步的关键 TCP 阶段
抓到的包不是杂乱字节,而是有逻辑顺序的交互流。重点关注以下几类标志位和序列行为:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
三次握手完成:看到
[S]→[S.]→[.],说明 TCP 连接已建立 -
认证阶段:从节点发
AUTH <password></password>,主节点回+OK;若密码错,主节点会返回-NOAUTH Authentication required. -
同步协商:从节点发
PSYNC ? -1(首次同步),主节点回+FULLRESYNC <runid><offset></offset></runid>,随后紧跟着 RDB 文件二进制流(以$<len>\r\n<data>\r\n</data></len>格式开头) -
心跳与 ACK:进入增量传播后,从节点周期性发
REPLCONF ACK <offset></offset>,主节点发PING或写命令(如*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n)
定位常见问题的典型输出线索
很多主从不同步问题,其根源在抓包里一目了然:
-
连不上主节点:只有
[S]没有[S.]→ 主节点未监听、防火墙拦截、端口错误 -
认证失败:看到
AUTH xxx后立即收到-NOAUTH→masterauth配置不匹配 -
卡在 FULLRESYNC:收到
+FULLRESYNC后无后续$开头的 RDB 数据 → 主节点磁盘满、RDB 生成失败、或抓包截断(需加-s 0) -
增量中断:长时间无
REPLCONF ACK上报,或主节点持续发PING但无响应 → 网络丢包、从节点卡顿、复制缓冲区溢出
提升可读性的实用技巧
纯终端看 ASCII 流容易漏信息,配合几个小参数更高效:
- 加
-s 0:防止数据截断,确保完整捕获 RDB 内容(否则显示[|RESP]) - 加
-w redis-sync.pcap:保存为 pcap 文件,拖到本地用 Wireshark 打开,用 “Follow TCP Stream” 功能一键提取完整会话 - 加
2>&1 | grep -E "(PING|AUTH|PSYNC|FULLRESYNC|REPLCONF|SET|GET)":实时过滤关键词,跳过 TCP 控制包










