TCP会话重组.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
TCP会话重组

libnids是网络安全方面的一个库,可以用来检测网络上的攻击行为。其中最有价值的部分是,它模拟了linux内核中3层和4层的协议栈。可以供我们进一步研究linux内核中的TCP/IP协议栈做一些有价值的参考。这里简单谈谈这个库中模拟3、4层协议的实现细节(在继续读下去之前,有必要复习一下TCP/IP协议相关理论,主要是滑动窗口协议)。这里送上一张网上到处都有的TCP状态转化图,算是开胃小菜: 基本概念四元组:源IP地址、目的IP地址、源端口、目的端口。五元组:源IP地址、目的IP地址、协议号、源端口、目的端口。六元组:源MAC地址、源IP地址、源端口号、目的MAC地址、目的IP地址和目的IP地址。七元组:源MAC地址、源IP地址、源端口号、目的MAC地址、目的IP地址和目的IP地址和协议号。?五元组确定一个会话还是四元组?五元组通常是指由源IP地址,源端口,目的IP地址,目的端口和传输层协议号这五个量组成的一个集合。例如:/10000/TCP/6/80就构成了一个五元组。其意义是,一个IP地址为的终端通过端口10000,利用TCP协议,和IP地址为6,端口为80的终端进行连接通讯。五元组能够唯一确定一个会话。?在TCP会话重组时,使用序列号确定TCP报文顺序可以解决数据报文不按顺序到达及其重传问题,并且利用二维链表对TCP会话就行还原。难点在于解决多连接问题、IP包乱序到达和TCP会话重传的问题。原因:TCP协议是TCP/IP协议族中一个重要组成部分,TCP数据流的重组是高层协议分析系统设计和实现的基础。TCP协议是面向连接的可靠传输协议,而TCP下层的IP协议却是面向报文的不可靠协议,这回带来问题:IP不能保证TCP报文可靠的、顺序的传输。为了解决这个问题,TCP采取滑动窗口机制、字节流编号机制和快速重传算法机制等。这可以保证数据的可靠传输。TCP会话(TCP_Session_IDT)可以通过四元组源IP地址、目的IP地址、源端口号和目的端口号唯一标识。使用HASH表快速查找定位的特征,解决多个TCP会话同时处理的问题,快速处理多个会话问题。在TCP头中Sequence Number是判断该数据包是否重传和包乱序的重要参数。在TCP连接刚建立时,会为后续TCP传输设置一个初始的SequenceNumber,每传送一个包含有效数据的TCP包,后续传送的TCP数据包的Sequence Number会作响应的修改,如果前一个包长度为N,则这个包的Sequence Number为前一个包Sequence Number加N。它是为保证TCP数据包按序传输来设计的,可以有效的实现TCP数据的完整传输,特别是当数据传输出现错误时可以有效进行错误纠正。TCP重组数据文件写指针的SYN算法如下:File_Init_Write_Pointer= Init_Sequence Number + 1;File_write_Pointer= Current Sequence Number – File_init_Write_point;检查TCP会话中是否存在空洞,可以来确定会话重组成功、失败和超时。TCP建立连接需要3次握手,而终止一个连接需要4次握手。这是因为一个TCP连接时全双工的,每个方向必须单独的进行关闭。规则1:六元组源MAC地址、源IP地址、源端口号、目的MAC地址、目的IP地址和目的IP地址,协议号是TCP,它应该是唯一的会话。规则2:TCP头中4元组syn、fin、seq、len,它应该是唯一的,不唯一说明存在重传情况。在TCP/IP协议栈中,3层对应的是IP层,4层对应TCP层,在这里,从3层到4层转化主要做了两件重要的事情:IP分片重组和TCP会话重组。本篇先分析其中TCP会话重组的部分(自顶向下嘛,哈哈)。OK,先看下重要的数据结构,在tcp.h中:[cpp] /msda/article/details/8494561view plain/msda/article/details/8494561copy/msda/article/details/8494561print/msda/article/details/8494561?struct?skbuff{???//万年不变的next和prev,这向我们昭示了这是一个双向队列。??//对于每个TCP会话(ip:端口-?-ip:端口)都要维护两个skbuf队列(每个方向都有一个嘛)??//每个skbuf对应网络上的一个IP包,TCP流就是一个接一个的IP包嘛。??struct?skbuff?*next;???struct?skbuff?*prev;????void?*data;???u_int?len;???u_int?truesize;???u_int?urg_ptr;????

文档评论(0)

sb9185sb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档