ImageVerifierCode 换一换
格式:DOC , 页数:6 ,大小:60.50KB ,
资源ID:7335229      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-7335229.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(TCP会话重组.doc)为本站会员(ysd1539)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

TCP会话重组.doc

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营业执照举报