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

介绍

TCP 的一大常见问题在于重复 ACK 与快速重传。这一现象的发生也是由于性能问题,本章讨论如何发现这一问题以及他们意味着什么。

另一个常见问题是前一片段丢失以及乱序片段。某些情况下,这一现象喻示着故障发生,可能是由于网络问题或是抓包中断。

更多信息

重复 ACK 与快速重传 :

当网速变慢时,重复 ACK 是可能的原因之一。大多数情况下,重复 ACK 的发生是由于高延时,延迟的变化,或无法响应 ACK 请求的慢速终端。

  1. 当重复 ACK 的数量保持在合理范围时,即 1 或 2 个百分比,则可能不是本机问题。
  2. 当有大量的重复 ACK 时(假设有 10 个),则可能:
  • 通信链路繁忙引起延迟改变
  • 服务器或客户端无响应

3.  快速重传是对重复 ACK 的响应报文。

4. 下图是该问题的示例。本例中 51 个重复 ACK 之后发生了快速重传:

5. 以下是如何解决该问题:

  • 如果重复 ACK 和重传数量较少(少于 1 个百分比),是可以接受的。
  • 如果重复 ACK 发生在无线网络环境,或是 Internet 之上的连接,延时或是延时的改变对于这类网络来说很常见,所以也没有什么可做的。
  • 如果发生在组织内的网络,则可能有问题。如果发生在 LAN 之上,检查严重的问题,例如缓存和 CPU 负载,慢速服务器,等等。如果发生在 WAN 之上,查看延时,负载以及线路不稳定。

工作原理

当发现有丢失报文时(期望的序列号没有收到),或者收到了预期之外的序列号。这种情况下,接收端生成一个 ACK ,声明自己希望收到的下一个序列号。接收方持续生成丢失片段的 ACK 请求,直到实际收到。

在发送方,当它收到三个相同的 ACK (初始 ACK 和两个重复 ACK ),就会假设有报文丢失并重传该报文,无论重传计时器是否过期。再次发送的报文称为快速重传。

重复 ACK 也减少了发往网络的吞吐量。减少了多少吞吐量取决于 TCP 版本。比较早期的 TCP 版本中出现了重复 ACK ,发送方将吞吐量减少为之前的一半。在多个DupACK 的情况下,吞吐量减到最小。

下图显示了重复 ACK 和重传的典型例子,本图中第一次重复 ACK 将吞吐量降低至大约 40% ,之后重传将吞吐量减至最小。

乱序报文 :

在两端抓包,乱序情况下需要关注三种现象:

  • 先前片段丢失 :当前收到报文的序列号高于该连接的下一个期望序列号时,表明之前的一个或多个报文未能到达
  • 乱序报文 :当前报文的序列号低于该连接先前收到的报文
  • 先前片段未能捕捉 :( Wireshark 1.8.x 及以上版本):同先前报文丢失。

何时发生?

用户可能在以下情况看到乱序报文:

  • 连接开始时抓包 :当建立连接时抓包,这时,看到连接上的报文没有 SYN/SYN-ACK/ACK ,因此, Wireshark 认为连接有问题。
  • 确实有报文丢失 :这时会看到丢失报文重传和 / 或重复 ACK 告知发送方重传丢失报文。

上图是报文丢失的典型示例。从图中可见, 10.0.0.6 尝试浏览站点 62.90.90.210 。这一过程中, TCP 片段每个 1420 字节发送到 web 服务器, 334 到 336 之间 3 个报文丢失, 338 到 340 之间 2 个报文丢失。两者 Wireshark 都有提示: TCP’s previous segment is not captured.

  • 延时变化 :这可能是由于报文从源地址到目的地址经由不同的路由。检查这一点可以使用 Tracert ,在源和目的地址之间查找路由改变。如果在公司内部网络上是可以做到的,例如,在路由器上配置 trap 。
  • 数据捕捉问题 :可能报文正常收发,但 Wireshark 没有捕捉到。可能有以下几种原因:

    • 数据量比较大时, Wireshark 在高比特率的情况下可能会丢失报文(高于 150-180 Mbps )。要避免这一问题,使用其他工具(大多数需要付费)。
    • 台式机不够强大,内存或 CPU 无法让 Wireshark 工作的足够快。这一点很好发现。
    • 当 LAN 交换机的端口缓存太小,报文可能被丢弃。连接到交换机(用控制台或telnet 连接)使用交换机命令行来检查该问题。
    • 无线网络抓包,由于某种原因没有看到所有发送报文。

总结

乱序报文的原理很简单。 TCP 发送以其字节数为编号的报文到接收方。当一个报文没有按照顺序到达时, Wireshark 就会注意到。原因有两点:

  • 确实有问题 :这时会看到重传和重复 ACK ,这是 TCP 对于收到乱序报文的响应。
  • 抓包问题 :这时仅看到乱序报文,但没有看到对可能丢失及乱序报文的响应,可能实际上并没有问题。

