首页> 中国专利> 数据包序列号计算方法及数据包传输方法

数据包序列号计算方法及数据包传输方法

摘要

一种数据包序列号计算方法,用于接收端获得全头数据包的数据包序列号,包括:(1)设置滑动窗口的范围[a,b),滑动窗口的起点a为期望数据包序列号,由预设滑动窗口长度L确定滑动窗口的终点b;(2)由a的高字节和当前接收到的数据包序列号的低字节组成数据包序列号c;(3)判断是否满足a的高字节和b的高字节相同且c落在窗口之内或者a、b的高字节不相同且c落在[a,x]范围内的其中条件之一,若是,当前数据包序列号为c,否则,进行步骤(4);(4)由b的高字节和当前接收到的数据包序列号的低字节组成数据包序列号e;(5)若a、b的高字节不相同且e落在[y,b)范围内,则当前数据包序列号为e,所述x为a的高字节和低字节为0xFF组成,所述y为b的高字节和低字节为0x00组成,通过上述方法可以正确计算全头数据包的序列号。

著录项

  • 公开/公告号CN1913484A

    专利类型发明专利

  • 公开/公告日2007-02-14

    原文格式PDF

  • 申请/专利权人 大唐移动通信设备有限公司;

    申请/专利号CN200510089995.4

  • 发明设计人 王鑫;周杰;

    申请日2005-08-09

  • 分类号H04L12/56(20060101);

  • 代理机构11227 北京集佳知识产权代理有限公司;

  • 代理人胡晶;逯长明

  • 地址 100083 北京市海淀区学院路29号

  • 入库时间 2023-12-17 18:16:49

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2009-02-18

    授权

    授权

  • 2007-04-11

    实质审查的生效

    实质审查的生效

  • 2007-02-14

    公开

    公开

说明书

技术领域

本发明涉及通信领域的数据传输技术,尤其涉及移动通信中分组数据汇聚层数据传输控制技术,特别是数据传输过程中的数据包序列号提取方法及相应的PDCP(packet data convergence protocol,分组数据协议汇聚协议)层乱序情况下数据包传输方法。

背景技术

目前,对TCP/IP数据包的处理主要是以RFC2507协议为主,由于RFC2507协议采用增量压缩技术,因此接收端在解压缩时对压缩数据包的连续性要求很严格。但是由于实际的通讯环境中通常无法保证良好的无线传输条件,因此经常发生接收端接收到的数据包乱序的情况,进而影响后续的解压缩过程,从而导致整个数据通信过程的失败。

为此,在RFC2507协议中引入了压缩数据包重排序的机制。发送端在每个需要发送的数据包中增加序列号,接收端通过数据包中携带的序列来获得压缩数据包传输顺序的信息,由此保证接收端能够正确地解压缩数据包。

在RFC2507协议中,发送端经过处理的TCP/IP报流一般分为COAPRESS_TCP(压缩数据包)和FULL_HEAD(全头数据包)两种数据包类型。对于COAPRESS_TCP数据包,发送端通常用两个字节来存储数据包序列号。初始值为1,范围为1-65535。当序列号增加到65535时发生环回重新从1开始累计。而对于FULL_HEAD数据包,目前协议规定在支持重排序的条件下只有一个字节用来存储数据包序列号,考虑到数据发送的关联性选取序列号的低字节。比如,接收端期望接收到的下一个数据包序列号为0x0012,而接收端当前接收到的数据包序列号的低字节为0x12,则计算当前数据包序列号:期望数据包序列号的高字节和当前接收到的数据包序列号的低字节组成当前数据包序列号0x0012,并且设置期望接收到的下一个数据包序列号为0x0013。

但是,接收端进行数据包序列号计算过程中,需要考虑以下几个问题:

1、单字节的进位与退位情况

由于全头数据包只有一个字节用来存放数据包的序列号,在接收端用全头数据包中传输的序列号作为低字节与期望数据包序列号的高字节进行组合作为当前接收数据包的序列号时就需要考虑进位和退位的情况。例如:当前期望的数据包序列号是0x0100,收到全头数据包中携带的数据包序列号低字节为0xFF(该数据包完整的序列号为0x00FF),在不考虑高字节退位的情况下组合生成的序列号为0x01FF,这种情况就会出现序列号的计算错误。另一种情况,当前期望的数据包序列号为0x00FF,收到全头数据包中携带的数据包序列号低字节为0x01(该包数据完整的序列号为0x0101),不考虑低字节进位的情况下生成的序列号0x0001同样是错误的。

