2.SYN计算方法
(1)Sequence Number
本节将分析TCP头中Sequence Number在TCP数据传输过程中的作用。
初始阶段,TCP连接刚建立时,会为后续TCP数据传输设定一个初始Sequence Number,本文用Init_Seq_NUM表示。每传送一个包含有效数据的TCP包,后续紧接着传送的TCP数据包Sequence Number会作相应的修改,如果前一个TCP包的长度为N字节,则这个包的Sequence Number为前一个包的Sequence Number加N字节。表1描述了这一过程。
表1:TCP Sequence Number在TCP数据包传输过程中的作用。
可以看出,Sequence Number是为了保证TCP数据包按序传输来设计的,可以有效地实现TCP数据的完整传送,特别是当数据传输出现错误时可以有效进行错误纠正。
(2)TCP会话文件写指针SYN计算方法
基于TCP头中的Sequence Number有一种简单而有效的TCP会话重组数据文件写指针的计算方法,在这里我们称之为SYN计算。本节将对此方法进行介绍。
在将一个TCP包的数据内容写入到重组数据文件的时候,需要两个参数:数据长度Data Length和文件写指针Write Pointer。数据长度可以很方便地从数据包的IP头中提取,难点是如何计算TCP重组数据文件写指针。根据上文介绍的Sequence Number的作用,可利用这个值来计算写指针。
①记录初始Sequence Number,该值可以从携带SYN标记的TCP包中获得。
②用当前TCP包中的Sequence Number减去初始Sequence Number,再减去1(因为TCP SYN标记需要占用一个Sequence Number),即可以得到TCP重组数据文件的写指针Write Pointer。
以上就是用来计算TCP重组数据文件写指针的SYN算法。即:
①File_Init_Write_Pointer = Init Sequence Number + 1;
②File_Write_Pointer = Current Sequence Number – File_Init_Write_Pointer。
(3)特例问题
本节分析用上述SYN算法如何实现有效处理IP数据包乱序到达和TCP数据包重传问题。
▲处理IP数据包乱序到达问题
设正确的IP数据包到达顺序应该是:P1、P2、P3,对应的Sequence Number分别是:SYN1、SYN2、SYN3,有效TCP数据的大小为Len1、Len2、Len3。
则有:SYN2 = SYN1 + LEN1,SYN3 = SYN2 + LEN2,在数据包按序到达的情况下,我们利用SYN算法可将各个TCP数据包内容正确地写入重组数据文件的对应位置。
P1:写入从SYN1-File_Init_Write_Pointer位置到SYN1-File_Init_Write_Pointer + LEN1。
P2:写入从SYN2-File_Init_Write_Pointer,即,SYN1 + LEN1 + - File_Init_Write_Pointer到SYN1 + LEN1 - File_Init_Write_Pointer + LEN2。
(责任编辑:adminadmin2008)