Wireshark TS | TCP Previous Segment Lost

274 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

问题背景

某用户提出一个疑似网络通信问题,相关描述:远程用户通过 ISP MPLS 专线连接至远程分支机构,通过浏览器尝试访问位于远程分支机构的某系统管理页面,但未能成功,而本地用户访问则正常。检查网络层基本连接正常,从远程用户 PC 到系统服务器 Ping 成功,且 Telnet 80 端口也正常。但是 Web 浏览时请求图形数据时不起作用。

考虑到问题比较典型,且有完整的数据包供下载分析,故分享之。

问题分析

正常工作

本地用户正常 Web 访问的抓包数据如下,简要分析如下:

  1. 数据包在客户端上抓取;
  2. TCP 三次握手正常,客户端 MSS 1260,服务器端 MSS 1460,RTT 0.025316s ,不支持 SACK;(注:该问题提出者描述的本地用户访问,但从 RTT 来说大约有 25ms ,也不像是本地访问的延时,略过)
  3. 客户端 HTTP GET 请求,服务器端 301 重定向,之后正常的 GET 及 200 响应;
  4. 服务器端开启了 delay ack ;
  5. 服务器端能按照最大 MSS 1260 传送,即长度为 1314 字节的数据包。

image.png

非正常工作

远程用户非正常 Web 访问的抓包数据如下,简要分析如下:

  1. 数据包同样在客户端上抓取;
  2. TCP 三次握手正常,客户端 MSS 1260,服务器端 MSS 1460,RTT 0.045647s,确实高于以上所说的本地访问,不支持 SACK;
  3. 客户端 HTTP GET 请求,服务器端依然 301 重定向,之后正常的 GET 及 200 响应;
  4. 服务器端开启了 delay ack ;
  5. 数据传输阶段,连续出现 [TCP Previous segment not captured] 提示,服务端最大传输长度仅为 654 字节,其实对比正常工作的数据包,故障原因已经很明显,客户端未能正常收到服务器发送的 MSS 1260 的数据包;
  6. 13 帧 Seq 2944 - 424 = 2520,认为之前可能丢失了 2 个 MSS 数据包;15 帧 和 17 帧问题同样;中间夹杂客户端 [TCP Dup ACK 14#] 提示,请求服务器端重新传输 Seq 为 424 的分段;
  7. 服务器端发送的数据包 IP 首部中 Don't fragment 设置为 1,为不分段

image.png

image.png

image.png

问题总结

综合以上分析,基本确认为 MTU 问题。在 ISP 专线传输中间疑似有小 MTU 设备,且服务器端所发送的数据包设置为不分段,因此造成数据丢包,客户端无法正常收到数据包,造成 Web 浏览系统管理页面异常。

MTU 问题在广域网上较为典型,可利用 ping 来做检测,ping 大包不分段 或者 ping 直接抓包均可看到现象。

参考

osqa-ask.wireshark.org/questions/1…