也就是说,在实际复杂的通讯环境下容易发生数据包乱序的情况,而现有的数据包序列号计算方法容易发生序列号计算出错的问题。

2、高字节的环回情况

不管是全头数据包还是压缩数据包,数据包序列号都占用两个字节,当计数器累计超过了65535的时侯会发生数据包序列号的环回情况。即,该计数器重新从1开始累计。而现有的数据包序列号计算方法不能保证能够正确获得高字节环回的数据包序列号。比如,接收端期望接收到的全头数据包的当前数据包序列号为65534(0xFFFE),而由于外界无线传输条件的影响导致后序的两个数据包传输丢失,则接收到的是数据包序列号为0002(0x0002)的数据包。由于全头数据包只能传输低字节0x02,则通过现有的数据包序列号的计算方法,得到的数据包序列号为0xFF02。很显然,这种数据包序列号计算方法得到的数据包序列号是错误的。

总之,现有的全头数据包的序列号计算方法,是将期望数据包序列号的高字节和接收到的数据包序列号的低字节组成当前接收到的全头数据包的序列号,而实际的通讯环境较为复杂,容易在数据传输过程中发生数据包乱序甚至丢包的情况,由此容易造成按照现有的全头数据包的序列号计算方法获得的全头数据包序列号错误情况发生,进而造成接收端不能正确解压缩数据包的后果。

发明内容

本发明的目的在于提供一种数据包序列号计算方法及数据包传输方法,以解决现有计算方法未考虑到数据传输过程中发生数据包乱序甚至丢包的情况,由此发生进位和退位及高字节的环回等情况,进而造成按照现有的全头数据包的序列号计算方法获得的全头数据包序列号错误的技术问题。

为了解决上述问题,本发明公开了一种数据包序列号计算方法,用于接收端获得全头数据包的数据包序列号,包括:

(1)设置滑动窗口的范围[a,b),所述滑动窗口的起点a为期望数据包序列号,由预设滑动窗口长度L确定滑动窗口的终点b;

(2)由a的高字节和当前接收到的数据包序列号的低字节组成数据包序列号c;

(3)判断是否满足条件一:a的高字节和b的高字节相同且c落在窗口之内,或者满足条件二:a,b的高字节不相同且c落在[a,x]范围内,若是,当前数据包序列号为c,否则,进行步骤(4);

(4)由b的高字节和当前接收到的数据包序列号的低字节组成数据包序列号e;

(5)若a,b的高字节不相同且e落在[y,b)范围内,则当前数据包序列号为e,所述x为a的高字节和低字节为0xFF组成,所述y为b的高字节和低字节为0x00组成。若a+L-1≥65535,则b=(a+L+1)&0xFFFF,否则b=a+L。

步骤(3)中判断条件一或者条件二是否满足具体为:判断(c-a)&0xffff>(c-b)&0xffff是否成立,若是,则条件一或者条件二成立,否则,条件一不成立且条件二也不成立。

步骤(3)判断是否满足条件一或条件二具体为:a1:若a≤c<b且(a&0xff00)=(b&0xff00)成立时,条件一成立,否则进行步骤a2;a2:当a≤c<x成立时,则条件二成立。

所述L的取值范围为0<L<128。

本发明公开了另一种数据包序列号计算方法,用于接收端获得全头数据包的数据包序列号,包括:

(1)预设滑动窗口长度L

(2)若a+L-1<=65535,则进行步骤(3),否则进行步骤(6);

(3)计算D,D为a的低字节减去当前接收数据包序列号的低字节;

(4)若D>(256-L),则低字节发生进位,所述当前数据包序列号是由(a的高字节+1)得到的高字节和当前接收到的数据包序列号的低字节组成,否则,进行步骤(5);

(5)若D<(L-256),则高字节发生退位,所述当前数据包序列号是由(a的高字节-1)得到的高字节和当前接收到的数据包序列号的低字节组成,否则,当前数据包序列号是由a的高字节和当前接收到的数据包序列号的低字节组成;

(6)若当前接收数据包的序列号的低字节大于等于a的低字节,则当前数据包序列号是由a的高字节和当前接收到的数据包序列号的低字节组成,否则,进行步骤(7);

