当前位置: 首页 > news >正文

Security ❀ TCP异常报文详解

文章目录

  • 1. TCP Out-Of-Order
  • 2. TCP Previous Segment Lost
  • 3. TCP Retransmission
  • 4. TCP Dup Ack XXX#X
  • 5. TCP Windows Update
  • 6. TCP Previous segment not captured
  • 7. 异常案例分析

TCP协议中seq和ack seq的联系:
在这里插入图片描述
id=4的http请求报文由客户端发向服务器,其TCP协议内seq(由wireshark定义)=1,真实seq=2387613954(十六进制为0x8E501902),ack(由wireshark定义)=1,真实ack=3344080265(十六进制为0xC7529D89),客户端发送的下一个报文的seq=135(len+seq 134+1=135);
在这里插入图片描述
id=5的http响应报文由服务器向客户端返回,其TCP协议内seq=1(服务器与客户端拥有不同的序列号机制,两者互不冲突),真实seq=3344080265(十六进制为0xC7529D89,为请求报文中的真实ack的值),ack=135(客户端报文中的len+seq 134+1=135,这个 1 来自客户端序列号并非服务器序列号),真实ack=2387614088(十六进制为0x8E501988,计算方法:2387613954+134=2387614088,转为十六进制即可为0x8E501988),服务器发送的下一个报文的seq=1。


接下来分享几个常见数传异常报文:

1. TCP Out-Of-Order

Out-of-order是一种乱序报文,若报文中没有携带续期的序列号就会出现异常报文。在同一个TCP连接上,相同SIP发出的后一个TCP报文中的序列号不等于前一个报文的序列号加上前一个报文的报文长度。
Out-of-order主要是指实际收到的报文序列号小于预期报文的序列号,此类型会与TCP Dup Ack异常类型同时出现,因为没有接收到预期的序列号,就会再次发送Ack请求预期的正确序列号报文。
故障原因:中间网络节点之间发生功能紊乱,转发或者发送了异常报文;对端发送了乱序报文。

2. TCP Previous Segment Lost

Previous Segment Lost也是一种TCP报文乱序。此乱序报文主要指实际收到的报文序列号大于预期序列号,或者说实际上在收到这个报文之前还应该收到一个或多个报文,但没有收到。

3. TCP Retransmission

Retransmission代表TCP重传报文,是指具有相同TCP序列号的报文至少两次或多次经过,重传报文是一种很常见的影响数据传输速率的异常报文。
故障原因

  • 两台终端之间的其他网络节点发生功能紊乱,存在丢包,造成对端未收到相应序列号的报文或本端未收到对端的回复报文(建议检查防火墙,网流分析、信安系统、Ddos等安全设备);
  • 对端未正常发送确认报文,对端功能紊乱(多为安全软件或网卡校验功能造成);
  • 本端收到确认报文,但没有正常处理(建议检查安全软件,网卡设置等)。

4. TCP Dup Ack XXX#X

#号前面的 XXX 意为报文到那个序号(id)丢失;# 号后面的 X 意为第几次丢失。

TCP报文中的Ack字段是对预期达到的下一个报文的序列号,而看到Dup Ack则说明由于某些原因Dup Ack发起方没有收到预期序列号的报文,从而发送Dup Ack再次请求预期数据报文,直到收到预期报文,才会停止发送Dup Ack报文。
遇到此类报文很可能是因为两台终端之间设备有丢包,可能是防火墙或者安全设备将数据包丢弃造成,建议在两台终端之间的其他网络设备进行抓包对比,以确定异常位置。

5. TCP Windows Update

Windows Update表明更改滑动窗口大小,可能变大也可能变小,跟TCP连接上层应用对接收到的报文数据处理速度有关,此报文并不代表一定有异常。

6. TCP Previous segment not captured

报文没有捕捉到,出现报文丢失。

7. 异常案例分析

以下面的报文过程进行案例说明:
在这里插入图片描述
id=1221,seq=8321,ack=18292,len=0的报文下一条应该为seq=18292,ack=8321,但是此时在id=1230处出现了丢失现象,TCP丢失报文seq=27392,ack=8321。
因此在id=1232与id=1238之间的报文都是为了补全seq=18292到27392的数据内容。
在这里插入图片描述
id=1439显示报文丢失,seq=53800,ack=9765
而id=1438的报文seq=52100,ack=9765,len=1300
所以id=1439的seq应该是52100+1300=52500,而id=1439的报文中seq=53800,显然出现了丢包情况,在id=1440重新补全seq=52500-53800的数据内容。

在这里插入图片描述
在id=1587的时候出现了丢包现象,未收到之前的数据包,因此需要进行重传或者重组。
id=1586的时报文ack=211249,也就是说下次收到的服务侧报文seq=211249,结果id=1587的seq=212261,说明服务侧收到过客户端数据包ack=212261的报文,因此丢失了上一个数据包。

相关文章:

  • 【JavaEE进阶】 图书管理系统开发日记——肆
  • git的分支的使用,创建分支,合并分支,删除分支,合并冲突,分支管理策略,bug分支,强制删除分支
  • 字面跳动前端面试题:React Hook为什么不能放在if/循环/嵌套函数里面?
  • js数组和字符串之间的转换方式以及数组的一些方法
  • 51单片机实验课二
  • 二、人工智能之提示工程(Prompt Engineering)
  • JAVA中枚举的方法
  • Java基础 集合(二)List详解
  • 【CSS + ElementUI】更改 el-carousel 指示器样式且隐藏左右箭头
  • Qt应用软件【数据篇】大小端数据转换
  • Linux进程信号处理:深入理解与应用(2​​)
  • 【Tomcat与网络6】 Tomcat是如何扩展Java线程池的?
  • Python flask 模板详解
  • 物流平台架构设计与实践
  • Node.js的安装
  • 深入了解以太坊
  • 【5+】跨webview多页面 触发事件(二)
  • express.js的介绍及使用
  • gcc介绍及安装
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • nodejs实现webservice问题总结
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • PHP的类修饰符与访问修饰符
  • React系列之 Redux 架构模式
  • 半理解系列--Promise的进化史
  • 测试开发系类之接口自动化测试
  • 从0实现一个tiny react(三)生命周期
  • 京东美团研发面经
  • 经典排序算法及其 Java 实现
  • 那些年我们用过的显示性能指标
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 突破自己的技术思维
  • 新书推荐|Windows黑客编程技术详解
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • ###C语言程序设计-----C语言学习(6)#
  • #WEB前端(HTML属性)
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (175)FPGA门控时钟技术
  • (HAL库版)freeRTOS移植STMF103
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (八)c52学习之旅-中断实验
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET HttpWebRequest、WebClient、HttpClient
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET使用存储过程实现对数据库的增删改查
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @AliasFor注解
  • @Bean有哪些属性
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录