问题背景

用户反馈文件下载慢,一开始下载很快,但突然速度下降。问题描述相当简单,估计是该用户具有一定的基础,在问题环境下客户端和服务器均有抓包,且保存较完整,直接扔包出来求教专家。

结合该问题下各专家的分析,感觉此案例还是比较有意思,继续分享。

案例取自 Wireshark 官方问答论坛


问题分析

上来还是老套路,看看客户端上抓包文件中的 TCP 三次握手

wireshark 抓包 超过1500 wireshark抓包慢_wireshark

如描述一样,此文件确实是在客户端 87.185.166.148 上抓包,RTT 0.008536s ,MSS 均为 1460,且两端均支持 Window scale 及 SACK 等。

wireshark 抓包 超过1500 wireshark抓包慢_wireshark_02


wireshark 抓包 超过1500 wireshark抓包慢_网络协议_03

看看用户所说的一开始下载很快,但突然速度下降的现象,确实,如下图

wireshark 抓包 超过1500 wireshark抓包慢_tcp/ip_04

快速浏览下 专家信息,发现异常的干净,并没有丢包引起的重传、乱序之类的问题,所以下载慢的问题会是什么呢。

wireshark 抓包 超过1500 wireshark抓包慢_网络协议_05

从客户端抓包文件中查看 Window Scaling,来自服务器方向的 Bytes out 偏低,离 Rcv Win 还很遥远,疑似服务器的发送方向能力不足。

wireshark 抓包 超过1500 wireshark抓包慢_wireshark_06

细看客户端抓包文件中的 Bytes Out 图不是很明显,因为也有可能是 ACK 数据过快。

wireshark 抓包 超过1500 wireshark抓包慢_网络协议_07

再次在服务器抓包文件中检查 Bytes Out,问题较明显。在接收端窗口容量很大的情况下,服务器发送数据的能力逐步下降,匹配下载速度慢的现象。

wireshark 抓包 超过1500 wireshark抓包慢_wireshark 抓包 超过1500_08

可观察到问题点的数据包,服务器每发送 6 个MSS 大小的数据包,最后一个设置 PSH 位,然后停止发送,等待客户端的 ACK,然后再次发送 6个MSS。。。循环

wireshark 抓包 超过1500 wireshark抓包慢_tcp/ip_09


wireshark 抓包 超过1500 wireshark抓包慢_网络_10


问题总结

问题原因在于服务器无法正常,也就是无法够快的发送数据,造成数据传输速率下降,可能与服务器的拥塞窗口或是发送缓冲区限制有关。 🤣