目錄
一、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雖然 簡單,所占用的記憶體比...