專利名稱:Udp校驗和的計算方法
技術領域:
本發(fā)明涉及局域網的通信領域,尤其是以太網的用戶數據包協(xié)議。
背景技術:
以太網是當今現(xiàn)有局域網采用的最通用的通信協(xié)議標準。在傳輸層有多種協(xié)議可選,其中UDP協(xié)議因為結構精簡、傳輸開銷小,而在局域網上應用非常廣泛。以太網數據包的格式為(以下數據長度從左到右依次為7字節(jié),I字節(jié),6字節(jié),6字節(jié),2字節(jié),46 1500字節(jié),4字節(jié)) Preamble導碼 |SFD|目標MAC地址|源MAC地址|以太網類型 |數據段|CRCUDP包(用戶數據包協(xié)議)是在以太網數據包中的數據段填充一個IP包頭和UDP段(包括UDP包頭和數據段),IP包頭的格式如下(以下數據長度從左到右依次為1字節(jié),I字節(jié),2字節(jié),2字節(jié),2字節(jié),I字節(jié),I字節(jié),2字節(jié),4字節(jié),4字節(jié))
I版本號頭長度I服務類型I總長度I包ID I標記和偏移量I生存時間I傳輸協(xié)議I頭校驗和I源IP地址I目標IP地址
UDP段的格式如下(以下數據長度從左到右依次為2字節(jié),2字節(jié),2字節(jié),2字節(jié),n字
節(jié))
源端口號丨目標端口號Iudp包長度Iudp校驗和I數據段(DATAfDATAn)
其中,計算UDP校驗和時要算上一個偽包頭(pseudoheader),即由源IP地址、目標IP地址、傳輸協(xié)議和M)P包長度組成(以下數據長度從左到右依次為4字節(jié),4字節(jié),I字節(jié),I字節(jié),2字節(jié))
源ip地址I目標ip地址joxoo I傳輸協(xié)議Iudp包長度UDP校驗和的計算方法是將偽包頭、UDP包頭(UDP校驗和置0)和數據段按16bit分組相加,進位加在本次運算的個位,對最后結果按bit取反。公式為
Checksum = OxFFFF - [ E (偽包頭)+ E (UDP 包頭)+ E (UDP 數據)]
將計算得到的Checksum回填到UDP校驗和。所以,是先有后面的數據段,才能計算出前面的UDP校驗和。因此,用UDP包傳送數據時,要先讀一遍需要發(fā)送的數據,計算校驗和,回填到UDP包頭;然后重新再讀一遍需要發(fā)送的數據,和其他信息組成一個完整的UDP包發(fā)送。在現(xiàn)有的協(xié)議規(guī)定下,所有需要發(fā)送的數據都需要處理兩遍,效率比較低。
發(fā)明內容
為了解決現(xiàn)有技術的不足,本發(fā)明提供了一種新的UDP校驗和的計算方法,通過改進已有方法,實現(xiàn)只讀一遍需要發(fā)送的數據,計算校驗和與組包同時完成,以提高UPD包的傳輸效率與實時性。為了實現(xiàn)上述目的,本發(fā)明采用如下技術方案
一種UDP校驗和的計算方法,包括如下步驟
(I)將UDP包長度和IP包總長度均加2 ;(2)將UDP校驗和設為兩個字節(jié)的十六進制常數;
(3)將偽包頭、UDP包頭和數據段按16bit分組逐一相加,進位加在本次運算的個位;
(4)將步驟(3)得到的結果按bit取反,添加在UDP數據段的末尾;
(5)發(fā)送結果。進一步,所述常數是除0x0000和OxFFFF之外的任意常數。本發(fā)明提供的計算方法極大地簡化了 UDP包的組包流程,所有的數據只需要讀取一次就可以立即組包發(fā)送,避免了傳統(tǒng)技術中要反復讀取兩遍致使效率低下的問題,極大地提高了 m)P包的傳輸效率以及實時性。
圖I是傳統(tǒng)的UDP包組包流程示意圖。圖2是本發(fā)明UDP包組包流程示意圖。圖3是本發(fā)明中的公式I計算流程示意圖。圖4是本發(fā)明中的公式2計算流程示意圖。圖5是本發(fā)明中的公式3計算流程示意圖。圖6是本發(fā)明中的公式4計算流程示意圖。圖7是本發(fā)明中的公式5計算流程示意圖。圖8是本發(fā)明的計算過程按傳統(tǒng)方法驗算的示意圖。
具體實施例方式下面結合附圖和實施例對本發(fā)明作進一步詳細說明。本發(fā)明方法是根據已有的UDP校驗和計算方法推導、計算并總結出來的,發(fā)明方法原理及推導過程如下
傳統(tǒng)的UDP包組包流程如圖I所示,用UDP包傳送數據時,要先讀一遍需要發(fā)送的數據,計算校驗和,回填到UDP包頭;然后重新再讀一遍需要發(fā)送的數據,和其他信息組成一個完整的m)P包發(fā)送。UDP校驗和的計算方法是將偽包頭、UDP包頭(UDP校驗和置0)和數據段按16bit分組相加,進位加在本次運算的個位,對最后結果按bit取反。如圖3所示,公式為(式中的Checksum代表UDP校驗和)
公式① Checksum = OxFFFF - [ E (偽包頭)+ E (UDP 包頭)+ E (UDP 數據)]
從UDP校驗和的計算公式(公式①)可以得出
公式② E (偽包頭)+ E (UDP 包頭 + Checksum) + E (UDP 數據)=OxFFFF也就是說,將M)P校驗和(Checksum)回填到UDP包頭后,偽包頭、UDP包頭和數據段所有數據相加的和等于OxFFFF,如圖4所示?,F(xiàn)將UDP包的數據段末尾添加兩個字節(jié)的常數,如0x1234 (十六進制),則UDP包長度以及IP包總長度都要加2,UDP段的格式如下(以下數據長度從左到右依次為2字節(jié),2字節(jié),2字節(jié),2字節(jié),n+2字節(jié))
權利要求
1.一種UDP校驗和的計算方法,其特征在于,包括如下步驟 (1)將UDP包長度和IP包總長度均加2; (2)將UDP校驗和設為兩個字節(jié)的十六進制常數; (3)將偽包頭、UDP包頭和數據段按16bit分組逐一相加,進位加在本次運算的個位; (4)將步驟(3)得到的結果按bit取反,添加在UDP數據段的末尾; (5)發(fā)送結果。
2.根據權利要求I所述的方法,其特征是所述常數是除0x0000和OxFFFF之外的任意常數。
全文摘要
本發(fā)明公開了一種UDP校驗和的計算方法,對已有的技術進行改進,以提高UDP包的傳輸效率。本發(fā)明方法的主要步驟是將UDP校驗和設為一個常數,然后按照傳統(tǒng)的UDP校驗和計算方法進行計算,將得出的結果添在UDP數據段的末尾。本發(fā)明提供的計算方法極大地簡化了UDP包的組包流程,所有的數據只需要讀取一次就可以立即組包發(fā)送,極大地提高了UDP包的傳輸效率以及實時性。
文檔編號H04L29/06GK102638464SQ20121008740
公開日2012年8月15日 申請日期2012年3月29日 優(yōu)先權日2012年3月29日
發(fā)明者楊峰, 許琨 申請人:蘇州攀星光電科技有限公司