Wireshark抓包实例分析TCP重复ACK与乱序

转载请在文首保留原文出处: 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

时间: 2024-10-17 17:42:56

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

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

有一同事问用wireshark抓包时发现很多[TCP Retransmission],这些包极大影响了自己真正想看的http数据包,如下图. 我拿到pcapng后首先看到这些包的来源ip都是固定的两个,所以首先想到的方法就是过滤ip,规则如下: http and ip.src_host !="23.2.16.200" and ip.src_host !="23.2.16.218" 这种方法虽然解决了问题,但是明显不够通用,如果ip很多不是烦死人了吗?所以接着分析,g

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

转http://www.seanyxie.com/category/linux/ 作者:seanyxie | 一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡.它们一起处理与电缆(或其他任何传输媒介)的物理接口细节. 2. 网络层,也称作互联网层,处理分组在网络中的活动,例如分组的选路.网络层协议包括IP协议(网际协议

https wireshark抓包——要解密出原始数据光有ssl 证书还不行,还要有浏览器内的pre-master-secret(内存里)

基于wireshark抓包的分析 首先使用wireshark并且打开浏览器,打开百度(百度使用的是HTTPS加密),随意输入关键词浏览. 我这里将抓到的包进行过滤.过滤规则如下 ip.addr == 115.239.210.27 && ssl 1 下面用图来描述一下上面抓包所看到的流程. 1. Client Hello 打开抓包的详细,如下. 不难看出,这一握手过程,客户端以明文形式传输了如下信息: 版本信息(TLS 1.2) 随机数 Session ID(用于加快握手过程,可参考TLS会

FTP协议的粗浅学习--利用wireshark抓包分析相关tcp连接

一.为什么写这个 昨天遇到个ftp相关的问题,关于ftp匿名访问的.花费了大量的脑细胞后,终于搞定了服务端的配置,现在客户端可以像下图一样,直接在浏览器输入url,即可直接访问. 期间不会弹出输入用户名密码来登录的窗口. 今天我主要是有点好奇,在此过程中,究竟是否是用匿名账户“anonymous”该账户登录了,还是根本不需要登录呢? 于是用wireshark抓包了一下. 二.抓包过程 我这边直接用了捕获过滤器抓本机和ftp之间的包.抓包后直接ctrl+F进行文本查找. 果然发现是发送了USER

云计算之路-阿里云上:Wireshark抓包分析一个耗时20秒的请求

这篇博文分享的是我们针对一个耗时20秒的请求,用Wireshark进行抓包分析的过程. 请求的流程是这样的:客户端浏览器 -> SLB(负载均衡) -> ECS(云服务器) -> SLB -> 客户端浏览器. 下面是分析的过程: 1. 启动Wireshark,针对内网网卡进行抓包. 2. 在IIS日志中找出要分析的请求(借助Log Parser Studio) 通过c-ip(Client IP Address)可以获知SLB的内网IP,在分析Wireshar抓包时需要依据这个IP进

使用wireshark抓包分析浏览器无法建立WebSocket连接的问题(server为Alchemy WebSockets组件)

工作时使用了Websocket技术,在使用的过程中发现,浏览器(Chrome)升级后可能会导致Websocket不可用,更换浏览器后可以正常使用. 近日偶尔一次在本地调试,发现使用相同版本的Chrome浏览器,不可连接线上服务器的WS服务,但是可以连接本地的WS服务. 此时初步怀疑是服务器在某种特殊情况下会触发无法连接的问题. 使用Wireshark抓包 Filter:    ip.dst==serverIP or (ip.dst==本地IP and ip.src==serverIP) 一.查看

【计算机网络】wireshark抓包分析1

学习计算机网络很久了,但总是局限于书本知识,感觉get不到重点.经师兄建议用wireshark抓包分析看看. 我自己以前并没有做过抓包分析,所以这篇博文可能会有很多错误,只是我自己的一个记录,路过的亲们千万别当成教程,以免误入歧途.... TCP协议首部: 在Filter中设置为:ip.dst == 222.199.191.33 or ip.src == 222.199.191.33 这个地址是干什么的不知道,只是跟它的交互特别多,就选他了. 分析第一个包: 源地址:我自己电脑的IP,就不放上来

抓包及分析(wireshark&tcpdump)

1.简介 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Windows平台下使用Wireshark,如果是Linux的话,我直接用tcpdump了,因为我工作环境中的Linux一般只有字符界面,且一般而言Linux都自带的tcpdump,或者用tcpdump抓包以后用Wireshark打开分析. 在Windows平台下,Wireshark通过WinPcap进行抓包,封装的很好,使用起来很方便,可以很容易的制定抓包过滤器或者显示过滤器.且是一个免费工具

网络知识===wireshark抓包,三次握手分析

TCP需要三次握手建立连接: 网上的三次握手讲解的太复杂抽象,尝试着使用wireshark抓包分析,得到如下数据: 整个过程分析如下: step1 client给server发送:[SYN] Seq = 0(这个数据并不是所有人都为0) step2 server给client发送:[SYN & ACK]  Seq = 0(这里的Seq和step1中的不一样,它是server的)    Ack = 1  (这里的ACK = Seq+1(Seq为Step1中的数据)) step3 client给se