Wireshark抓包实例分析TCP重复ACK与乱序
转载请在文首保留原文出处: EMC 中文支持论坛https://community.emc.com/go/chinese
介绍
TCP 的一大常见问题在于重复 ACK 与快速重传。这一现象的发生也是由于性能问题,本章讨论如何发现这一问题以及他们意味着什么。
另一个常见问题是前一片段丢失以及乱序片段。某些情况下,这一现象喻示着故障发生,可能是由于网络问题或是抓包中断。
更多信息
重复 ACK 与快速重传 :
当网速变慢时,重复 ACK 是可能的原因之一。大多数情况下,重复 ACK 的发生是由于高延时,延迟的变化,或无法响应 ACK 请求的慢速终端。
- 当重复 ACK 的数量保持在合理范围时,即 1 或 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与乱序的更多相关文章
- Wireshark抓包实例诊断TCP连接问题
转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese 介绍 前文论述了TCP基础知识,从本节开始,通过TCP抓包实例来诊断TCP常见问 ...
- 网络基本功(二十七):Wireshark抓包实例分析HTTP问题
转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese 介绍 HTTP的问题可能是由于慢速服务器或客户端,TCP性能问题,本文讨论上述问题 ...
- Wireshark抓包介绍和TCP三次握手分析
wireshark介绍 wireshark的官方下载网站: http://www.wireshark.org/ wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示 ...
- wireshark抓包结果很多[TCP Retransmission]怎么办?
有一同事问用wireshark抓包时发现很多[TCP Retransmission],这些包极大影响了自己真正想看的http数据包,如下图. 我拿到pcapng后首先看到这些包的来源ip都是固定的两个 ...
- wireshark抓包直观图解 TCP三次握手/四次挥手详解
转http://www.seanyxie.com/category/linux/ 作者:seanyxie | 一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负 ...
- 使用Linux的tcpdump命令结合Windows的wireshark抓包和分析
tcpdump简介 tcpdump是Linux系统下的一款抓包命令集,工作原理是基于网卡抓取流动在网卡上的数据包.在Linux系统中由于tcpdump命令的简单和强大,我们一般直接使用tcpdump命 ...
- wireshark 抓包再利用TCP socket发送包里的payload是可以实现登陆的
用户密码可被批量破解 在用户使用手机端登录时,对数据进行抓包分析. 多次抓包分析后,可得到几个关键TCP数据包. 根据前面逆向编写出的解密算法,使用socket进行数据发包测试: 可以模拟APK进行用 ...
- Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析
Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析 一.介绍计算机网络体系结构 1.计算机的网络体系结构 在抓包分析TCP建立链接之前首先了解下计算机的网络通信的模型,我相信学习过计 ...
- Wireshark抓包数据:理解与分析
wireshark是一个非常好用的抓包工具,本文根据平时抓包经验,对之前wireshark抓包的一些常见知识点进行了整理. 有不当之处,欢迎指正 1.SYN,FIN会消耗一个序号,单独的ACK不消耗序 ...
随机推荐
- VMware-workstation-full-10.0.3-1895310 CN
Name: VMware-workstation-full-10.0.3-1895310.exe发行日期: 2014-07-01内部版本号: 1895310文件大小: 491 MB文件类型: exe ...
- JVM-class文件完全解析-类索引,父类索引和索引集合
类索引,父类索引和接口索引集合 前面介绍了class文件,从头开始的魔数,次版本号,主版本号,常量池入口,常量池,访问标志.那么再接下来的就是用来确定这个类的继承关系的类索引,父类索引和接口索引集合这 ...
- jenkins持续集成工具
jenkins是开源的 持续集成.持续构建的可视化web工具,持续构建说直白,就是各种项目的自动化编译.打包.分发部署. 好很多优点: 1.支持多语言 2.跟svn.git能无缝集成 3.直接与知名源 ...
- 网络数据的XML解析
网络应用中的数据解析,因为最近的应用,无论是Android的和ios平台的,一直用也是建议用的都是Json解析, xml解析都有点被遗忘了. 然后最近自己在做着玩一个ios的小应用,涉及网络数据的抓取 ...
- android开发艺术探索
android开发艺术探索 百度任玉刚 http://blog.csdn.net/singwhatiwanna/article/details/46810527
- WIN中SharePoint Server 2010 入门安装部署详解
目前流行的原始安装文件基本都是这样的:Windows Server 2008 R2+SQL Server 2008R2+SharePoint Server 2010 这个初始环境原本也无可厚非 ...
- 显示pdf
document.all[document.all.PDFNotKnown ? "IfNoAcrobat" : "IfAcrobat"].style.displ ...
- Multiple dex files define
Multiple dex files define 在项目中,有一个类的包名和引用的jar包中的类和包名一致
- BZOJ 2200 道路与航线
好厉害呀这道题,有种豁然开朗的感觉.... 按拓扑顺序跑最短路. 然后注意细节,像WA的代码犯下的错是一笔带过没有丝毫考虑的...然而就是错了. 考试的时候一定要拍啊. #include<ios ...
- 在Linux下用fdisk创建分区
一.输入 fdisk -l /dev/sda ,观察硬盘之实体使用情形.二.输入 fdisk /dev/sda,可进入分割硬盘模式. 1. 输入 m 显示所有命令列示. 2. 输入 p 显示硬盘分割情 ...