网络基本功(二十四):Wireshark抓包实例分析TCP重传
转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese
TCP发送一个或一组报文,会等待收到报文的确认信息。重传,即发生在报文没有到达或确认信息没有及时返回的情况下。当发现网速变慢时,原因之一可能就是重传。发生重传的原因有多种,在客户机或服务器两边端口应用Wireshark有助于诊断问题。本文通过抓包实例阐述各种可能性。
诊断过程:
Case 1:重传至多个目的地址
以下截屏中,可看到有多次重传,分布于多台服务器,目的端口号为80(HTTP)。也可以发现重传由端口10.0.0.5发送,因此报文是丢失在发往Internet的途中,或确认信息没有及时从web服务器发回。
问题发生在发往Internet的线路上,怎样知道是什么问题呢?
Case 2:重传至单一连接
如果所有重传发生于同一IP,同一TCP端口号,则可能是慢速应用引起。看以下截屏:
对于单一连接的重传,进行以下操作:
3. 如下图所示,通过选择TCP标签看到重传来自哪一端口:
要定位问题,进行以下步骤:
Case 3:重传模式
观察TCP重传的一个重要考量是是否能看出一些重传模式。在以下截屏中,可以看见所有重传来自单一连接,位于客户端与服务器的NetBIOS会话服务(TCP端口139)。
看起来像一个简单的服务器/客户端问题,但查看抓包面板,如下图所示:
可以看见重传总是周期性的每30ms发生一次。问题是由于客户端在软件中执行了财务进程,导致软件每30-36ms就减速一次。
Case 4:应用无响应导致重传
另一个可能导致重传的原因是客户端或服务器没有响应请求。这种情况下,会看到五次重传,时间也会逐渐延长。五次连续重传后,发送方认为连接断开(某些情况下,会发送reset来关闭连接,取决于软件实施)。断开连接之后,可能会发生两件事情:
下图显示了打开新连接的情况:
Case 5:由于延时变化导致重传
TCP能够充分容忍延时,前提是延时大小不发生变化。当延时改变时,就会发生重传。诊断是否由该原因引起的方法:
3. 使用Wireshark工具诊断延时问题。
如果重传达到0.5个百分比,性能就会下降,断开连接将会达到5个百分比。这取决于应用及其对于重传的敏感性。
定位重传问题
当你看到通信链路上发生重传,进行以下步骤:
工作原理:
TCP序列号/确认机制详见前文:网络基本功(十):细说TCP确认机制 。那么重传是由什么原因引起呢?当报文确认信息丢失,或ACK没有及时到达,发送方会进行以下两步操作:
更多TCP重传内容详见前文:网络基本功(九):细说TCP重传 。
以下图中展示了重传减少发送方吞吐量(红色细线):
Network Analysis Using Wireshark Cookbook