專利名稱:一種確定修改數(shù)據(jù)后的數(shù)據(jù)包校驗和的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)校驗技術(shù),尤其是涉及一種確定修改數(shù)據(jù)后的數(shù)據(jù)包校驗和的方法。
背景技術(shù):
校驗和是用來驗證數(shù)據(jù)從源主機(jī)到目的主機(jī)的一致性的。在TCP/IP協(xié)議族中用到的都是16位的校驗和,各部分的校驗和有著自己的意義。在現(xiàn)有技術(shù)中,確定16位校驗和的基本算法包括以下步驟a.把所有要用來確定校驗和的數(shù)據(jù)分成16位為一組的N個段,若字節(jié)數(shù)不是偶數(shù),則增加一個字節(jié)的全0填充,此填充只是為了確定校驗和,確定完畢就將其丟棄;b.對這N個數(shù)據(jù)段求和,得出一個可能大余16位的和值;c.把大于16位的進(jìn)位值按上面的規(guī)則與低16位進(jìn)行相加,如果又產(chǎn)生了進(jìn)位,則再加一次;d.把得到的這個值按位取反,就得到的校驗和的值。
對于TCP/IP協(xié)議,TCP數(shù)據(jù)包校驗和有其自己的特點,如圖1所示,它在TCP頭101的前面加入了一個偽頭102,在確定校驗和時把TCP頭101、偽頭102和整個TCP數(shù)據(jù)103都包括進(jìn)去。
下面舉例說明現(xiàn)有技術(shù)所述的算法例如確定一個TCP數(shù)據(jù)包的校驗和,首先,將該TCP數(shù)據(jù)包中的數(shù)據(jù)分成16位為一組的N個數(shù)據(jù)段A1、A2、A3、......、AN,對所述的這N個數(shù)據(jù)段求和得XY,即A1+A2+A3+......+AN=XY,其中,X為和值的高16位,Y為和值的低16位。根據(jù)TCP協(xié)議數(shù)據(jù)包長度的規(guī)定可知上述N個數(shù)據(jù)段的和不會超過0xFFFFFFFF,也就是說,在X前面不可能再有進(jìn)位。
將高16位的X與低16位的Y相加,這時有兩種情況第一種情況X+Y=Z,這種情況中,Z之前沒有進(jìn)位,將Z按位取反,得到的值為校驗和;第二種情況X+Y=1Z,這種情況中,Z之前有進(jìn)位1,所以要再把Z與進(jìn)位1相加,將得到的和值按位取反后,得到的值為校驗和。
上述方法的缺點是當(dāng)TCP數(shù)據(jù)包中的數(shù)據(jù)有改動時,該改動包括偽頭的中源和目的IP地址的修改,需要按上述方法重新確定一遍校驗和,若數(shù)據(jù)包改動較小時也要完全按照上述方法根據(jù)所有數(shù)據(jù)重算一遍校驗和,從而浪費處理器資源,導(dǎo)致效率低下,這種缺點在TCP數(shù)據(jù)包較長時就更加明顯。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的是提供一種確定修改數(shù)據(jù)后的數(shù)據(jù)包校驗和的方法,從而節(jié)約處理器資源,提高工作效率。
為了實現(xiàn)上述目的,本發(fā)明的技術(shù)方案具體是這樣實現(xiàn)的一種確定修改數(shù)據(jù)后的數(shù)據(jù)包校驗和的方法,其特征在于,該方法包括A、將該數(shù)據(jù)包中所有涉及到修改的數(shù)據(jù)段所對應(yīng)的修改前數(shù)據(jù)相加,得到一個和值x;B、將該數(shù)據(jù)包中所有涉及到修改的數(shù)據(jù)段所對應(yīng)的修改后數(shù)據(jù)相加,得到一個和值y;C、獲取所述數(shù)據(jù)包在修改前的校驗和Z;D、根據(jù)式(M<<k)+(Z-M)-x+y的值獲取修改數(shù)據(jù)后的校驗和,其中,M<<k為將M左移k位,k為所述數(shù)據(jù)段的位數(shù),M為涉及修改的數(shù)據(jù)段的個數(shù)。
步驟D中所述獲取修改數(shù)據(jù)后的數(shù)據(jù)包校驗和的方法為將[(M<<k)+(Z-M)-x+y]的值的高k位與低k位相加,判斷得到的和值是否產(chǎn)生了進(jìn)位,如果是,則將該和值的進(jìn)位與該和值的低k位相加,將相加后的和值按位取反后,所得到的值作為修改數(shù)據(jù)后的校驗和;否則,將[(M<<k)+(Z-M)-x+y]的值的高k位與低k位相加后的和值按位取反后,所得到的值作為修改數(shù)據(jù)后的校驗和。
所述的數(shù)據(jù)段為16位的數(shù)據(jù)段。
所述的和值x、和值y以及[(M<<k)+(Z-M)-x+y]的值為32位。
所述的數(shù)據(jù)包為TCP數(shù)據(jù)包。
所述的TCP數(shù)據(jù)包中用于確定校驗和的數(shù)據(jù)包括整個TCP數(shù)據(jù)、TCP頭和偽頭。
步驟C中,所述獲取修改數(shù)據(jù)前的校驗和的方式為從校驗和字段中讀取修改數(shù)據(jù)前的校驗和;在步驟D之后還包括將修改數(shù)據(jù)后的校驗和存入校驗和字段。
如果所述的M未知,則將修改前數(shù)據(jù)與修改后數(shù)據(jù)做異或運算,根據(jù)運算結(jié)果確定M的值。
由于本發(fā)明所述的方法在數(shù)據(jù)包修改后,不用根據(jù)整個數(shù)據(jù)包中的數(shù)據(jù)確定修改后數(shù)據(jù)包的校驗和,而只根據(jù)所改動的數(shù)據(jù)以及修改前數(shù)據(jù)包的校驗和來確定修改后數(shù)據(jù)包的校驗和,從而大大簡化了確定修改后數(shù)據(jù)包校驗和的方法,大大節(jié)約了處理器資源,提高了工作效率,尤其是當(dāng)所述數(shù)據(jù)包非常大時,上述效果會更加突出。
圖1為帶有偽頭的TCP數(shù)據(jù)包的報文格式;圖2為本發(fā)明實施例所述方法的流程圖。
具體實施例方式
下面結(jié)合附圖和具體實施例對本發(fā)明再作進(jìn)一步詳細(xì)的說明。
在本實施例中,以TCP數(shù)據(jù)包為例來說明本發(fā)明所述的方法,如圖2所示,本實施例所述的方法包括A、當(dāng)TCP數(shù)據(jù)包修改后,將該數(shù)據(jù)包中所有涉及到修改的數(shù)據(jù)段所對應(yīng)的修改前數(shù)據(jù)相加,得到一個和值x,所述的數(shù)據(jù)段為確定數(shù)據(jù)包修改前校驗和時所分成的16位數(shù)據(jù)段;B、將該數(shù)據(jù)包中所有涉及到修改的數(shù)據(jù)段所對應(yīng)的修改后數(shù)據(jù)相加,得到一個和值y;C、從校驗和字段中讀取修改前的校驗和Z;D、利用公式(1)取校驗和來確定該TCP數(shù)據(jù)包修改后的校驗和Z1[(M<<16)+(Z-M)-x+y](1)式(1)中,(M<<k)表示將M左移k位;所述的M為涉及修改的16位數(shù)據(jù)段的個數(shù),一般情況下,M是已知的,如果M未知,則將修改前的數(shù)據(jù)與修改后的數(shù)據(jù)做異或運算,根據(jù)計算結(jié)果確定M的值;所述的Z為所述數(shù)據(jù)包在修改前的校驗和,利用公式(1)得到一個32位數(shù),再將該32位數(shù)的高16位和低16位相加,判斷得到的和值是否產(chǎn)生了進(jìn)位,如果是,則將該和值的進(jìn)位與該和值低16位相加,將相加后的和值按位取反后,所得到的值作為修改數(shù)據(jù)后的數(shù)據(jù)包校驗和;否則,將[(M<<16)+(Z-M)-x+y]的值的高16位與低16位相加后的和值按位取反后,所得到的值作為修改數(shù)據(jù)后的數(shù)據(jù)包校驗和。
E、將修改后的校驗和存入校驗和字段。
利用本發(fā)明所述方法求出的校驗和與利用現(xiàn)有技術(shù)中所述的方法求出的校驗和是相等的,下面證明本發(fā)明所述方法的正確性。
由于把校驗和的值按位取反后所得的值是唯一的,所以下面以校驗和在按位取反之前的值作為校驗和來說明本發(fā)明所述的方法。
假設(shè)有一個TCP數(shù)據(jù)包的原校驗和為Z,當(dāng)該TCP數(shù)據(jù)包修改后,假設(shè)該數(shù)據(jù)包校驗和Z1,在修改前數(shù)據(jù)包中的N個16位數(shù)據(jù)段中,假設(shè)涉及到數(shù)據(jù)修改的16位數(shù)據(jù)段在修改前的值為B1、B2、B3、......BM,其中的M為涉及修改的16位數(shù)據(jù)段的個數(shù),這些16位數(shù)據(jù)段對應(yīng)的修改后的值為C1、C2、C3、......CM。并且,所有B和C的值都是已知的,數(shù)據(jù)只做了修改,沒有新增和刪除。
假設(shè)B1+B2+B3+......+BM=x=mn,所述的x為32位的數(shù),m為x的高16位,n為x的低16位;假設(shè)C1+C2+C3+......+CM=y(tǒng),所述的y為32位的數(shù);假設(shè)所述的TCP數(shù)據(jù)包中沒有做修改的16位數(shù)據(jù)段按位相加的和值為s=pq,所述的s為32位的數(shù),p為s的高16位,q為s的低16位。
因此可得,所述未修改之前的TCP數(shù)據(jù)包中所有16位數(shù)據(jù)段中數(shù)據(jù)的和值為x+s=mn+pq,將該和值的高16位與低16位相加,得到(m+p)+(n+q)=m+n+p+q,很明顯,由于(m+n+p+q)有一個進(jìn)位或者無進(jìn)位都能正確地得到未修改之前的TCP數(shù)據(jù)包的校驗和Z,也就是說(m+n+p+q)與未修改之前的TCP數(shù)據(jù)包的校驗和Z唯一對應(yīng),通過(m+n+p+q)可以唯一獲得未修改之前的TCP數(shù)據(jù)包的校驗和Z。下面的論證中的情況與此相似,無論數(shù)據(jù)段的和值是否產(chǎn)生進(jìn)位都可正確地地獲得校驗和,因此在整篇的論證說明中可以不考慮數(shù)據(jù)段的和值產(chǎn)生進(jìn)位時的情況。
類似的,可以通過(m+n)來確定x的校驗和;也可以通過(p+q)來確定s的校驗和。
再確定x和s的總校驗和(m+n)+(p+q)=m+n+p+q=Z;由此可以看出先對數(shù)據(jù)包中的一部分16位數(shù)據(jù)段以及剩余的16位數(shù)據(jù)段分別確定校驗和,之后再將這兩個較驗和相加,得到的和值也為整個數(shù)據(jù)包的校驗和。
因此,在修改數(shù)據(jù)包之后,涉及修改的16位數(shù)據(jù)段的校驗和y,與未涉及修改的16位數(shù)據(jù)段的校驗和s相加,得到的和值為數(shù)據(jù)包修改后的校驗和,即利用s+y所得值的高16位與低16位相加,可得修改數(shù)據(jù)后的校驗和Z1。
下面證明利用[(M<<16)+(Z-M)-x]取校驗和等價于利用s取校驗和。
a、首先驗證現(xiàn)有技術(shù)中獲取校驗和的等效性運算。
例如獲取TCP數(shù)據(jù)包修改前的校驗和,首先,將該TCP數(shù)據(jù)包中的數(shù)據(jù)分成16位為一組的N個數(shù)據(jù)段A1、A2、A3、......、AN,對所述的這N個數(shù)據(jù)段求和得XY,即A1+A2+A3+......+AN=XY,其中,X為和值的高16位,Y為和值的低16位。根據(jù)TCP協(xié)議數(shù)據(jù)包長度的規(guī)定可知上述N個數(shù)據(jù)段的和不會超過0xFFFFFFFF,也就是說,在X前面不可能再有進(jìn)位。
假設(shè)X+Y=Z,則可以得等價運算,如式(2)Z=(1+X)+(Y-1)=......=(n+X)+(Y-n) (2)式(2)中,n+X要保證不會造成16位和產(chǎn)生進(jìn)位。
下面證明在某種特殊情況下,即(Y<n)時,對于校驗和的計算式(2)仍然準(zhǔn)確,如式(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)的值設(shè)定為二進(jìn)制中的一個無符號短整型值,所以不會出現(xiàn)負(fù)數(shù)。由于本實施例中的校驗和為16位,所以對于較驗和的運算,M和M右移16位的值是等價的,也就是說根據(jù)(M<<16)+(Z-M)計算出來的校驗和的值與式(4)所計算得出的值一樣,同樣為Z。
x是由M個16位數(shù)據(jù)相加的和,所以該M個16位數(shù)據(jù)相加最多進(jìn)位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取校驗和。
根據(jù)上述的結(jié)論在修改數(shù)據(jù)包之后,涉及修改的16位數(shù)據(jù)段的校驗和y,與未涉及修改的16位數(shù)據(jù)段的校驗和s相加,得到的和值為數(shù)據(jù)包修改后的校驗和。因此,數(shù)據(jù)包修改后的校驗和值Z1就等價于利用[(M<<16)+(Z-M)-X+Y]取校驗和,所以可驗證式(1)的正確性。
以上所述,僅為本發(fā)明較佳的具體實施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉該技術(shù)的人在本發(fā)明所揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種確定修改數(shù)據(jù)后的數(shù)據(jù)包校驗和的方法,其特征在于,該方法包括A、將該數(shù)據(jù)包中所有涉及到修改的數(shù)據(jù)段所對應(yīng)的修改前數(shù)據(jù)相加,得到一個和值x;B、將該數(shù)據(jù)包中所有涉及到修改的數(shù)據(jù)段所對應(yīng)的修改后數(shù)據(jù)相加,得到一個和值y;C、獲取所述數(shù)據(jù)包在修改前的校驗和Z;D、根據(jù)式(M<<k)+(Z-M)-x+y的值獲取修改數(shù)據(jù)后的校驗和,其中,M<<k為將M左移k位,k為所述數(shù)據(jù)段的位數(shù),M為涉及修改的數(shù)據(jù)段的個數(shù)。
2.如權(quán)利要求1所述的方法,其特征在于,步驟D中所述獲取修改數(shù)據(jù)后的數(shù)據(jù)包校驗和的方法為將[(M<<k)+(Z-M)-x+y]的值的高k位與低k位相加,判斷得到的和值是否產(chǎn)生了進(jìn)位,如果是,則將該和值的進(jìn)位與該和值的低k位相加,將相加后的和值按位取反后,所得到的值作為修改數(shù)據(jù)后的校驗和;否則,將[(M<<k)+(Z-M)-x+y]的值的高k位與低k位相加后的和值按位取反后,所得到的值作為修改數(shù)據(jù)后的校驗和。
3.如權(quán)利要求1所述的方法,其特征在于,所述的數(shù)據(jù)段為16位的數(shù)據(jù)段。
4.如權(quán)利要求3所述的方法,其特征在于,所述的和值x、和值y以及[(M<<k)+(Z-M)-x+y]的值為32位。
5.如權(quán)利要求1所述的方法,其特征在于,所述的數(shù)據(jù)包為TCP數(shù)據(jù)包。
6.如權(quán)利要求5所述的方法,其特征在于,所述的TCP數(shù)據(jù)包中用于確定校驗和的數(shù)據(jù)包括整個TCP數(shù)據(jù)、TCP頭和偽頭。
7.如權(quán)利要求1所述的方法,其特征在于,步驟C中,所述獲取修改數(shù)據(jù)前的校驗和的方式為從校驗和字段中讀取修改數(shù)據(jù)前的校驗和;在步驟D之后還包括將修改數(shù)據(jù)后的校驗和存入校驗和字段。
8.如權(quán)利要求1所述的方法,其特征在于,如果所述的M未知,則將修改前數(shù)據(jù)與修改后數(shù)據(jù)做異或運算,根據(jù)運算結(jié)果確定M的值。
全文摘要
本發(fā)明公開了一種確定修改數(shù)據(jù)后的數(shù)據(jù)包校驗和的方法,該方法包括A.將該數(shù)據(jù)包中所有涉及到修改的數(shù)據(jù)段所對應(yīng)的修改前數(shù)據(jù)相加,得到一個和值x;B.將該數(shù)據(jù)包中所有涉及到修改的數(shù)據(jù)段所對應(yīng)的修改后數(shù)據(jù)相加,得到一個和值y;C.獲取所述數(shù)據(jù)包在修改前的校驗和Z;D.根據(jù)式(M<<k)+(Z-M)-x+y的值獲取修改數(shù)據(jù)后的校驗和,其中,M<<k為將M左移k位,k為所述數(shù)據(jù)段的位數(shù),M為涉及修改的數(shù)據(jù)段的個數(shù)。利用本發(fā)明所述的方法,可簡化原有的確定數(shù)據(jù)修改后數(shù)據(jù)包校驗和的方法,節(jié)約了處理器資源,提高了工作效率。
文檔編號H04L29/06GK1635728SQ20031012510
公開日2005年7月6日 申請日期2003年12月27日 優(yōu)先權(quán)日2003年12月27日
發(fā)明者熊立群, 王亮, 古江春, 鄒勇 申請人:華為技術(shù)有限公司