tcp重组原理_kaiser丶H的博客-程序员秘密

技术标签: 网络  网络协议  tcp/ip  

1 .引言
TCP/IP 协议现在已经广泛的被应用。数据在网络上应用 TCP/IP 协议进行传输的时候,需要将数据分成多个数据包。目前在网络安全领域都将用到 TCP 会话的重组问题。只有将数据包重组以后,才能还原一次完整的 TCP 会话。由于网络问题,数据包可能会经过不同的路由传输到目的地,并且到达目的地的数据包可能顺序会发生改变。在传输过程中,协 议对数据的传输进行控制,对在传输过程中丢失的数据包协议将控制系统将丢失的数据包重 新
传送。这些都是 TCP 会话在重组的时候将遇到的问题。本文经过对 TCP/IP 协议的分析, 解决了 TCP 会话还原过程的常见问题,并且给出了一个 TCP 会话重组的方法。

2 . TCP 会话
TCP 是一种面向连接的协议,客户与服务器之间的任何一次会话都必须建立连接 [1] , 退出会话时必须断开连接。连接的时候需要 3 个报文,断开的时候需要 4 个报文。

2.1 TCP 建立连接
一次 TCP 会话建立的时候需要 3 个报文交换,即需要 3 次握手(如图 1 )。其 SEQ 和ACK 的关系如下:
( 1 )客户发送一个 SYN 段, SYN=1 表示发起一个连接,生成随机 SEQ 。
( 2 )对方收到后将 SEQ+1 置于 ACK 发回给本机。表示对前者的确认,生成随机 SE Q发回本机。
( 3 )本机收到后将 SEQ+1 置于 ACK 发回给对方,将对方 ACK 置于 SEQ 。


2.2 TCP 数据传输
当双方建立 TCP 连接以后,就可以传输数据了,传输过程中发送方每发送一个数据包 ,接收方都要给予一个应答。数据包的先后关系可以由 TCP 首部的序号和确认序号确定。双方序号的及确认序号之间的关系为:设发送方发送的数据包长度为 N ,序号为 SEQ ,确认序号 ACK , 则下一个将要发送的数据包的序号为 SEQ+N ;接收方应答的数据包序号为 AC K ,确认序号为 SEQ+N ,表示对序号 SEQ 长度为 N 的数据包的确认。

2.3 TCP 断开连接
建立一个连接需要 3 次握手,而终止一个连接要经过 4 次握手(如图 2 )。这是因为一个 TCP 连接是全双工(即数据在两个方向上能同时传递),每个方向必须单独地进行关闭。4 次握手实际上就是双方单独关闭的过程。

3. TCP 会话的还原
3.1 SYN 的计算
在 TCP 建立连接的以后,会为后续 TCP 数据的传输设定一个初始的序列号。以后每 传送一个包含有效数据的 TCP 包,后续紧接着传送的一个 TCP 数据包的序列号都要做出相应的修改。序列号是为了保证 TCP 数据包的按顺序传输来设计的,可以有效的实现 TCP 数 据的完整传输,特别是在数据传送过程中出现错误的时候可以有效的进行错误修正。在 TCP会话的重新组合过程中我们需要按照数据包的序列号对接收到的数据包进行排序。
一台主机即将发出的报文中的 SEQ 值应等于它所刚收到的报文中的 ACK 值,而它所要发送报文中的 ACK 值应为它所收到报文中的 SEQ 值加上该报文中所发送的 TCP 数据的长度,即两者存在:
( 1 )本次发送的 SEQ= 上次收到的 ACK ;
( 2 )本次发送的 ACK= 上次收到的 SEQ+ 本次发送的 TCP 数据长度;
表 1 中 初始的序列号 Init_seq 可以从携带 SYN 标记的 TCP 包中获得。


