网络基本功(二十六):Wireshark抓包实例分析TCP窗口及reset

网络基本功(二十六):Wireshark抓包实例分析TCP窗口及resetweb

 

转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese p_w_picpath001.gif缓存

 

介绍

 

TCP最重要的机制之一是滑动窗口机制,以及用以控制TCP终端节点愿意接收的数据总量的流控机制。服务器

TCP reset能够在几种状况下被发送。有一些是协议的正常工做过程,有一些则代表可能有问题。本节中,咱们查找问题以及分析解决问题的方法。网络

本章讨论以上两个问题。并发

 

更多信息

 

TCP窗口问题:ide

 

TCP零窗口,零窗口探测,零窗口违例性能

TCP零窗口发生于接收方在TCP头部的window字段广播接收窗口零字节的时候。这一事件告知发送方中止发送数据,由于接收方缓存已满。这也代表接收方可能发生如下问题:spa

  • 服务器没法为进程分配组后的内存操作系统

  • 应用碰到没有足够内存的问题,所以TCP需告知发送方中止发送数据3d

  • 应用消耗太多内存所以操做系统要限制应用资源

 

TCP零窗口探测由发送方发出,以查看接收方的零窗口是否依然存在。这一消息经过发送下一字节数据给接收方,若是接收方回复窗口大小仍然为零,则发送方的探测计时器加倍。

 

TCP窗口违例:发送方忽略接收方的零窗口大小并发送额外字节数据。TCP零窗口违例代表协议栈中有TCP错误。为了检查是何问题,检查是否有如下事件:

  • 某一终端设备(服务器或客户机)报出终端设备故障

  • 某一应用报出常规应用错误

  • 应用中执行某一操做时报错,例如,打开一个表格,发送一份文件至打印机,建立一个报告,或其余操做。这种状况下,是应用问题。

 

TCP窗口更新

TCP将窗口更新发送至链接的对端,以代表缓存大小更改,而且准备好接受更高或更低的数据速率(缓存大小决定了发送方被容许的发送速率)。这一状况发生于:

  • TCP接收方从零窗口中恢复,告知发送方从新发送速率。这一状况下,无需进行处理,只需检查第一次致使零窗口的问题。

  • TCP接收方频繁更改窗口大小。该状况下检查接收方被干扰的缘由。多是应用问题,内存问题,或终端设备上的其余问题。

 

看到这类现象无需担忧,这就是TCP的工做机制。

 

TCP窗口已满

这一信息代表已发送的报文会彻底填满接收方的接收缓存。发生于接收方没有对先前接收到的数据发出任何ACK确认信息,所以,这将会成为发送方从接收方收到ACK以前的最后一个报文数据。

 

这一事件的触发缘由与触发零窗口的缘由相同,是服务器或应用无响应的标志。典型实例以下图所示:

p_w_picpath002.jpg

 

上图中能够看到:

  1. 报文183816,192.168.2.138告知192.168.1.58发送窗口已满。

  2. 下一个报文,192.168.1.58发送一个信号至192.168.2.138,告知对方中止发送数据。这是一个零窗口信号。

  3. 双方继续发送零窗口以及零窗口探测。

  4. 链接的最后一个报文是192.168.2.138发送的RST报文,目的是断开链接。

  5. 某些状况下零窗口能够经过窗口更改信息来回复。某些状况下可经过reset来关闭(能够是应用零窗口从而没有收到任何数据致使)。

 

工做原理

TCP滑动窗口机制以下:

  1. 链接创建以后,发送方将数据发送至接收方,填入接收窗口。

  2. 若干报文以后,接收方发送ACK至发送方,确认接收到其发送的字节数。发送ACK将接收窗口清零。

  3. 这一过程持续下去,发送方向窗口中填入数据,接收方清空并发送确认信息。

  4. 扩大接收窗口大小告知发送方增长吞吐量,减少窗口告知对方减少吞吐量。这一机制按照WS/RTT规则(随着TCP版本不一样而有所改变):

p_w_picpath003.jpg

 

也能够经过TCP吞吐量图表和IO图来查看问题。在TCP吞吐量图表中,使用TCP trace图表,上面一行显示了窗口大小,与下面一行的距离代表窗口的剩余大小。没有距离表示零窗口。

p_w_picpath004.jpg

两行之间的固定距离代表接收方工做良好。当两行渐渐靠近,代表发送方速度高于接收方。只要这两行没有重叠,TCP就会继续发送数据。

 

TCP reset及缘由:

 

在可疑的链路或服务器两端链接Wireshark,开始抓包。观察抓包窗口的每个窗口信息。TCP reset能够在几种状况下被发送。有一些是协议的正常工做过程,有一些则代表可能有问题。本节中,咱们查找问题以及分析解决问题的方法。

 

reset是用以告知接收方断开链接的TCP信号,经过将RST标志位置1来发送。正常的操做过程当中,TCP经过SYN信号打开链接,经过FIN信号关闭链接。TCP的一大特性在于有问题时,或只是为了更好的性能,它可以快速关闭链接。

 

无端障时发送reset

TCP关闭链接的标准方式是经过FIN和FIN-ACK信号。为了关闭链接,用户须要四个报文:来自一方的FIN/ACK和ACK,以及另外一方的一样报文。当你打开一个网页,可能同时打开了数十个链接(主页,新闻,广告,按期更新的图片等),要关闭全部这些有时须要数百个FIN和FIN-ACK报文。为了防止其发生,web服务器在不少状况下会在发送请求数据以后用reset断开链接。这是标准的作法,并取决于应用程序。

 

有故障时发送reset

某些状况下reset代表有故障发生(并不必定是通讯故障):

  • 防火墙发送的reset:当远端服务器尝试打开链接但没有结果时,也许会看到返回RST信号。这是防火墙阻隔链接的状况。下图中,可看到发送的每个SYN都返回以RST。

p_w_picpath005.jpg

 

  • 因为收发一方有问题发送的reset:可能的缘由如:

    • 五个连续没有收到ACK回复的重传。当发送方没有收到任何重传回复,它就会发送一个reset信号到对端,告知其断开链接。

    • 另外一个缘由是链接之上几分钟都没有任何数据(分钟数取决于系统默认)。打开链接的一方一般会发送reset(但并不老是会这样作,取决于实现方式)。

相关文章
相关标签/搜索