B2B战略咨询如何定位:从知识贩卖到落地陪跑的转型路径
2026/10/5 3:45:39
从零到一用tcpdump分析 TCP 重传,不是“执行命令看输出”,而是“通过网络层证据链,定位 PHP 应用层性能问题”。
TCP 重传是网络拥塞、丢包、服务端慢响应的明确信号,常导致API 偶发高延迟、502、队列假活。
| 类型 | 触发条件 | 特征 |
|---|---|---|
| 超时重传(RTO) | 发送方未收到 ACK > RTO | 间隔指数退避(1s, 2s, 4s…) |
| 快速重传(Fast Retransmit) | 收到 3 个重复 ACK | 立即重传,无退避 |
recv()→ 客户端重传;🔑核心:重传 = 网络层对“未收到确认”的补偿机制。
# 抓取本机 9000 端口(FPM)的重传包sudotcpdump -i any -nn -ttt\'tcp and port 9000 and (tcp[tcpflags] & (tcp-rst|tcp-syn) == 0)'\-w fpm_retrans.pcaptcp[tcpflags] & (tcp-rst|tcp-syn) == 0→排除 SYN/RST(仅抓数据包);-w→ 保存为 pcap 文件(供 Wireshark 分析)。# 实时显示重传包(Linux)sudotcpdump -i any -nn -e\'tcp and port 9000'|grep-E'retransmission|duplicate'10:00:01.123456 IP 127.0.0.1.50000 > 127.0.0.1.9000: Flags [.], seq 12345, ack 67890, win 65535, length 100 10:00:02.123456 IP 127.0.0.1.50000 > 127.0.0.1.9000: Flags [.], seq 12345, ack 6789 <== retransmission# 使用 tcpdump 的重传过滤(需较新版本)sudotcpdump -i any -nn -Q'tcp.analysis.retransmission'⚠️注意:
-i any:抓所有接口(含 lo);- 生产环境慎用:高流量下可能丢包。
tcpdump -w fpm_retrans.pcap抓包;tcp.analysis.retransmission;Statistics → TCP Stream Graphs → Time-Sequence。# 统计重传包数量tshark -r fpm_retrans.pcap -Y'tcp.analysis.retransmission'|wc-l# 查看重传时间间隔tshark -r fpm_retrans.pcap -Y'tcp.analysis.retransmission'-T fields -e frame.time_delta; php-fpm.conf slowlog = /var/log/php-slow.log request_slowlog_timeout = 1ssudotcpdump -i lo -nn -w api_retrans.pcap port9000whiletrue;docurlhttp://localhost/api;sleep0.1;donesleep(3)记录;sleep()→ FPM 未及时 ACK → 客户端重传。sudotcpdump -i eth0 -w cross_dc.pcaphostclient_ipsudotcpdump -i lo -w redis_retrans.pcap port6379tshark命令行足够(生产环境无 GUI);不要只看“有重传”,
要看“重传背后的系统状态”。
当你能用 tcpdump + PHP 慢日志构建证据链,
网络问题就从黑盒,
变为可量化的性能杠杆。
这,才是专业 PHP 工程师的网络观。