前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >实战网络问题排查(五) -- 利用 wireshark 排查 TCP 快速重传问题

实战网络问题排查(五) -- 利用 wireshark 排查 TCP 快速重传问题

作者头像
用户3147702
发布于 2022-06-27 07:02:23
发布于 2022-06-27 07:02:23
5.2K0
举报

1. 引言

上一篇文章中,我们利用 wireshark 排查定位了 TCP 的连接问题与重传问题:

实战网络问题排查(四) -- 利用 wireshark 排查 TCP 连接与重传问题

TCP 有另一个常见的问题 -- 重复 ACK 与快速重传,本文我们就来看看这样的问题如何通过 wireshark 来排查和定位。

2. 快速重传机制

超时重传机制让 TCP 避免了因为网络异常等原因导致的丢包,但超时重传机制也伴随着许多问题,比如:

  1. 当一个报文段丢失,会等待一定的超时周期然后才重传分组,增加了端到端的时延。
  2. 当一个报文段丢失时,由于接收端一直在等待,导致其后的报文段已经被接收端接收但却迟迟得不到确认,造成超时的连锁反应,全部都不得不被重传,浪费了不必要的资源。

由此,TCP 诞生了快速重传机制。

接收方只要收到了比期望的序列号大的报文,这就说明发生了乱序,此时不必等待超时的发生,而是立即重复 ACK 当前期望的序列号。

当发送方接收到 N 个重复的额外 ACK,也就是第 N+1 次接收到同一个序列号的报文时,就认为该报文已经丢失,立即重传该报文。

相比于超时重传机制,快速重传机制将时间触发机制改为了事件触发机制,接收端接收三个报文的耗时通常要远低于重传超时,同时,已经接收到的后续报文在快速重传发生后,也不会被清除,而是会 ACK 后续未收到的序列号。

下图展示了这一机制的过程:

同时,伴随着快速恢复算法,在发生快速重传后,发送方会立即将发送速率减半甚至降到最低,这对通信效率的影响是非常大的。

但是,由于 IP 协议包的无序性,偶发的 TCP 快速重传是可以接受的,如果有 1% 以上的快速重传,那就需要引起注意了。

3. 通过 wireshark 排查 TCP 快速重传

3.1 wireshark 中的快速重传

在 wireshark 中,重复 ACK 的关键字是“TCP Dup ACK”,快速重传的关键字是“TCP Fast Retransmission”。

如图所示,就是一个51个重复ACK之后发生了快速重传的例子:

<img id="3378730"/>

3.2 问题排查

快速重传是由于乱序或丢包引起的,通常原因是网络延迟或抖动造成的。

可以重点检查服务器或链路中的各个节点的缓存和 CPU 负载情况或者有条件的话可以更换网络环境。

4. wireshark 定位乱序现象

根据上文所述,多次连续的重复 ACK 会触发 TCP 快速重传机制,但即使没有达到连续触发次数,重复 ACK 可能也同样意味着网络异常的存在。

4.1 wireshark 中的现象

报文乱序的情况在 wireshark 中有三种现象:

  1. Previous segment lost -- 收到报文的序列号高于该连接的下一个期望序列号,这说明之前的一个或多个报文未能到达。
  2. Out-of-order packet -- 当前报文的序列号低于该连接先前收到的报文,说明发生了乱序。
  3. Previous segment not captured -- 报文丢失。

如图所示:

<img id="3378731"/>

4.2 问题定位

如果你是在通过 wireshark 抓包时发现这一现象,那么有可能是 wireshark 本身的原因造成的,如果你仅仅看到乱序报文,但没有看到对可能丢失及乱序报文的响应,这说明实际上可能并没有问题。

4.2.1 wireshark 抓包问题

  1. 由于 wireshark 仅支持 150Mbit/s 以下的传输速度下进行抓包,如果传输速度超过这一阈值,就有可能导致 wireshark 本身在抓包过程中无法捕获部分包,可以更换其他抓包工具进行抓包。
  2. 可以检查计算机的 CPU、内存等硬件资源是否充足。
  3. 检查交换机端口缓存容量是否太小。
  4. wireshark 本身在抓取无线网卡时,可能会有抓不全的情况。

