一种确定修改数据后的数据包校验和的方法.pdf

上传人:小** 文档编号:685663 上传时间:2018-03-04 格式:PDF 页数:11 大小:443.11KB
返回 下载 相关 举报
摘要
申请专利号:

CN200310125102.8

申请日:

2003.12.27

公开号:

CN1635728A

公开日:

2005.07.06

当前法律状态:

终止

有效性:

无权

法律详情:

未缴年费专利权终止IPC(主分类):H04L 1/00申请日:20031227授权公告日:20070808终止日期:20141227|||授权|||实质审查的生效|||公开

IPC分类号:

H04L1/00

主分类号:

H04L1/00

申请人:

华为技术有限公司;

发明人:

熊立群; 王亮; 古江春; 邹勇

地址:

518129广东省深圳市龙岗区坂田华为总部办公楼

优先权:

专利代理机构:

北京德琦知识产权代理有限公司

代理人:

王琦;宋志强

PDF下载: PDF下载
内容摘要

本发明公开了一种确定修改数据后的数据包校验和的方法,该方法包括:A.将该数据包中所有涉及到修改的数据段所对应的修改前数据相加,得到一个和值x;B.将该数据包中所有涉及到修改的数据段所对应的修改后数据相加,得到一个和值y;C.获取所述数据包在修改前的校验和Z;D.根据式:(M<<k)+(Z-M)-x+y的值获取修改数据后的校验和,其中,M<<k为将M左移k位,k为所述数据段的位数,M为涉及修改的数据段的个数。利用本发明所述的方法,可简化原有的确定数据修改后数据包校验和的方法,节约了处理器资源,提高了工作效率。

权利要求书

1: 一种确定修改数据后的数据包校验和的方法,其特征在于,该方法包括: A、将该数据包中所有涉及到修改的数据段所对应的修改前数据相加,得 到一个和值x; B、将该数据包中所有涉及到修改的数据段所对应的修改后数据相加,得 到一个和值y; C、获取所述数据包在修改前的校验和Z; D、根据式: (M<<k)+(Z-M)-x+y 的值获取修改数据后的校验和,其中,M<<k为将M左移k位,k为所述 数据段的位数,M为涉及修改的数据段的个数。
2: 如权利要求1所述的方法,其特征在于,步骤D中所述获取修改数据 后的数据包校验和的方法为:将[(M<<k)+(Z-M)-x+y]的值的高k 位与低k位相加,判断得到的和值是否产生了进位,如果是,则将该和值的进 位与该和值的低k位相加,将相加后的和值按位取反后,所得到的值作为修改 数据后的校验和;否则,将[(M<<k)+(Z-M)-x+y]的值的高k位与 低k位相加后的和值按位取反后,所得到的值作为修改数据后的校验和。
3: 如权利要求1所述的方法,其特征在于,所述的数据段为16位的数据 段。
4: 如权利要求3所述的方法,其特征在于,所述的和值x、和值y以及[(M <<k)+(Z-M)-x+y]的值为32位。
5: 如权利要求1所述的方法,其特征在于,所述的数据包为TCP数据包。
6: 如权利要求5所述的方法,其特征在于,所述的TCP数据包中用于确 定校验和的数据包括整个TCP数据、TCP头和伪头。
7: 如权利要求1所述的方法,其特征在于,步骤C中,所述获取修改数 据前的校验和的方式为:从校验和字段中读取修改数据前的校验和;在步骤D 之后还包括:将修改数据后的校验和存入校验和字段。
8: 如权利要求1所述的方法,其特征在于,如果所述的M未知,则将修 改前数据与修改后数据做异或运算,根据运算结果确定M的值。

说明书


