TCP报文( tcp dup ack 、TCP Retransmission)

Wireshark 4.2 实战:5种TCP异常标记(Out-of-Order/Dup ACK等)的根因定位与修复 本文深入解析Wireshark 4.2中5种TCP异常标记(如Out-of-Order/Dup ACK等)的根因定位与修复方法。通过详细的报文标记分析和实战技巧,帮助网络工程师快速诊断和解决网络性能问题,提升传输效率。 阅读详情

最近因使用FTP 上传数据的时候总是不能成功,抓包后发现 TCP 报文出现 TCP dup ack 与 TCP Retransmission 两种类型的包。收集整理下
TCP

TCP dup ack (重复应答)

[TCP dup ack XXX#X] 表示第几次重新请求某一个包,
XXX表示第几个包(不是Seq),
X表示第几次请求。
丢包或者乱序的情况下,会出现该标志。
图例中:第26548 第0 此请求 4468792 的包,重复 4申请了4次 ;

[TCP Fast Retransmission] (快速重传)

一般快速重传算法在收到三次冗余的Ack,即三次[TCP dup ack XXX#X]后,发送端进行快速重传。
为什么是三次呢?因为两次 duplicated ACK 肯定是乱序造成的,丢包肯定会造成三次 duplicated ACK。
在这里插入图片描述
在这里插入图片描述

[TCP Retransmission] (超时重传)

超时重传,如果一个包的丢了,又没有后续包可以在接收方触发[Dup Ack],或者**[Dup Ack]也丢失**的情况下,TCP会触发超时重传机制。
超时重传

[TCP Out-Of-Order] (报文乱序)

[TCP Out-Of-Order]指的是TCP发送端传输过程中报文乱序了。

[TCP Previous segment not captured]

在TCP发送端传输过程中,该Seq前的报文缺失了。一般在网络拥塞的情况下,造成TCP报文乱序、丢包时,会出现该标志。
需要注意的是,[TCP Previous segment not captured]解析文字是wireshark添加的标记,并非TCP报文内容。

[TCP Out-Of-Order]

TCP发送端传输过程中报文乱序了。

Window

[TCP ZeroWindow]

作为接收方发出现的标志,表示接收缓冲区已经满了,此时发送方不能再发送数据,一般会做流控调整。接收窗口,也就是接收缓冲区win=xxx ,告诉对方接收窗口大小。

传输过程中,接收方TCP窗口满了,win=0,wireshark会打上[TCP ZeroWindow]标签。

[TCP window update]

接收方消耗缓冲数据后,更新TCP窗口, 可以看到从win=0逐渐变大,这时**wireshark会打上[TCP window update]**标签

[TCP window Full]

作为发送方的标识,当前发送包的大小已经超过了接收端窗口大小,wireshark会打上此标识,标识不能在发送。

TCP慢启动

慢启动是TCP的一个拥塞控制机制,慢启动算法的基本思想是当TCP开始在一个网络中传输数据或发现数据丢失并开始重发时,首先慢慢的对网路实际容量进行试探,避免由于发送了过量的数据而导致阻塞。
  慢启动为发送方的TCP增加了另一个窗口:拥塞窗口(congestion window),记为cwnd。当与另一个网络的主机建立TCP连接时,拥塞窗口被初始化为 1个报文段(即另一端通告的报文段大小)。每收到一个ACK,拥塞窗口就增加一个报文段(cwnd以字节为单位,但是慢启动以报文段大小为单位进行增加)。发送方取拥塞窗口与通告窗口中的最小值作为发送上限。拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。发送方开始时发送一个报文段,然后等待 ACK。当收到该ACK时,拥塞窗口从1增加为2,即可以发送两个报文段。当收到这两个报文段的 A C K时,拥塞窗口就增加为4。这是一种指数增加的关系。

拥塞避免算法

拥塞避免

网络中拥塞的发生会导致数据分组丢失,需要尽量避免。在实际中,拥塞算法与慢启动通常在一起实现,其基本过程:
   1. 对一个给定的连接,初始化cwnd为1个报文段,ssthresh为65535个字节。
   2. TCP输出例程的输出不能超过cwnd和接收方通告窗口的大小。拥塞避免是发送方使用 的流量控制,而通告窗口则是接收方进行的流量控制。前者是发送方感受到的网络拥塞的估 计,而后者则与接收方在该连接上的可用缓存大小有关。
   3. 当拥塞发生时(超时或收到重复确认),ssthresh被设置为当前窗口大小的一半(cwnd 和接收方通告窗口大小的最小值,但最少为2个报文段)。此外,如果是超时引起了拥塞,则 cwnd被设置为1个报文段(这就是慢启动)。
   4. 当新的数据被对方确认时,就增加cwnd,但增加的方法依赖于是否正在进行慢启动或拥塞避免。如果cwnd小于或等于ssthresh,则正 在进行慢启动,否则正在进行拥塞避免。慢启动一直持续到回到当拥塞发生时所处位置的半时候才停止(因为记录了在步骤2 中制造麻烦的窗口大小的一半),然后转为执行拥塞避免。
   慢启动算法初始设置cwnd为1个报文段,此后每收到一个确认就加 1。那样,这会使窗口按指数方式增长:发送 1个报文段,然后是2个,接着是4个……。

TCP协议中的计时器

TCP中有四种计时器(Timer),分别为:

  1. 重传计时器:Retransmission Timer
  2. 坚持计时器:Persistent Timer
  3. 保活计时器:Keeplive Timer
  4. 时间等待计时器:Timer_Wait Timer

重传计时器

大家都知道TCP是保证数据可靠传输的。怎么保证呢?带确认的重传机制。在滑动窗口协议中,接受窗口会在连续收到的包序列中的最后一个包向接收端发送一个ACK,当网络拥堵的时候,发送端的数据包和接收端的ACK包都有可能丢失。TCP为了保证数据可靠传输,就规定在重传的“时间片”到了以后,如果还没有收到对方的ACK,就重发此包,以避免陷入无限等待中。
  当TCP发送报文段时,就创建该特定报文的重传计时器。可能发生两种情况:
  1.若在计时器截止时间到之前收到了对此特定报文段的确认,则撤销此计时器。
  2.若在收到了对此特定报文段的确认之前计时器截止时间到,则重传此报文段,并将计时器复位。

持久计时器

先来考虑一下情景:
  发送端向接收端发送数据包知道接受窗口填满了,然后接受窗口告诉发送方接受窗口填满了停止发送数据。此时的状态称为“零窗口”状态,发送端和接收端窗口大小均为0.直到接受TCP发送确认并宣布一个非零的窗口大小。但这个确认会丢失。我们知道TCP中,对确认是不需要发送确认的。 若确认丢失了,接受TCP并不知道,而是会认为他已经完成了任务,并等待着发送TCP接着会发送更多的报文段。但发送TCP由于没有收到确认,就等待对方发送确认来通知窗口大小。双方的TCP都在永远的等待着对方。
  要打开这种死锁,TCP为每一个链接使用一个持久计时器。当发送TCP收到窗口大小为0的确认时,就坚持启动计时器。当坚持计时器期限到时,发送TCP就发送一个特殊的报文段,叫做探测报文。这个报文段只有一个字节的数据。他有一个序号,但他的序号永远不需要确认;甚至在计算机对其他部分的数据的确认时该序号也被忽略。探测报文段提醒接受TCP:确认已丢失,必须重传。
  坚持计时器的值设置为重传时间的数值。但是,若没有收到从接收端来的响应,则需发送另一个探测报文段,并将坚持计时器的值加倍和复位。发送端继续发送探测报文段,将坚持计时器设定的值加倍和复位,直到这个值增大到门限值(通常是60秒)为止。在这以后,发送端每个60秒就发送一个探测报文,直到窗口重新打开。

保活计时器

保活计时器使用在某些实现中,用来防止在两个TCP之间的连接出现长时间的空闲。假定客户打开了到服务器的连接,传送了一些数据,然后就保持静默了。也许这个客户出故障了。在这种情况下,这个连接将永远的处理打开状态。
  要解决这种问题,在大多数的实现中都是使服务器设置保活计时器。每当服务器收到客户的信息,就将计时器复位。
  通常设置为两小时。若服务器过了两小时还没有收到客户的信息,他就发送探测报文段。若发送了10个探测报文段(每一个相隔75秒)还没有响应,就假定客户除了故障,因而就终止了该连接。
  这种连接的断开当然不会使用四次握手,而是直接硬性的中断和客户端的TCP连接。

时间等待计时器

时间等待计时器是在四次握手(挥手)的时候使用的。四次握手的简单过程是这样的:假设客户端准备中断连接,首先向服务器端发送一个FIN的请求关闭包(FIN=final),然后由 established 过渡到FIN-WAIT1状态。服务器收到FIN包以后会发送一个ACK,然后自己有established进入CLOSE-WAIT.此时通信进入半双工状态,即留给服务器一个机会将剩余数据传递给客户端,传递完后服务器发送一个FIN+ACK的包,表示我已经发送完数据可以断开连接了,就这便进入LAST_ACK阶段。客户端收到以后,发送一个ACK表示收到并同意请求,接着由FIN-WAIT2进入TIME-WAIT阶段。服务器收到ACK,结束连接。此时(即客户端发送完ACK包之后),客户端还要等待2MSL(MSL=maxinum segment lifetime最长报文生存时间,2MSL就是两倍的MSL)才能真正的关闭连接。
  四次挥手
  附加:
  
三次握手

$(function() { setTimeout(function () { var mathcodeList = document.querySelectorAll(‘.htmledit_views img.mathcode’); if (mathcodeList.length > 0) { var testImg = new Image(); testImg.onerror = function () { mathcodeList.forEach(function (item) { $(item).before(‘\\(’ + item.alt + ‘\\)’); $(item).remove(); }) MathJax.Hub.Queue([“Typeset”,MathJax.Hub]); } testImg.src = mathcodeList[0].src; } }, 1000) })

记一次 tcpdump 抓包分析,Dup Ack 起因是 docker pull 镜像时有时卡住,然而 registry 一切正常,无奈只好一试抓包。 抓包命令 tcpdump -n -i en0 host 10.116.58.41 -w pull.pcap 参数说明: -n 不转换 ip 地址为 hostname -i 网卡 host <host> 过滤条件,抓符合 host 地址的包 -w <filename>... 阅读详情

相关推荐

TCP DUP ACK抓包分析

vm client:172.18.21.57 vm server:172.18.42.13 在 vm client 执行 wget 从 server 下载文件 并进行抓包: 分析: 1, No.50 为server发送的数据,收到了Seq=113587,Ack=660, Len=2576。 那么client回复的Ack=113587+2576=116163. 即No.51, Seq=660,Ack=116163, Len=0 2, 同时116163也是期望的下一个数据的Seq. 即收到了No.52, Se

造梦先森Kai的专栏 3万+

tcp retransmission dup ack 偶尔_TCP重传问题的排查思路与实践,有点干货

1、关于TCP重传TCP有重传是正常的机制,为了保障数据传输可靠性。只是局域网环境,网络质量有保障,因为网络问题出现重传应该极低;互联网或城域网环境,线路复杂(可以想象下城市地下管网,错综复杂的电线杆等),网络质量不好保障,重传出现概率较高。TCP有重传,也不一定是网络层面的问题。也可能是接收端不存在,接收端receive buffer满了,应用程序有异常链接未正常关闭等等等。2、TCP/IP相关...

weixin_28722991的博客 3991

TCP 报文-wireshark抓包常见提示含义解析

wireshark抓包常见提示含义解析 1.[Packet size limited during capture] 当你看到这个提示,说明被标记的那个包没有抓全。以图1的4号包为例,它全长有171字节,但只有前96个字节被抓到了,因此Wireshark给了此提示。 图1   这种情况一般是由抓包方式引起的。在有些操作系统中,tcp

Kim_Weir的专栏 4935

Wireshark 实战|TCP 重传、乱序、SACK、BBR 拥塞控制抓包分析

TCP 是互联网最核心的传输层协议,可靠性、流量控制、拥塞控制是 TCP 三大基石。在日常运维、业务性能排查、压测、网络故障定位中,Wireshark是分析 TCP 行为最强大的工具。SACK选项,就会一头雾水。很多人存在误区:只要抓包看到 TCP 重传,就直接判定网络丢包;看到乱序就认为链路质量差。实际上伪重传、伪乱序在生产环境非常普遍,ECMP 等价路由、负载均衡、网卡 TSO、抓包位置不当,都会造成 Wireshark 误标记。

Cairo_A的博客 270

Wireshare抓包分析TCP协议

Wireshare抓包分析TCP协议

qq_35337506的博客 5173

TCP报文之-tcp dup ack 、tcp Out-of-Order

使用WireShark抓包,选择TCP报文,TCP是一种安全的协议,在网络出现状况时也能安全稳定的传输数据,但是在网络出现问题时tcp报文中会有很多中情况导致报文重传或者是重组。现在就在报文中遇到的几个问题来详细说明一下。 WireShark出现的常见提示 TCP Out_of_Order的原因分析: 一般来说是网络拥塞,导致顺序包抵达时间不同,延时太长,或者包丢失,需要重新组合数据单元,因为他们可能是由不同的路径到达你的电脑上面。 TCP Retransmission原因分析: 很明显是上面的超时引发的数

9980

TCP报文( tcp dup ack 、TCP Retransmission)

TCP 报文 tcp dup ack 、TCP Retransmission,快速重传,超时重传

5万+

第44篇:网络抖动、接口偶发卡顿?抓包看懂TCP丢包重传真相

看见Retransmission直接判定链路损坏:ACK回程丢失、报文延迟同样会触发重传Duplicate ACK等同于丢包:多路径乱序也会生成重复确认报文Previous segment not captured=网络丢包:优先排查抓包内核是否丢包Zero Window故障归罪网络:本质是接收端应用消费阻塞少量重传必须优化:极低重传比例不会影响业务,无需调整链路/TCP参数仅单端抓包直接定责:单端报文存在视角偏差,两端对比才能区分去程/回程故障。

hzz812503533的博客 21

关于抓包出现TCP DUP ACK问题

 最近在跟一个CDN服务器端做对接,从CDN服务器下载内容(http),发现抓包出现非常多的Tcp Dup Ac​k异常提示。通过查阅质料得知Tcp Dup Ack xxx#y 代表了数据段丢失TCP状态,xxx代表数据丢失的位置,#后代表第几次丢失文。然后我我又再看了下报文,的确是2次数据发送到我这边,我才回复一次ack,但是这个ack回复是正确的。     对比对接其他地方的CDN的抓

伍意的博客 10万+

GD32F303实战:用定时器4触发ADC2+DMA,实现10ms精准采样1024点的完整流程

本文详细介绍了在GD32F303微控制器上使用Timer4触发ADC2配合DMA传输,实现10ms精准采样1024点的完整方案。从硬件架构设计、时钟树配置到定时器参数计算,提供了完整的工程实现流程和常见问题排查方法,适用于工业传感器监测等高实时性场景。

weixin_29194693的博客 427

不止于连接:用VS Code Remote-SSH深度开发树莓派(Ubuntu 22.04环境实战)

本文详细介绍了如何在Ubuntu 22.04环境下使用VS Code的Remote-SSH功能进行树莓派深度开发。通过SSH配置、VS Code扩展安装和远程环境优化,开发者可以在本地高效编写代码,同时在树莓派上直接运行和测试,解决性能瓶颈问题。文章还提供了高级功能如端口转发、多项目管理和远程调试的实战技巧。

didui8202的博客 349

(转)协议森林11 涅槃 (TCP重新发送)

协议森林11 涅槃 (TCP重新发送) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! TCP协议是一个可靠的协议。它通过重新发送(retransmission)来实现TCP片段传输的可靠性。简单的说,TCP会不断重复发送TCP片段,直到片段被正确接收。 TCP片段丢失 TCP头部的checksu...

849

项目计划书、规划文档模板

项目计划书、规划文档模板 最近通过项目实践经历,整理出的一套项目计划书(仅供自己参考梳理思路使用) 有喜欢的文末加VX 辛苦码字如有转载请标明出处谢谢!——木研 更新的简版项目规划文档! 原版文件请+vx :baierfa ...

weixin_43194923的博客 980

HttpClient https 请求TLS client hello 报文延时10秒发送

HttpClient https 请求TLS client hello 报文延时10秒发送

遇到对你这么好的女孩,唯有在她一丈之内。 1249

从谱峰搜索到多项式求根:Root-MUSIC算法原理与MATLAB实践

本文深入解析Root-MUSIC算法在阵列信号处理中的原理与应用,通过多项式求根替代传统MUSIC算法的谱峰搜索,显著提升计算效率和精度。文章详细介绍了算法核心思想、MATLAB实现步骤及工程优化技巧,帮助读者掌握这一高效的DOA估计方法。

weixin_30832143的博客 78

医疗信创国产化替代目前面临哪些难题?如何利用国产虚拟化技术促进医院信创建设

业务系统众多,存在大量信创改造模糊地带,既有老系统,也有新系统,故障点多,管理难度高,IT人力资源不足,其对硬件的支撑能力也提出了越来越高的要求,由此造成硬件成本、管理成本以及能耗成本都非常高。

云宏winhong的博客 2646

tcp retransmission dup ack 偶尔_TCP重传问题排查思路与实践

图 under the strange horizon by joeyjazz一 关于TCP重传TCP有重传是正常的机制,为了保障数据传输可靠性。只是局域网环境,网络质量有保障,因为网络问题出现重传应该极低;互联网或城域网环境,线路复杂(可以想象下城市地下管网,错综复杂的电线杆等),网络质量不好保障,重传出现概率较高。TCP有重传,也不一定是网络层面的问题。也可能是接收端不存在,接收...

weixin_33277412的博客 1774

TCP Analysis Flags 之 TCP Fast Retransmission

文档中关于的定义看起来简单,但实际考虑到 TCP 乱序、重传场景的复杂性,在 TCP 分析中对于是与等在一起判断标记乱序或重传类型,而在不少场景还会有判断出错的问题,当然 Wireshark 考虑到这种情况,也有手动修正的选项,这正好也侧面证明了上面的说法,关于 TCP 乱序、重传的复杂性。不是 Keep-Alive 数据包同方向 TCP 段大小大于零或设置了 SYN/FIN 标志位同方向之前下一个期望的 Seq Num 大于当前数据包的 Seq Num反方向至少有两个重复 ACK。

7ACE的博客 1408

自动驾驶感知新方案:YOLOv13多模态(RGB+LiDAR+热成像)融合实战

YOLOv13的RGB+LiDAR+热成像多模态融合方案,解决了自动驾驶感知的鲁棒性问题,通过跨模态特征互补和注意力融合,实现了复杂场景下的高精度检测。本文从架构设计、数据预处理、核心模块实现到车载部署,完成了全流程实战。动态模态权重:根据场景自动调整各模态的权重(如黑夜场景提升热成像权重);端到端3D检测:直接从原始点云与图像进行3D检测,减少预处理步骤;轻量化优化:针对车载设备进一步剪枝量化,提升推理速度。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 530

【保姆级教程】YOLOv8_Pose多目标+关键点检测:训练自己的数据集

【保姆级教程】YOLOv8_Pose多目标+关键点检测:训练自己的数据集

m0_51579041的博客 1万+

TCP 协议(五)异常报文

1.[TCP Dup ACK xxx#y](重复应答)2.[TCP Fast Retransmission](快速重传)3.[TCP Retransmission](超时重传)4.[TCP Out-Of-Order](报文乱序)5.[TCP Previous segment not captured](报文缺失)

cliffordl的专栏 2287

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

教你轻松看懂以太网报文

以太网报文分析

$好记性还是要多记录$ 2569

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

TCP连接数据包解析

TCP RETRANSMISSION和TCP DUP ACK都是为了快速恢复丢失的数据包,但TCP RETRANSMISSION是一种重传机制,而TCP DUP ACK是用于快速检测丢失的数据包。TCP DUP ACK是指TCP接收方收到了重复的ACK,这通常意味着网络中存在延迟或数据包的重新传输。DUP ACK是TCP的一种特殊类型的ACK包,用于快速检测丢失的数据包。TCP使用重复确认包来快速检测丢失的数据包,以便快速重新传输丢失的数据包并恢复丢失的数据流。: 这表示这是一个TCP的重传数据包。

qq_44390640的博客 2644

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

tcp retransmission 出现的原因_TCP重传问题的排查思路与实践,有点干货

1、关于TCP重传TCP有重传是正常的机制,为了保障数据传输可靠性。只是局域网环境,网络质量有保障,因为网络问题出现重传应该极低;互联网或城域网环境,线路复杂(可以想象下城市地下管网,错综复杂的电线杆等),网络质量不好保障,重传出现概率较高。TCP有重传,也不一定是网络层面的问题。也可能是接收端不存在,接收端receive buffer满了,应用程序有异常链接未正常关闭等等等。2、TCP/IP相关...

weixin_39638859的博客 1万+

最近ES遇到discover老是失败问题,ping主节点和node节点正常,抓包发现了大量的retransmission、tcp out of order、dup ack问题。...

最近ES遇到discover老是失败问题,ping主节点和node节点正常,抓包发现了大量的retransmission、tcp out of order、dup ack问题。 Explanation 看到其他人也遇到过:https://community.pega.com/knowledgebase/articles/troubleshooting-elasticsearch-...

djph26741的博客 1309
上一篇: 各应用/协议常用端口
下一篇: ss命令和Recv-Q和Send-Q状态
大囚长
博客等级 码龄11年 2888粉丝 908原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值