收藏 分享(赏)

TCP会话重组.doc

上传人:ysd1539 文档编号:7335229 上传时间:2019-05-15 格式:DOC 页数:6 大小:60.50KB
下载 相关 举报
TCP会话重组.doc_第1页
第1页 / 共6页
TCP会话重组.doc_第2页
第2页 / 共6页
TCP会话重组.doc_第3页
第3页 / 共6页
TCP会话重组.doc_第4页
第4页 / 共6页
TCP会话重组.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、TCP 重组数据包分析 参照 TCP/IP 详解第二卷 2429 章,详细论述了 TCP 协议的实现,大概总结一下 TCP 如何向应用层保证数据包的正确性、可靠性,即 TCP 如何实现对数据报文的重组。首先要设计两个报文队列,一个存放正常来到的报文,一个存放失序到来的报文。比如正常报文队列最后一个报文数据如下:报文数据段第一字节的序号 数据报长度seq1=100 len1=100下一个来到的报文可能有多种情况,现依次分析如下:1)正常报文seq2=200 len2=200seq2 = seq1+len1由此报文的 seq 可知,这个报文携带数据序号 200399,正是上一个报文的预期后续报文,

2、将此报文追加到正常报文队列。2)完全重复报文seq2=100 len2=100seq2 =seq1 而且 len2=len1这个报文携带数据序号 100199,与上一个报文携带的数据序号100199 完全一样,即完全重复,所以应该丢弃这个报文。3)重复子报文seq2=100 len2=50seq2 =seq1 而且 len2seq1 而且 seq2seq1 而且 seq2seq1+len1即这个报文携带序号 150249,这个序号段前一部分 150199 被包含在上一个报文段(100199)中,后一部分 200249 是新的数据,此时应该对这个报文作如下处理:A. 计算重复字节数(seq1+l

3、en1) - Seq2= 100+100-150 = 50即这个报文段前 50 个字节是重复的。B. 截取报文段新数据丢弃这个报文段的前 50 字节,截取后面的新数据,即只保留字节序号段200249。C. 重新设置这个报文段的 seqseq2 = seq2+50 = 150+50 = 200D. 重新设置这个报文段的数据长度len2 = len2-50 =100-50=50E. 重新设置后报文段如下seq2=200 len2=50即现在这个报文段携带数据序号 200249,正好是上一个报文的后续报文,现在可以将其作为正常报文追加到正常报文队列。6)提前到达的报文seq2=300 len2=10

4、0seq2seq1+len1这个报文段携带序号 300399 的数据,即不是上一个报文 100199 的后续报文,而是提前到来的报文,此时应该将这个报文放置到失序报文队列存储起来,以备后续重组使用。这样直到 tcp 断开这个 socket 的链接(FIN=1) ,此时将正常报文队列和失序报文队列中的数据合并起来,完成重组。如何判断一个 TCP 会话结束:count 计数器:表示当前链表中的所有 tcp 数据段数据部分的长度之和。每当在该链表中加入一个新 tcp 数据段时,将 count 累加上该 tcp 数据段的数据部分的长度。syn_seq:表示本次 tcp 连接的第一个数据包的顺序号,也就

5、是建立 tcp 连接时的第一次握手的 SYN 包的顺序号。fin_seq:表示本次 tcp 连接的最后一个数据包的顺序号,也就是关闭 tcp 连接时的第二个 FIN 包的顺序号。判断:当(fin_seq - syn_seq)与 count 相等时,就说明 tcp 数据段已经到齐,否则就是没有到齐。在以太网络环境中, 任意时刻可能同时存在成百上千的 TCP 连接. 对于一个新到达的报文, 必须尽可能快地定位并交付给对应的链接. 由于 TCP 链接数量过多,若采用线性遍历的方式会在定位 TCP 链接时浪费大量的时间, 无法满足高流量的网络环境的应用. 因此,我们使用哈希表对 TCP 链接节点进行管

6、理. 对于任意一个 TCP 链接, 都存在一个唯一的四元组 : ,以其作为参数构造 hash 函数。Hash 函数的构造是关键,下面是参考的设计方案:Hash 表采用线性最近访问优先表来处理冲突.由于 TCP 流重组要求属于同一个 TCP 连接的数据包必须映射到同一表项.mDPTSIPSIp od)(四元组标识.以上只是如何在成千上万个 TCP 会话中找到特定的一个 TCP 会话,详细流程如下:接收传输层数据包提取基本信息( 四元组 )以四元组构造 h a s h表在 h a s h 表中查找k e y 值对应的节点发现匹配是否插入匹配节点对应的会话中创建新节点 , 插入对应会话找到一个特定的

7、 TCP 会话之后,就要对单个 TCP 会话进行重组了。接收到一个属于特定会话的 T C P 数据包判断当前会话是否完成是将重组完成标志位置 1是否根据序列号判断是否是失序包根据序列号和数据段长度判断是否是重复包是根据序列号和数据段的长度进行相应字段的抛弃将当前包插入到原序列尾部按序列号对数据包进行排序将当前包 按顺序 插入到原序列否判断是否超过 T C P 会话的最大分组数 ( 考虑 时间限制 )是丢弃当前数据包 , 返回错误否否如果采用 HASH 表来管理多个 TCP 会话,其处理冲突的方式采用的是链表,对于那些失序到来的数据包,只需根据数据包的序列号在链表中进行插入处理,但对于重复的数据包(包括全部重复和部分重复的数据包) ,就需要根据序列号和数据段的长度进行数据包相应字段的抛弃。论文数据流重组中 Hash-Splay 查找算法中比较了网络数据包重组中可应用的查找算法,并提出一种 Hash-Splay 查找算法,按照论文中的说法,该算法的整体效率最高,这种算法和上述所讲的算法差别在于对特定会话的 TCP 数据段的组织不同,一个是采用链表来处理 HASH 冲突,一个是采用 Splay 树来处理 HASH 冲突。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报