(7)若当前接收数据包的序列号的低字节小于等于(a+L-65535)的低字节,则当前数据包序列号是高字节为0和当前接收到的数据包序列号的低字节组成,其中,a为期望数据包序列号。

当计算的当前数据包序列号不在滑动窗口内时,丢弃所述数据包,所述当前数据包序列号是否在滑动窗口是通过以下条件判断的:满足(k=ReceiveSn-a)<L且ReceiveSn>=a或者(k=ReceiveSn+65535-a)<L且ReceiveSn<a时,所述数据包序列号落在滑动窗口内,否则所述数据包序列号落在滑动窗口之外,其中ReceiveSn为收到数据包的序列号,a为期望接收到数据包的序列号,L为滑动窗口的长度。

一种数据包传输方法,包括:

(1)接收端接收数据包,判断所述数据包为压缩数据包还是全头数据包,若是压缩数据包,则提取出接收数据包序列号,若是全头数据包,则按照下述方法计算接收数据包序列号:

(b1)设置滑动窗口的范围[a,b),所述滑动窗口的起点a为期望数据包序列号,由预设滑动窗口长度L确定滑动窗口的终点b;

(b2)由a的高字节和当前接收到的数据包序列号的低字节组成数据包序列号c;

(b3)判断是否满足条件一:a的高字节和b的高字节相同且c落在窗口之内,或者满足条件二:a,b的高字节不相同且c落在[a,x]范围内,若是,当前数据包序列号为c,否则,进行步骤(b4);

(b4)由b的高字节和当前接收到的数据包序列号的低字节组成数据包序列号e;

(b5)若a,b的高字节不相同且e落在[y,b)范围内,则当前数据包序列号为e,所述x为a的高字节和低字节为0xFF组成,所述y为b的高字节和低字节为0x00组成;

(2)接收端按照数据包序列号来解压缩接收到的数据包,从而得到正确的数据流。

步骤(1)还包括:若当前接收到的数据包是期望接收到的数据包,则期望数据包序列号加1,否则,对所述数据包进行缓存,并继续接收期望接收到的数据包。若期望接收到的数据包在预设时间内未接收到,则将缓存中已经收到其后连续的数据包一并处理,并修改期望数据包序列号。

一种数据包传输方法,包括:

(1)接收端接收数据包,判断所述数据包为压缩数据包还是全头数据包,若是压缩数据包,则提取出接收数据包序列号,若是全头数据包,则按照下述方法计算接收数据包序列号:

(c1)预设滑动窗口长度L

(c2)若a+L-1<=65535,则进行步骤(c3),否则进行步骤(c6);

(c3)计算D,D为a的低字节减去当前接收数据包序列号的低字节;

(c4)若D>(256-L),则低字节发生进位,所述当前数据包序列号是由(a的高字节+1)得到的高字节和当前接收到的数据包序列号的低字节组成,否则,进行步骤(c5);

(c5)若D<(L-256),则高字节发生退位,所述当前数据包序列号是由(a的高字节-1)得到的高字节和当前接收到的数据包序列号的低字节组成,否则,当前数据包序列号是由a的高字节和当前接收到的数据包序列号的低字节组成;

(c6)若当前接收数据包的序列号的低字节大于等于a的低字节,则当前数据包序列号是由a的高字节和当前接收到的数据包序列号的低字节组成,否则,进行步骤(c7);

(c7)若当前接收数据包的序列号的低字节小于等于(a+L-65535)的低字节,则当前数据包序列号是高字节为0和当前接收到的数据包序列号的低字节组成,其中,a为期望数据包序列号;

(2)接收端按照数据包序列号来解压缩接收到的数据包,从而得到正确的数据流。

与现有技术相比,本发明具有以下优点:本发明结合滑动窗口对TCP/IP全头数据包序列号进行计算,充分考虑到进位与退位情况、高字节环回情况,由此保证全头数据包序列号计算的正确性,进而保证接收端能够正确解压缩数据包。

附图说明

图1是本发明的数据包序列号计算方法的一实施例流程图

图2是本发明的另一数据包序列号计算方法的一种实施例流程图;

图3是本发明的另一数据包序列号计算方法的第二种实施例流程图;

图4是本发明的一种数据包传输方法的流程图。