4.2.2 网络延迟

在 TCP 传输过程中,如果封装 TCP 报文段的 IP 数据包走了不同的路由线路,就有可能造成乱序情况发生,可以借助 traceroute 工具检查路由情况,进而判断是否某个路由链路传输效率存在问题。

对于内部网络,可以在路由器上配置 SNMP trap,让网管软件自动报警。

参考资料

https://datatracker.ietf.org/doc/html/rfc793

《Network Analysis Using Wireshark Cookbook》

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小脑斧科技博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TCP重传问题排查思路与实践
图 under the strange horizon by joeyjazz
用户1278550
2019/03/15
12.7K0
实战网络问题排查(四) -- 利用 wireshark 排查 TCP 连接与重传问题
本文我们就通过 wireshark 来看看遇到这几类网络问题时我们应该如何着手吧。
用户3147702
2022/06/27
10.5K0
实战网络问题排查(四) -- 利用 wireshark 排查 TCP 连接与重传问题
TCP Wireshark网络抓包分析和问题解决说明
Wireshark默认有一组着色规则,可以在Packet Details面板中展开包的帧部分,查看着色规则。
黄规速
2022/04/15
28K0
TCP Wireshark网络抓包分析和问题解决说明
实战网络问题排查(六) -- 利用 wireshark 排查 TCP 空窗口问题
上一篇文章中,我们看到了如何通过 wireshark 排查 TCP 重复 ACK 特别是由此引发的快速重发问题:
用户3147702
2022/06/27
6.9K0
实战网络问题排查(六) -- 利用 wireshark 排查 TCP 空窗口问题
《计算机网络传输层 TCP协议》
每个TCP报文段由固定的20Byte头部组成,TCP报文头部 选项可以跟在固定标头之后。 带有标头,使其最多可以标记 65535 个数据字节。
梅花
2021/11/11
7170
《计算机网络传输层 TCP协议》
TCP/IP第四层--传输层TCP和TPC数据报文详解
与UDP不同的是,TCP提供了一种面向连接的、可靠的字节流服务。TCP是如何实现可靠连接?
黄规速
2022/04/14
3.6K0
TCP/IP第四层--传输层TCP和TPC数据报文详解
这次,终于学会了 TCP
这是一篇详细介绍 TCP 各种特点的文章,内容主要包括 TCP 三次握手和四次挥手细节问题、TCP 状态之间的转换、TCP 超时和重传、关于 TCP 包失序和重复问题、TCP 的数据流与窗口管理、TCP 的拥塞控制,思维导图如下。
cxuan
2021/07/12
8390
这次,终于学会了 TCP
tcp拥塞控制机制
TCP的拥塞控制主要原理依赖于一个拥塞窗口(cwnd)来控制,TCP还有一个对端通告的接收窗口(rwnd)用于流量控制. 由于需要考虑拥塞控制和流量控制两个方面的内容,因此TCP的真正的发送窗口=min(rwnd, cwnd)。但是rwnd是由对端确定的,网络环境对其没有影响,所以在考虑拥塞的时候我们一般不考虑rwnd的值,我们暂时只讨论如何确定cwnd值的大小.
全栈程序员站长
2022/09/12
1.3K0
tcp拥塞控制机制
Wireshark分析艺术【读书总结】
【统计->捕获文件属性】 Statistics -> Summary,查看文件属性信息,如平均速度、包大小、包数等等
Allen.Wu
2019/12/12
1.9K0
计算机网络之TCP/UDP协议详解[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141669.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/24
3.7K0
计算机网络之TCP/UDP协议详解[通俗易懂]
TCP具体解释(3):重传、流量控制、拥塞控制……
  在TCP的数据传送状态。非常多重要的机制保证了TCP的可靠性和强壮性。它们包括:使用序号。对收到的TCP报文段进行排序以及检測反复的数据;使用校验和来检測报文段的错误。使用确认和计时器来检測和纠正丢包或延时。   在TCP的连接创建状态,两个主机的TCP层间要交换初始序号(ISN:initial sequence number)。这些序号用于标识字节流中的数据,而且还是相应用层的数据字节进行记数的整数。通常在每个TCP报文段中都有一对序号和确认号。TCP报文发送者觉得自己的字节编号为序号,而觉得接收者的字节编号为确认号。TCP报文的接收者为了确保可靠性,在接收到一定数量的连续字节流后才发送确认。这是对TCP的一种扩展,通常称为选择确认(Selective Acknowledgement)。
全栈程序员站长
2022/07/10
1.7K0
TCP具体解释(3):重传、流量控制、拥塞控制……
网络的救命稻草:重传机制如何确保数据顺利传输?
在设计架构或涉及网络时,我们都知道网络是不可靠的,可能会发生超时、断开连接、网络分区等各种问题。这些问题对于数据传输的可靠性和稳定性产生了很大的挑战。为了解决这些问题,各个组织都设立了专门的网络部门,致力于研究和解决网络问题。
努力的小雨
2023/11/28
7000
TCP详解+wireshark抓包演示简介
TCP提供了一种面向连接的、可靠的字节流服务。 面向连接:接双方在通信前需要预先建立一条连接,这犹如实际生活中的打电话。
用户2929716
2018/08/23
2.3K0
TCP详解+wireshark抓包演示简介
谈谈Linux中的TCP重传抓包分析
收到研发反馈,TCP重传严重。主机报文重传是TCP最基本的错误恢复功能,它的目的是防止报文丢失
公众号_松华说
2019/07/16
8.9K0
谈谈Linux中的TCP重传抓包分析
计算机网络OSI传输层
cheese
2023/10/25
3120
计算机网络OSI传输层
简单聊聊TCP协议的流程图解
TCP是面向连接的协议,这是因为在一个应用进程可以开始向另一个应用进程发送数据之前,这两个进程必须先相互“握手”,即它们必须相互发送某些预备报文段,以建立确保数据传输的参数。它有以下几个特点:
烂猪皮
2021/12/04
2K0
简单聊聊TCP协议的流程图解
TCP协议详解
小到基于应用层做网络开发,大到生活中无处不在的网络。我们在享受这个便利的时候,没有人会关心它如此牢固的底层基石是如何搭建的。而这些基石中很重要的一环就是tcp协议。翻看一下“三次握手”和“四次挥手”,本以为这就是tcp了,其实不然。它仅仅解决了连接和关闭的问题,传输的问题才是tcp协议更重要,更难,更复杂的问题。回头看tcp协议的原理,会发现它为了承诺上层数据传输的“可靠”,不知要应对多少网络中复杂多变的情况。简单直白列举一下:
kinnylee
2020/10/15
1K0
TCP协议详解
我今天才知道,原来TCP为了保证可靠传输做了这么多
本节内容有点多,不过关于 TCP 的话,除了三四次握手就是可靠传输了,高频重点知识点,大家还是搞清楚比较好。
Java程序猿阿谷
2021/01/14
1.2K0
我今天才知道,原来TCP为了保证可靠传输做了这么多
Tcp是什么?_跟你说完了
2、TCP连接的建立与终止(主要讲解了TCP的三次握手与四次挥手,并讲述了TCP连接的状态变迁,面试常问)
全栈程序员站长
2022/10/04
1.1K0
Tcp是什么?_跟你说完了
实战!我用“大白鲨”让你看见 TCP
为了让大家更容易「看得见」 TCP,我搭建不少测试环境,并且数据包抓很多次,花费了不少时间,才抓到比较容易分析的数据包。
小林coding
2020/05/26
1.7K0
相关推荐
TCP重传问题排查思路与实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档