UDP校驗和計算

2021-08-22 18:14:34 字數 1940 閱讀 9374

目錄

一、udp概述

二、udp資料報

三、udp校驗和計算

四、udp校驗和計算的c語言實現及抓包驗證

udp是user datagram protocol的簡稱,中文名是使用者資料報協議,是osi(open system interconnection,開放式系統互聯)參考模型中一種無連線的傳輸層協議,提供面向事務的簡單不可靠資訊傳送服務,udp在ip報文的協議號是17。

與所熟知的tcp(傳輸控制協議)協議一樣,udp協議直接位於ip(網際協議)協議的頂層。根據osi(開放系統互連)參考模型,udp和tcp都屬於傳輸層協議。udp協議的主要作用是將網路資料流量壓縮成資料報的形式。乙個典型的資料報就是乙個二進位制資料的傳輸單位。每乙個資料報的前8個位元組用來包含報頭資訊,剩餘位元組則用來包含具體的傳輸資料。

使用udp協議包括:tftp、snmp、nfs、dns、bootp

udp使用底層的網際網路協議來傳送報文,同ip一樣提供不可靠的無連線資料報傳輸服務。它不提供報文到達確認、排序、及流量控制等功能。

使用者資料報udp有兩個字段:資料字段和首部字段。首部欄位很簡單,只有8個位元組,有四個字段組成,每個欄位的長度都是兩位元組。各段意義如下:

源埠:源埠號。在需要對方回信時選用。不需要時可用全0。

目的埠:目的埠號。這在終點交付報文時必須要使用到。

長度:udp使用者資料報的長度,其最小值是8(僅首部)。

校驗和:檢測udp使用者資料報在傳輸中是否有錯。有錯就丟棄。

udp計算校驗和的方法和ip資料報首部校驗和的方法相似。不同的是:ip資料報校驗和只校驗ip資料報的首部,但udp的校驗和是把首部和資料部分一起都檢驗。

udp的校驗和需要計算udp首部加資料荷載部分,但也需要加上udp偽首部。這個偽首部指,源位址、目的位址、udp資料長度、協議型別(0x11),協議型別就乙個位元組,但需要補乙個位元組的0x0,構成12個位元組。偽首部+udp首部+資料一起計算校驗和。

udp檢驗和的計算方法是:

按每16位求和得出乙個32位的數;

如果這個32位的數,高16位不為0,則高16位加低16位再得到乙個32位的數;

重複第2步直到高16位為0,將低16位取反,得到校驗和。

用wireshark抓包並過濾出udp資料報,分析如下:

源埠:53539(0xd123)

目的埠:10050(0x2742)

udp長度:28(0x001c)

校驗和:0x285c

將12位元組的偽首部、8位元組的udp首部(校驗和置0)及20位元組的資料放在一起,用c語言程式設計計算校驗和,程式執行截圖如下:

從程式執行結果來看,計算出來的校驗和與抓包得到的校驗和是一致的。

#includeunsigned short checksum(unsigned short *buf,int nword)

return ~sum;

}void main()

; int n=20;

unsigned short re_checksum;

re_checksum=checksum(buffer,n);

printf("%x\t",re_checksum);

if(re_checksum==0x285c)

printf("校驗和正確!\n");

else

printf("校驗和不正確!\n");

}

計算udp校驗和例子 UDP校驗和計算例項

udp校驗和的計算例項說明 成都資訊工程學院 鄭郁正 如下定義乙個udp的以太包。為了方便,只包含兩個位元組資料0x55,0xaa。unsigned char udp et pkt 參與udp校驗計算的由三部分組成 udp頭,udp資料,udp偽頭,如下面所示 unsigned char udp c...

UDP頭部結構,UDP校驗和計算

udp 使用者資料報協議 特點 1.無連線,傳輸資料時不需要建立鏈結 2.盡最大努力傳輸,不可靠 3.面向報文的,接收到應用程式的資料時,只往資料前面加乙個udp頭部就傳給網路層,收到網路層傳來的udp資料時,只把udp頭部去掉就扔給應用層程序。不論資料大小都是一次傳送。4.沒有擁塞控制,不管鏈路的...

校驗和計算

unsigned int cal crc unsigned char ptr,unsigned char len 余式crc乘以2再求crc else crc 2 if ptr i 0 crc 0x1021 再加上本位的crc ptr return crc 按位計算crc雖然 簡單,所占用的記憶體比...