3.2 报文的还原
以上我们讨论的内容都是针对一次 TCP 会话的情况,但是实际应用网络同时传输的数据同时来自很多机器,对应很多个不同的 TCP 会话。每个 TCP 传输的报文过程都有一个源、目的 MAC 地址、 IP 地址和端口(如图 3 ),根据这个六元组的可以确定唯一的一次 TCP 会话,因此我们建立了一个链表TCPSESSIONList ,每一个节点指向一次 TCP 会话组装链表 TCPList ,链表的表头即为六 元组。用于区分不同的 TCP 会话。其中 mac_src 表示源 MAC 地址, mac_dst 表示目的 MAC地址, ip_src 表示源 IP 地址, ip_dst 表示目的 IP 地址, th_sport 表示源端口, th_dport 表示目的端口, next 表示一个指向下个 TCP 会话接点的指针, tcplisthead 表示一个指向 TCPLi头节点的指针。一个报文节点是一个 7 元组(如图 4 ),包括: IP 首部标志位 syn 和 fin 分别用来表示会话的开始和结束; seq 表示数据包序列号; len 表示数据包的长度; prev 指向上一个 TCPLi节点的指针,首节点时为空, next 指向下一个 TCPList 节点的指针,尾节点时为空, data 为传输的 TCP 数据。显然对于一个完整的报文,重装链表的第一个包的 syn 为 1 ,最后一个 包
的 fin 为 1 ,且所有节点的 seq 应该是连续的,计算方法可以按照 3.1 节中所给的方法进行计算。



数据结构如下:
typedef struct TCPSESSION{
unsigned char mac_src[6]?
unsigned char mac_dst[6]?
long ip_src?
long ip_dst?
unsigned short th_sport?
unsigned short th_dport?
struct TCPSESSION* next?
TCPNODE tcplisthead?
}
typedef struct TCPNODE{
int syn?
int fin?
unsigned long seq?
int len?
struct TCPNODE *prev?
struct TCPNODE *next?
unsigned char data[MAXETHERLEN]?
}
数据在传输的过程中,可能由于路由,数据校验错误等网络原因,会导致数据包的乱序或重传。因此我们建立一个二维链表用来对众多的 TCP 进行管理(如图 5 )。TCP 会话的重组过程实际上就是对链表的插入和删除的过程。针对每一次 TCP 会话建立一个 TCPSESSION ,以后每当捕获一个数据包以后首先检查此数据包所属的 TCP 会话是否已经在链表中存在,如果存在找到相应的 TCP 会话过程,根据序列号将其插入到适当的位置。如果所属的 TCP 会话不在链表中,则新建立一个 TCPSESSION 节点插入到链表的尾部。在此过程中,如果一个数据包与链表中某一个数据包的序列号和数据长度相同的话, 则说明是重发包,做丢弃处理。最后链表的每一个数据包序列号连续,且第一个数据包为 SYN包,最后一个数据包为 FIN 包(或是连接复位包 RST ),此时认为报文是完整的。程序流程图如图 6 。



4. 结束语
网络传输数据时,传输到目的主机的数据包是通过 TCP/IP 协议实现报文的还原,我们利用这一原理实现了网络数据传输中的 TCP 会话的还原问题。经过测试我们发现,利用二维链表可以快速有效的处理还原多个 TCP 会话,利用序列号能够准确的确定 TCP 数据包的位置,并且可以有效的解决 IP 数据包乱序和 TCP 数据包的重传问题。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36191395/article/details/122578664

智能推荐

The following method did not exist (maven依赖冲突解决全记录)_the following method did not exist:_终成一个大象的博客-程序员秘密

jar包依赖冲突全记录2、下载Maven Helper打开IDEA项目配置,下载Maven Helper插件从错误日志我们可以看到guava这个jar包出现问题打开pom文件分析maven依赖冲突从上图可以得到的信息:从下面这张图,我们可以把问题看的更清楚。升级jar包版本至30.1-jre即可。还有一种情况时,高版本的jar包不兼容低版本的jar包,这种情况以后碰到会总结过来。...

软件安全开发(3)_李慕忱LiMuC的博客-程序员秘密

安全编码原则 了解验证输入、避免缓冲区溢出、程序内部安全、安全调用组件、禁用有风险的函数等通用安全编程准则 了解相关的安全编码标准及建议 理解常见的代码安全问题及处置方式代码安全编译 了解代码编译需要关注的安全因素代码安全审核 理解代码审查的目的 了解常见源代码静态分析工具及方法对所有输入数据进行检查、验证及过滤 应用软件的“数据防火墙”避免恶意数据进入什么时候验证 最初接收数据时 (第一次)使用数据时命令行 参数...

域名过期了,但是备案信息还是我的,网站被人举报涉黄怎么办?_域名过期了被别人拿去做违法_白菜1031的博客-程序员秘密