参考

Network Analysis Using Wireshark Cookbook

Wireshark抓包实例分析TCP重复ACK与乱序的更多相关文章

  1. Wireshark抓包实例诊断TCP连接问题

    转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese  介绍 前文论述了TCP基础知识,从本节开始,通过TCP抓包实例来诊断TCP常见问 ...

  2. 网络基本功(二十七):Wireshark抓包实例分析HTTP问题

    转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese 介绍 HTTP的问题可能是由于慢速服务器或客户端,TCP性能问题,本文讨论上述问题 ...

  3. Wireshark抓包介绍和TCP三次握手分析

    wireshark介绍 wireshark的官方下载网站: http://www.wireshark.org/ wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示 ...

  4. wireshark抓包结果很多[TCP Retransmission]怎么办?

    有一同事问用wireshark抓包时发现很多[TCP Retransmission],这些包极大影响了自己真正想看的http数据包,如下图. 我拿到pcapng后首先看到这些包的来源ip都是固定的两个 ...

  5. wireshark抓包直观图解 TCP三次握手/四次挥手详解

    转http://www.seanyxie.com/category/linux/ 作者:seanyxie |   一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负 ...

  6. 使用Linux的tcpdump命令结合Windows的wireshark抓包和分析

    tcpdump简介 tcpdump是Linux系统下的一款抓包命令集,工作原理是基于网卡抓取流动在网卡上的数据包.在Linux系统中由于tcpdump命令的简单和强大,我们一般直接使用tcpdump命 ...

  7. wireshark 抓包再利用TCP socket发送包里的payload是可以实现登陆的

    用户密码可被批量破解 在用户使用手机端登录时,对数据进行抓包分析. 多次抓包分析后,可得到几个关键TCP数据包. 根据前面逆向编写出的解密算法,使用socket进行数据发包测试: 可以模拟APK进行用 ...

  8. Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析

    Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析 一.介绍计算机网络体系结构 1.计算机的网络体系结构 在抓包分析TCP建立链接之前首先了解下计算机的网络通信的模型,我相信学习过计 ...

  9. Wireshark抓包数据:理解与分析

    wireshark是一个非常好用的抓包工具,本文根据平时抓包经验,对之前wireshark抓包的一些常见知识点进行了整理. 有不当之处,欢迎指正 1.SYN,FIN会消耗一个序号,单独的ACK不消耗序 ...

随机推荐

  1. 红帽中出现”This system is not registered with RHN”的解决方案

    原因是你的linux没有在红帽网络上注册,所以无法下载上面的软件包,替代方案可以使用centos. 下面介绍下使用centos 的流程 1.卸载rhel的默认安装的yum包查看yum包rpm -qa| ...

  2. Nginx 缓存参数

    看看这下面两个指令参数: ----------------------------------------------------------------- proxy_cache_path  /ho ...

  3. 机器翻译(noip2010)

    分析:该题是经典的队列题目,直接用队列实现就可以.如果数据范围大一些的话还可hash判重! 这可以说是一道送分的题目,但是还有粗心的学生会在这里失分,主要原因是数组的范围定义的不合适,因为空间足够用, ...

  4. 一个基于atomic的卖票测试

    package testAtomic; import java.util.concurrent.atomic.AtomicInteger; import sun.security.krb5.inter ...

  5. Java基础毕向东day05 对象与对象的区别,匿名内部类,函数的执行流程。

    1.Car c = new Car(); Car c2 = new Car(); 1> c 和 c2之间的区别? public static void main(String[] args) { ...

  6. LINQ学习之旅(六)

    Insert/Update/Delete操作 插入(Insert) 1.简单形式 说明:new一个对象,使用InsertOnSubmit方法将其加入到对应的集合中,使用SubmitChanges()提 ...

  7. Android系统在新进程中启动自定义服务过程(startService)的原理分析

    在编写Android应用程序时,我们一般将一些计算型的逻辑放在一个独立的进程来处理,这样主进程仍然可以流畅地响应界面事件,提高用户体验.Android系统为我们提供了一个Service类,我们可以实现 ...

  8. iOS9的适配

    1.大部分社交平台接口不支持https协议. 问题描述:在iOS9下,系统默认会拦截对http协议接口的访问,因此无法获取http协议接口的数据.对ShareSDK来说,具体表现可能是,无法授权.分享 ...

  9. XMPP协议的原理介绍

    XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测.它在促进服务器之间的准即时操作.这个协议可能最终允许因特网用户向因特网上的其他任何人发送 ...

  10. FATE_完全背包

    ps:原来用新浪,可是代码的排版不是很好,所以用博客园啦,先容许我把从八月份开始的代码搬过来,从这里重新出发,希望这里可以一直见证我的成长. Time Limit: 2000/1000 MS (Jav ...