
1. 为什么需要抓取TCP三次握手作为开发者或运维人员排查网络问题时最头疼的就是网页打开慢这类模糊现象。上周我就遇到一个案例用户反馈后台管理系统加载耗时长达15秒但服务器监控显示各项指标正常。这时候Wireshark就成了我的救命稻草。TCP三次握手是每个网络连接的起点就像两个人见面时的握手寒暄。如果握手过程出现问题后续的数据传输就会受到影响。通过抓包分析我们可以直观看到握手是否成功完成每次交互的耗时序列号和确认号是否正确递增是否有异常的重传包2. 准备工作安装与配置Wireshark2.1 获取Wireshark安装包官网下载最新稳定版目前是4.2.3# Windows用户推荐使用管理员权限安装 https://www.wireshark.org/download.html安装过程中注意勾选Install Npcap选项这是抓包必需的驱动。我曾在某次排查中浪费两小时最后发现竟是漏装了这个组件。2.2 选择正确的网络接口启动Wireshark后你会看到所有可用网卡列表。常见踩坑点有线网卡通常显示为Ethernet或eth0无线网卡可能是Wi-Fi或wlan0VMware等虚拟网卡名称包含VMnet技巧打开命令提示符输入ipconfigWindows或ifconfigMac/Linux对比输出中的IP地址与Wireshark列表。3. 精准捕获目标数据包3.1 设置捕获过滤器为了避免海量无关数据干扰建议在开始捕获前设置过滤器。比如我们要监控访问百度时的握手过程# 先ping获取目标IP ping www.baidu.com # 得到IP如180.101.49.12后设置过滤器 host 180.101.49.12 and tcp port 80这个过滤器组合表示只捕获与指定IP之间、通过80端口HTTP默认端口的TCP流量。3.2 触发网络活动保持Wireshark在捕获状态用浏览器访问http://www.baidu.com。你会立即看到数据包开始滚动显示这时点击左上角的红色停止按钮。4. 解读三次握手数据包4.1 定位握手过程在过滤栏输入tcp.flags.syn1 or tcp.flags.ack1结果通常显示为[SYN][SYN, ACK][ACK]关键字段解读Sequence Number初始随机值实际显示为相对值Acknowledgment Number期望收到的下一个序列号FlagsSYN表示同步序列号ACK表示确认有效4.2 第一次握手SYN包客户端你的电脑发送Seq0实际是随机值如123456789 FlagsSYN这相当于说服务器你好我的初始序号是123456789能听到吗4.3 第二次握手SYN-ACK包服务器回应Seq0服务器随机值如987654321 Ack123456790客户端Seq1 FlagsSYNACK意思是收到你的123456789了我的序号是987654321请下次从123456790开始发4.4 第三次握手ACK包客户端确认Seq123456790 Ack987654322 FlagsACK表示好的我会从987654322开始接收你的数据5. 实战问题排查技巧5.1 握手失败常见原因SYN无响应可能是防火墙拦截尝试telnet IP 端口测试SYN-ACK丢失查看中间网络设备如负载均衡日志ACK未送达检查客户端到服务器的反向路径5.2 时间间隔分析右键任意握手包 → Follow → TCP Stream可以看到完整会话时间线。正常情况本地网络每次握手间隔1ms跨运营商50-200ms国际链路300ms如果SYN到SYN-ACK耗时过长可能是服务器负载高或中间网络拥塞。6. 高级过滤技巧6.1 快速定位问题会话# 查找重传的SYN包可能表示连接失败 tcp.analysis.retransmission and tcp.flags.syn1 # 查看握手耗时 tcp.time_delta 0.56.2 保存过滤结果分析完成后可以通过File → Export Specified Packets保存关键数据包。我习惯用问题描述_日期.pcapng的命名格式比如HomepageSlow_20240615.pcapng。7. 真实案例网页加载慢的元凶上个月遇到的典型案例某电商网站移动端平均加载时间达8秒。通过Wireshark捕获发现首次SYN重传3次才成功耗时2.3秒TLS握手又出现2次重传最终确认是CDN节点到源站的链路质量问题这个案例让我深刻体会到网络问题不能靠猜数据包从不说谎。现在我的工作电脑常开Wireshark随时准备抓包取证。