具体实施方式

以下结合附图,具体说明本发明。

本发明提供的一种数据包序列号计算方法,用于接收端获得全头数据包的数据包序列号。请参阅图1,其为数据包序列号计算方法的流程图。它包括以下步骤:

S10:设置滑动窗口的范围[a,b),所述滑动窗口的起点a为期望数据包序列号,由预设滑动窗口长度L确定滑动窗口的终点b。当a+L-1>=65535时,b=(a+L+1)&0xFFFF。因为协议中规定数据包的序列号从1开始,不能为0。当a+L-1<65535时,b=a+L。

S20:由a的高字节和当前接收到的数据包序列号的低字节组成数据包序列号c。

S30:判断是否满足条件一:a的高字节和b的高字节相同且c落在窗口之内,或者满足条件二:a,b的高字节不相同且c落在[a,x]范围内,若是,当前数据包序列号为c,否则,进行步骤S40。

步骤S30中判断条件一或条件二是否满足具体为:判断(c-a)&0xffff>(c-b)&0xffff是否成立,若是,则条件一或者条件二满足。

步骤S30判断条件一或条件二是否满足还可以通过以下方式获得:

a1:若a≤c<b且(a&0xff00)=(b&0xff00)成立时,条件一成立,否则进行步骤a2;a2:当a≤c<x成立时,则条件二成立。

S40:由b的高字节和当前接收到的数据包序列号的低字节组成数据包序列号e。

S50:若a,b的高字节不相同且e落在[y,b)范围内,则当前数据包序列号为e,所述x为a的高字节和低字节为0xFF组成,所述y为b的高字节和低字节为0x00组成。比如,判断(e-a)&0xffff>(e-b)&0xffff,若是,则a,b的高字节不相同且e落在[y,b)范围内,e即为所求的当前数据包序列号,否则,e落在窗口之外,丢弃所述数据包。

通过上述的方法,即便数据传输过程中发生数据包乱序甚至丢包的情况,也能正确获得当前数据包的序列号。

请参阅图2,其为本发明的数据包序列号计算方法的流程图。它主要用于获得全头数据包序列号,它包括以下步骤:

S110:预设滑动窗口长度L,考虑到全头数据包序列号采用单字节传输,且为了保证序列号提取的正确性,滑动窗口的长度通常为0<L<128。在接收端接收数据过程中,可以根据具体情况,调节滑动窗口长度L的大小。滑动窗口长度L越长,进行数据包序列号计算时所占用的资源越多;

S120:若(65535-a)>=(L-1),则进行步骤S130,否则进行步骤S160。当(65535-a)>=(L-1)成立,而说明当前接收的数据包序列号没有发生高字节环回,否则当前接收到的数据包序列号有可能发生高字节环回。

S130:计算D,D为a的低字节减去当前接收数据包序列号的低字节。若期望数据包序列号的低字节和当前接收到的数据包序列号的低字节相同,则说明当前接收到的数据包序列号即为期望数据包的序列号。当期望数据包序列号的低字节和当前接收到的数据包序列号的低字节不相同,则当前接收到的数据包不是当前期望接收到的数据包,就有可能发生当前接收数据包序列号的低字节发生进位或退位问题。为此,本发明通过计算的D值来判断是否存在进位或退位问题。

S140:若D>(256-L),则表明接收到数据包序列号的低字节发生进位,接收数据包序列号的高字节为a的高字节+1,否则,进行步骤S150;

S150:若D<(L-256),则表明接收到的数据包序列号的高字节发生退位,接收数据包序列号的高字节为a的高字节-1,否则,接收数据包序列号的高字节为a的高字节;

S160:若当前接收数据包的序列号的低字节大于等于a的低字节,则接收数据包序列号的高字节为a的高字节,否则,进行步骤S170;

a的低字节可以通过以下方式获得:a的低字节=a&0x00FF,a的高字节也可以通过以下方式获得:a的高字节=a&0xFF00,其中&为与运算。

S170:若当前接收数据包的序列号的低字节小于等于(a+L-65535)的低字节,则当前接收数据包序列号的高字节为0。

同样道理,(a+L-65535)的低字节可以通过以下方式获得:(a+L-65535)&0x00FF。