一种确定修改数据后的数据包校验和的方法

    【技术领域】

    本发明涉及数据校验技术,尤其是涉及一种确定修改数据后的数据包校验和的方法。

    背景技术

    校验和是用来验证数据从源主机到目的主机的一致性的。在TCP/IP协议族中用到的都是16位的校验和,各部分的校验和有着自己的意义。在现有技术中,确定16位校验和的基本算法包括以下步骤:

    a.把所有要用来确定校验和的数据分成16位为一组地N个段,若字节数不是偶数,则增加一个字节的全0填充,此填充只是为了确定校验和,确定完毕就将其丢弃;

    b.对这N个数据段求和,得出一个可能大余16位的和值;

    c.把大于16位的进位值按上面的规则与低16位进行相加,如果又产生了进位,则再加一次;

    d.把得到的这个值按位取反,就得到的校验和的值。

    对于TCP/IP协议,TCP数据包校验和有其自己的特点,如图1所示,它在TCP头101的前面加入了一个伪头102,在确定校验和时把TCP头101、伪头102和整个TCP数据103都包括进去。

    下面举例说明现有技术所述的算法:例如确定一个TCP数据包的校验和,首先,将该TCP数据包中的数据分成16位为一组的N个数据段:A1、A2、A3、......、AN,对所述的这N个数据段求和得XY,即:A1+A2+A3+......+AN=XY,其中,X为和值的高16位,Y为和值的低16位。根据TCP协议数据包长度的规定可知:上述N个数据段的和不会超过0xFFFFFFFF,也就是说,在X前面不可能再有进位。

    将高16位的X与低16位的Y相加,这时有两种情况:

    第一种情况:X+Y=Z,这种情况中,Z之前没有进位,将Z按位取反,得到的值为校验和;

    第二种情况:X+Y=1Z,这种情况中,Z之前有进位1,所以要再把Z与进位1相加,将得到的和值按位取反后,得到的值为校验和。

    上述方法的缺点是:当TCP数据包中的数据有改动时,该改动包括伪头的中源和目的IP地址的修改,需要按上述方法重新确定一遍校验和,若数据包改动较小时也要完全按照上述方法根据所有数据重算一遍校验和,从而浪费处理器资源,导致效率低下,这种缺点在TCP数据包较长时就更加明显。

    【发明内容】

    有鉴于此,本发明的主要目的是提供一种确定修改数据后的数据包校验和的方法,从而节约处理器资源,提高工作效率。

    为了实现上述目的,本发明的技术方案具体是这样实现的:

    一种确定修改数据后的数据包校验和的方法,其特征在于,该方法包括:

    A、将该数据包中所有涉及到修改的数据段所对应的修改前数据相加,得到一个和值x;

    B、将该数据包中所有涉及到修改的数据段所对应的修改后数据相加,得到一个和值y;

    C、获取所述数据包在修改前的校验和Z;

    D、根据式:

    (M<<k)+(Z-M)-x+y

    的值获取修改数据后的校验和,其中,M<<k为将M左移k位,k为所述数据段的位数,M为涉及修改的数据段的个数。

    步骤D中所述获取修改数据后的数据包校验和的方法为:将[(M<<k)+(Z-M)-x+y]的值的高k位与低k位相加,判断得到的和值是否产生了进位,如果是,则将该和值的进位与该和值的低k位相加,将相加后的和值按位取反后,所得到的值作为修改数据后的校验和;否则,将[(M<<k)+(Z-M)-x+y]的值的高k位与低k位相加后的和值按位取反后,所得到的值作为修改数据后的校验和。

    所述的数据段为16位的数据段。

    所述的和值x、和值y以及[(M<<k)+(Z-M)-x+y]的值为32位。

    所述的数据包为TCP数据包。

    所述的TCP数据包中用于确定校验和的数据包括整个TCP数据、TCP头和伪头。

    步骤C中,所述获取修改数据前的校验和的方式为:从校验和字段中读取修改数据前的校验和;在步骤D之后还包括:将修改数据后的校验和存入校验和字段。

    如果所述的M未知,则将修改前数据与修改后数据做异或运算,根据运算结果确定M的值。

    由于本发明所述的方法在数据包修改后,不用根据整个数据包中的数据确定修改后数据包的校验和,而只根据所改动的数据以及修改前数据包的校验和来确定修改后数据包的校验和,从而大大简化了确定修改后数据包校验和的方法,大大节约了处理器资源,提高了工作效率,尤其是当所述数据包非常大时,上述效果会更加突出。

    【附图说明】

    图1为带有伪头的TCP数据包的报文格式;

    图2为本发明实施例所述方法的流程图。

    【具体实施方式】

    下面结合附图和具体实施例对本发明再作进一步详细的说明。

    在本实施例中,以TCP数据包为例来说明本发明所述的方法,如图2所示,本实施例所述的方法包括:

    A、当TCP数据包修改后,将该数据包中所有涉及到修改的数据段所对应的修改前数据相加,得到一个和值x,所述的数据段为确定数据包修改前校验和时所分成的16位数据段;

    B、将该数据包中所有涉及到修改的数据段所对应的修改后数据相加,得到一个和值y;

    C、从校验和字段中读取修改前的校验和Z;

    D、利用公式(1)取校验和来确定该TCP数据包修改后的校验和Z1:

    [(M<<16)+(Z-M)-x+y]            (1)

    式(1)中,(M<<k)表示将M左移k位;所述的M为涉及修改的16位数据段的个数,一般情况下,M是已知的,如果M未知,则将修改前的数据与修改后的数据做异或运算,根据计算结果确定M的值;所述的Z为所述数据包在修改前的校验和,利用公式(1)得到一个32位数,再将该32位数的高16位和低16位相加,判断得到的和值是否产生了进位,如果是,则将该和值的进位与该和值低16位相加,将相加后的和值按位取反后,所得到的值作为修改数据后的数据包校验和;否则,将[(M<<16)+(Z-M)-x+y]的值的高16位与低16位相加后的和值按位取反后,所得到的值作为修改数据后的数据包校验和。

    E、将修改后的校验和存入校验和字段。

    利用本发明所述方法求出的校验和与利用现有技术中所述的方法求出的校验和是相等的,下面证明本发明所述方法的正确性。

    由于把校验和的值按位取反后所得的值是唯一的,所以下面以校验和在按位取反之前的值作为校验和来说明本发明所述的方法。

    假设有一个TCP数据包的原校验和为Z,当该TCP数据包修改后,假设该数据包校验和Z1,在修改前数据包中的N个16位数据段中,假设涉及到数据修改的16位数据段在修改前的值为B1、B2、B3、......BM,其中的M为涉及修改的16位数据段的个数,这些16位数据段对应的修改后的值为C1、C2、C3、......CM。并且,所有B和C的值都是已知的,数据只做了修改,没有新增和删除。

    假设:B1+B2+B3+......+BM=x=mn,所述的x为32位的数,m为x的高16位,n为x的低16位;

    假设:C1+C2+C3+......+CM=y,所述的y为32位的数;

    假设所述的TCP数据包中没有做修改的16位数据段按位相加的和值为s=pq,所述的s为32位的数,p为s的高16位,q为s的低16位。

    因此可得,所述未修改之前的TCP数据包中所有16位数据段中数据的和值为:x+s=mn+pq,将该和值的高16位与低16位相加,得到:(m+p)+(n+q)=m+n+p+q,很明显,由于(m+n+p+q)有一个进位或者无进位都能正确地得到未修改之前的TCP数据包的校验和Z,也就是说(m+n+p+q)与未修改之前的TCP数据包的校验和Z唯一对应,通过(m+n+p+q)可以唯一获得未修改之前的TCP数据包的校验和Z。下面的论证中的情况与此相似,无论数据段的和值是否产生进位都可正确地地获得校验和,因此在整篇的论证说明中可以不考虑数据段的和值产生进位时的情况。

    类似的,可以通过(m+n)来确定x的校验和;也可以通过(p+q)来确定s的校验和。

    再确定x和s的总校验和:(m+n)+(p+q)=m+n+p+q=Z;由此可以看出:先对数据包中的一部分16位数据段以及剩余的16位数据段分别确定校验和,之后再将这两个较验和相加,得到的和值也为整个数据包的校验和。

    因此,在修改数据包之后,涉及修改的16位数据段的校验和y,与未涉及修改的16位数据段的校验和s相加,得到的和值为数据包修改后的校验和,即:

    利用s+y所得值的高16位与低16位相加,可得修改数据后的校验和Z1。

    下面证明:利用[(M<<16)+(Z-M)-x]取校验和等价于利用s取校验和。

    a、首先验证现有技术中获取校验和的等效性运算。

    例如获取TCP数据包修改前的校验和,首先,将该TCP数据包中的数据分成16位为一组的N个数据段:A1、A2、A3、......、AN,对所述的这N个数据段求和得XY,即:A1+A2+A3+......+AN=XY,其中,X为和值的高16位,Y为和值的低16位。根据TCP协议数据包长度的规定可知:上述N个数据段的和不会超过0xFFFFFFFF,也就是说,在X前面不可能再有进位。

    假设:X+Y=Z,则可以得等价运算,如式(2):

    Z=(1+X)+(Y-1)=......=(n+X)+(Y-n)      (2)

    式(2)中,n+X要保证不会造成16位和产生进位。

    下面证明在某种特殊情况下,即(Y<n)时,对于校验和的计算式(2)仍然准确,如式(3)所示:

    (n+X)+(Y-n)=X+[(Y-n)+n]=X+Y=Z         (3)

    b、在本实施例中,由校验和等价运算式(2)可以得出:

    Z=(Z-1)+1=......=(Z-M)+M              (4)

    其中,(Z-M)的值设定为二进制中的一个无符号短整型值,所以不会出现负数。由于本实施例中的校验和为16位,所以对于较验和的运算,M和M右移16位的值是等价的,也就是说根据(M<<16)+(Z-M)计算出来的校验和的值与式(4)所计算得出的值一样,同样为Z。

    x是由M个16位数据相加的和,所以该M个16位数据相加最多进位M-1,也就是说,x的高16位最大为M-1,而[(M<<16)+(Z-M)]的高16位不小于M,所以[(M<<16)+(Z-M)]大于x。利用[(M<<16)+(Z-M)-X]取校验和就等价于:M+Z-M-(m+n)=Z-m-n=p+q,而s=pq,所以,利用[(M<<16)+(Z-M)-X]取校验和就等价于利用s取校验和。

    根据上述的结论:在修改数据包之后,涉及修改的16位数据段的校验和y,与未涉及修改的16位数据段的校验和s相加,得到的和值为数据包修改后的校验和。因此,数据包修改后的校验和值Z1就等价于利用[(M<<16)+(Z-M)-X+Y]取校验和,所以可验证式(1)的正确性。

    以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉该技术的人在本发明所揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。

一种确定修改数据后的数据包校验和的方法.pdf_第1页
第1页 / 共11页
一种确定修改数据后的数据包校验和的方法.pdf_第2页
第2页 / 共11页
一种确定修改数据后的数据包校验和的方法.pdf_第3页
第3页 / 共11页
点击查看更多>>
资源描述

《一种确定修改数据后的数据包校验和的方法.pdf》由会员分享,可在线阅读,更多相关《一种确定修改数据后的数据包校验和的方法.pdf(11页珍藏版)》请在专利查询网上搜索。

本发明公开了一种确定修改数据后的数据包校验和的方法,该方法包括:A.将该数据包中所有涉及到修改的数据段所对应的修改前数据相加,得到一个和值x;B.将该数据包中所有涉及到修改的数据段所对应的修改后数据相加,得到一个和值y;C.获取所述数据包在修改前的校验和Z;D.根据式:(Mk)+(ZM)x+y的值获取修改数据后的校验和,其中,Mk为将M左移k位,k为所述数据段的位数,M为涉及修改的数据段的个数。利。

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

当前位置:首页 > 电学 > 电通信技术


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1