一、名下闲置域名被举报涉黄2020年12月3日,宁静祥和的下午,正在按部就班地敲着代码,突然被一通电话打乱了思绪。电话里说是XX市委网信办的,说我名下有个域名 ws65535.xyz 被人举报包含色情内容。最初我以为是骗子(最近一段时间冒充公安机关进行诈骗的案例比较多,家人和同事都曾经接到过自称派出所的诈骗电话)。我说这个域名我注册之后就没有使用过,怎么可能被举报。对方说明确实是被举报了,而且还有截图证据,并提出要加微信详谈。我将信将疑地加了对方微信,对方发给我这样一张截图:当时这个网站(www

oracle-01122,记一次ORA-01122/ORA-01110/ORA-01200错误_张涵赫的博客-程序员秘密

SQL> startupORACLE instance started.Total System Global Area 213909504 bytesFixed Size 1266656 bytesVariable Size 159386656 bytesDatabase Buffers 50331648 by...

常见端口及安全测试_FLy_鹏程万里的博客-程序员秘密

在渗透测试中,端口扫描是一个非常重要的环节,端口扫描的目的是了解服务器上运行的服务信息,针对不同的端口进行不同的安全测试,本文的主要内容是关于常见端口安全隐患以及测试方法。DNS(53)UDPDNS是域名系统(DomainNameSystem)的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务。测试内容配置漏洞之DNS域传送针对dns的拒绝服务攻击枚举二级域名,泄漏域名信息针对不同版本的d...

android 应用开发-实现简单的音乐播放功能_岁月流逝丶的博客-程序员秘密

结合百度搜到的,自己再优化深入,终于实现,结合网上搜的其他大神写的地址找不到逻辑思路:1.书写aidl接口2.绑定service服务3.activity实现业务逻辑上干货不废话:IServicePlayer.aidl interface IServicePlayer { void play(); void pause(); voi

随便推点

NodeJS和ReactJS,VUEJS的关系_vue和react和nodejs哪个_myKurt的博客-程序员秘密

【前端神秘的面纱】对后端开发来说,前端是神秘的,眼花缭乱的技术,繁多的框架,如果你还停留在前端等于只用jquery做开发,那么你out了,本文从Java的角度简述下目前前端流行的一些框架。水平有限,欢迎指正。【nodejs】官网:https://nodejs.org/简介:对前端来说极其重要的一个“框架”,简直可以说是开天辟地类比Java中:JVM详述:就前端来说nodejs具有划时代的意义,做前...

【Fiddler】Mac下Fiddler的安装与使用?_fiddler classic官网下载mac_SANZ1991的博客-程序员秘密

MAC OS下Fiddler的安装与使用首先Fiddler的使用需要依赖.NET FRAMEWORK.众所周知,这是微软公司的,MAC上有一个MONO可以作为替代方案(其实已被微软收购了)。1、安装MONO(不详细说了,直接百度)http://www.mono-project.com/download/#download-mac2、然后执行以下命令(如果不知道MONO的版本,可以使用查找命...

‘NODE_ENV‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件_node_env不是内部或外部命令_CreatiZ的博客-程序员秘密

最近在配置package.json中的生产环境命令和开发环境的命令后,运行npm run dev 出现’NODE_ENV’ 不是内部或外部命令,也不是可运行的程序或批处理文件。此时有两种解决方法:1.在NODE_ENV=xxxxxxx前面添加set,如:但是这个方法只可以保证我运行npm run dev后不出错,却无法启动本地服务2.安装cross-env:npm install cross-env –-save-dev(如果还不行就npm install cross-env),再在NODE_EN

分布式网站架构后续:zookeeper技术浅析_Lnho的博客-程序员秘密

Zookeeper是hadoop的一个子项目,虽然源自hadoop,但是我发现zookeeper脱离hadoop的范畴开发分布式框架的运用越来越多。今天我想谈谈zookeeper,本文不谈如何使用zookeeper,而是zookeeper到底有哪些实际的运用,哪些类型的应用能发挥zookeeper的优势,最后谈谈zookeeper对分布式网站架构能产生怎样的作用。  Zookeeper是针对大型分布

微服务架构设计模式 读书笔记一_重露成涓滴的博客-程序员秘密

作者:[美] 克里斯·理查森(Chris Richardson)是Java社区的著名布道师、JavaOne等知名技术大会的常年主讲人,也是《POJOs in Action》(中文名《用轻量级框架开发企业应用》)一书的作者。微服务领域公认的思想领袖,并定期在国际会议上发表演讲。https://microservices.io的创建者,该网站专注于提供微服务架构模式语言。还包含指向其他资源(如文章、演示文稿和示例代码)的链接什么是微服务?微服务-也称为微服务架构,是一种架构方式,可将应用程序构造为.

推荐文章

热门文章

相关标签