通过上述步骤,接收到全头数据包的数据包序列号。接收到数据包可能是期望接收到的数据包,也可能不是期望接收到的数据包。并且,还需判断当前接收数据包序列号是否落在滑动窗口内,若是,将所述数据包序列号的高字节和接收得到的数据包序列号的低字节组成当前数据包序列号,否则,丢弃所述数据包(请参阅图3)。满足(k=ReceiveSn-a)<L且ReceiveSn>=a或者满足(k=ReceiveSn+65535-a)<L且ReceiveSn<a,则所述数据包序列号落在滑动窗口内,其中ReceiveSn为收到数据包的序列号,a为期望接收到数据包的序列号,L为滑动窗口的长度。

请参阅图4,其为本发明的一种数据包传输方法的流程图。它包括:

S210:接收端接收数据包,得到数据包的序列号

接收端判断接收到的数据包为压缩数据包还是全头数据包,若是压缩数据包,则提取出接收数据包序列号,若是全头数据包,则按照下述方法计算接收数据包序列号:

(b1)设置滑动窗口的范围[a,b),所述滑动窗口的起点a为期望数据包序列号,由预设滑动窗口长度L确定滑动窗口的终点b;

(b2)由a的高字节和当前接收到的数据包序列号的低字节组成数据包序列号c;

(b3)判断是否满足条件一:a的高字节和b的高字节相同且c落在窗口之内,或者满足条件二:a,b的高字节不相同且c落在[a,x]范围内,若是,当前数据包序列号为c,否则,进行步骤(b4);

(b4)由b的高字节和当前接收到的数据包序列号的低字节组成数据包序列号e;

(b5)若a,b的高字节不相同且e落在[y,b)范围内,则当前数据包序列号为e,所述x为a的高字节和低字节为0xFF组成,所述y为b的高字节和低字节为0x00组成;

S220:接收端按照数据包序列号来解压缩接收到的数据包,从而得到正确的数据流。

另外,全头数据包还可以按照下述方法计算接收数据包序列号:

(c1)预设滑动窗口长度L

(c2)若a+L-1<=65535,则进行步骤(c3),否则进行步骤(c6);

(c3)计算D,D为a的低字节减去当前接收数据包序列号的低字节;

(c4)若D>(256-L),则低字节发生进位,所述当前数据包序列号是由(a的高字节+1)得到的高字节和当前接收到的数据包序列号的低字节组成,否则,进行步骤(c5);

(c5)若D<(L-256),则高字节发生退位,所述当前数据包序列号是由(a的高字节-1)得到的高字节和当前接收到的数据包序列号的低字节组成,否则,当前数据包序列号是由a的高字节和当前接收到的数据包序列号的低字节组成;

(c6)若当前接收数据包的序列号的低字节大于等于a的低字节,则当前数据包序列号是由a的高字节和当前接收到的数据包序列号的低字节组成,否则,进行步骤(c7);

(c7)若当前接收数据包的序列号的低字节小于等于(a+L-65535)的低字节,则当前数据包序列号是高字节为0和当前接收到的数据包序列号的低字节组成,其中,a为期望数据包序列号。

发送端发送数据包时,在每一个数据包中增加一数据包序列号。接收端接收数据包时,只有从数据包中获得序列号,才能得到数据包传输顺序信息,进而完成数据包的解压缩。

若当前接收到的数据包不是期望接收到的数据包,则对所述数据包进行缓存,并继续接收期望接收到的数据包。当前接收到的数据包序列号等于期望数据包序列号,则当前接收到的数据包是期望接收到的数据包,否则当前接收到的数据包不是期望接收到的数据包。

若期望接收到的数据包在预设时间内未接收到,则查找其后缓存中已经收到的连续数据包一并处理,并修改期望数据包序列号。比如,需要接收数据包为A2,则数据包A2未在预设时间内收到,则查找缓存器中是否有后续的数据包A3、A4、A5,若有,则处理所述数据包A3、A4、A5,并将期望数据包序列号为A5的数据包序列号加1。

若当前接收到的数据包是期望接收到的数据包,则将期望数据包序列号加1,当所述期望数据包序列号大于65535,则期望数据包序列号为1。

若当前接收到的数据包为重传数据包,则直接丢弃所述数据包。

以上公开的仅为本发明的几个具体实施例,但本发明并非局限于此,任何本领域的技术人员能思之的变化都应落在本发明的保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号