TCP报文( tcp dup ack 、TCP Retransmission)

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 阅读详情


最近因使用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)才能真正的关闭连接。
  四次挥手
  附加:
  
三次握手

记一次 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 报文-wireshark抓包常见提示含义解析

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

Kim_Weir的专栏 4935

TCP报文( tcp dup ack 、TCP Retransmission)

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

神棍之路 1万+

Wireshark 4.2 实战:5种TCP异常标记(Out-of-Order/Dup ACK等)的根因定位与修复

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

weixin_30381317的博客 330

关于抓包出现TCP DUP ACK问题

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

伍意的博客 10万+

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原因分析: 很明显是上面的超时引发的数

9978

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

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

849

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

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

hzz812503533的博客 21

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

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

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

STM32移植LVGL(LittleVGL)

**STM32移植LVGL(LittleVGL)**

qq_53000374的博客 1万+

缠中说禅交易指南

战胜市场,其实就是战胜自己的贪婪、恐惧、愚蠢,缠中说禅技术分析理论只是把市场拔光给各位看,而拔光一个人并不意味着就等于征服一个人,对于市场,其道理是一样的。不干,不可能征服市场。对于市场来说,干就是一切。技术分析的最终意义不是去预测市场要干什么,而是分析市场正在干什么,是一种当下的直观。在市场上所有的错误都是离开了这当下的直观,用想象、用情绪来代替。 市场是有规律的,但市场的规律并不是显而易见的,是需要严格的分析才能得到。更重要的是,市场的规律是一种动态的,在不同级别合力作用下显示出来的规律,企图用些单纯的

baidu_25764509的博客 2万+

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

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

weixin_28722991的博客 3991

【开源】基于TI ADS1299与ESP32的8通道脑电采集设备YuEEG全解析

本文详细解析了基于TI ADS1299芯片与ESP32主控的开源8通道脑电采集设备YuEEG。内容涵盖硬件设计、固件驱动开发及Python上位机软件实现,提供了从电路连接、SPI通信配置到数据读取与实时波形显示的全套教程。该项目为学习脑机接口(BCI)与高精度生物电信号采集提供了完整的开源解决方案,适合创客、学生及嵌入式开发者实践。

weixin_42576410的博客 1193

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

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

weixin_33277412的博客 1774

VINS-Fusion实战:从零搭建无人机视觉SLAM系统(附ROS配置全流程)

本文详细介绍了如何从零开始为无人机搭建基于VINS-Fusion的视觉SLAM系统。内容涵盖硬件选型(重点推荐双目相机与IMU搭配)、ROS环境配置、传感器标定、核心参数调优以及实际飞行测试与问题排解全流程,旨在帮助开发者实现稳定、精确的无人机自主定位与导航。

wasm7browser的博客 208

C#实现串口通讯程序

1、自动获取本地串口。2、根据传入串口基本属性参数打开串口。3、串口数据的发送接收功能(ASCII和HEX格式)。4、ASCII和HEX相互转换。csharp体验AI代码助手代码解读复制代码[Category("UserProperty")] [Description("轮廓半径")] public int Radius { get => radius;

2401_89221445的博客 1762

TCP Analysis Flags 之 TCP Fast Retransmission

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

7ACE的博客 1408

aruco_ros实战:从USB摄像头到Marker位姿检测全流程解析

本文详细解析了使用aruco_ros从USB摄像头实现ArUco Marker检测与位姿估计的全流程。内容涵盖环境搭建、核心launch文件配置、可视化调试、位姿数据解析以及深度优化技巧,帮助开发者快速掌握ROS下的视觉定位关键技术,并集成到机器人项目中。

weixin_29230805的博客 262

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

基于YOLOv8的野生菌菇检测、识别与分类系统

YOLOv8是YOLO系列模型的最新版本,继承了YOLO系列高效、精确的特点。YOLOv8采用了新的网络架构,并优化了推理速度和检测精度。与传统的目标检测算法(如Faster R-CNN)不同,YOLO模型通过一次前向传播同时完成目标定位与分类,因而具有非常高的计算效率。

YOLO 1273

嵌入式面经篇八——进程&线程

记录一些招聘公司在招聘嵌入式软件岗位时的一些问题,此文为第八篇。进程上文:是指进程由用户态切换到内核态时需要保存用户态时CPU寄存器中的值,进程状态以及堆栈上的内容。即保存当前进程的状态,以便再次执行该进程时,能够恢复切换时的状态,继续执行。进程下文:是指切换到内核态后执行的程序,即进程运行在内核空间的部分。中断上文:硬件通过中断触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。

明天你好的博客 1849

教你轻松看懂以太网报文

以太网报文分析

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

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

weixin_39638859的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

最近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的博客 1308

linux抓取tcp为3302的数据包,tcpdump在bond环境下抓到重复报文的问题说明

文章目录[隐藏]环境说明网络结构问题说明分析处理总结近期在排查问题时, 使用 tcpdump 抓包发现一个很奇怪的现象, 所有抓到的包都有重复的一份, 使用 wireshark 查看则表现为 tcp out of order, tcp dup ack 以及 tcp retransmission 这三种提示特别多, 如下图所示:我们在 centos 6 和 centos 7 系统中验证都有这样的问题...

weixin_28880179的博客 1477
上一篇: 算力
下一篇: JAVA 注解
ynchyong
博客等级 码龄18年 153粉丝 252原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ynchyong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值