【原创】抓包分析之 “TCP Previous segment not captured”
前两天遇到了这样一个奇怪的现象:向某个服务发起 HTTP 请求,会概率性的出现丢包现象; 抓包截图如下: 在正常情况下,服务器在接收到 HTTP 请求后会迅速进行回应;并且 TCP 连接关闭是客户端侧发起的; 在异常情况下,能够看到服务器在 20s 后主动关闭了 TCP 连接,并且 wireshark 的专家信息告诉我们,存在没有抓到的数据包(TCP Previous segment not captured); 需要注意的是:上述两个截图是通过 curl 连续不断进行测试时抓到的,问题复现概率非常高;因为服务器在云端,因此只能在本地客户端侧进行抓包分析; 针对异常情况的数据包,分析如下: 196 号包说明服务器认为自己已经完成了服务请求,但客户端却没有主动关闭连接,于是在 20s 后只好主动将连接关闭;196 号包显示 "TCP Previous segment not captured" 并且包中 "Seq=1011" ,而我们抓到的上一个服务器侧发出包需要为 "Seq=1" ,说明其中有 1010 字节的包我们确实没抓到; 197 号包说明客户端在收到 "Seq=1011" 后认为自己收到了一个乱序包,因此试图通过 "TCP Dup ACK 192#1" 和 "Ack=1" 试图让服务器重传缺失的 1010 子节; 198 号包说明客户端发现 196 包携带了 "FIN"