日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Checksum算法

發布時間:2024/3/24 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Checksum算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:
在網絡中傳輸數據包,為了保證傳輸數據的正確性,使用了
checksum來校驗數據是否正確,ip頭有自己的checksum,tcp、
udp也有自己的checksum,分別校驗不同部分的數據,ip頭的
checksum用于校驗ip頭的數據是否正確,tcp的checksum用于校
驗tcp頭、tcp數據部分是否正確,udp的checksum用于校驗udp
頭、udp數據是否正確。

一、 checksum的計算方法

1、 先將需要計算checksum數據中的checksum設為0;
2、 計算checksum的數據按2byte劃分開來,每2byte組成一個16bit的值,如果最后有單個byte的數據,補一個byte的0組成2byte;
3、 將所有的16bit值累加到一個32bit的值中;
4、 將32bit值的高16bit與低16bit相加到一個新的32bit值中,若新的32bit值大于0Xffff,
再將新值的高16bit與低16bit相加;
5、 將上一步計算所得的16bit值按位取反,即得到checksum值,存入數據的checksum字段即可

計算例子:
如計算下面一段數據的checksum,數據為16進制;
45 00 00 3c 00 00 00 00 40 11 6d 36 c0 a8 2b c3 08 08 08 08 11
紅色的6d 36為checksum字段,先把checksum設0,數據分組,補0,整理完后數據如下,中間checksum設置為0,最后補1byte 0;
4500 003c 0000 0000 4011 0000 c0a8 2bc3 0808 0808 1100
計算:4500+003c+0000+0000+4011+0000+c0a8+2bc3+0808+0808+1100 = 192C8
高低16bit相加: 1 + 92C8 = 92C9
取反: ~92C9 = 6D36
最后所得數據為:45 00 00 3c 00 00 00 00 40 11 6d 36 c0 a8 2b c3 08 08 08 08 11

如下為計算checksum的代碼段: static u16_t chksum(void *dataptr, u16_t len) {u32_t acc;u16_t src;u8_t *octetptr;acc = 0;octetptr = (u8_t*)dataptr;while (len > 1) {src = (*octetptr) << 8;octetptr++;src |= (*octetptr);octetptr++;acc += src;len -= 2;}if (len > 0) {src = (*octetptr) << 8;acc += src;}acc = (acc >> 16) + (acc & 0x0000ffffUL);if ((acc & 0xffff0000UL) != 0) {acc = (acc >> 16) + (acc & 0x0000ffffUL);}src = (u16_t)acc;return ~src; }

二、 IP TCP UDP計算checksum包含的數據

1、 IP頭的checksum
只使用ip頭數據進行計算
2、 TCP/udp的checksum
Tcp/udp的Checksum計算的數據,除了包含tcp/udp頭及tcp數據外,還需要增加一個偽tcp/udp頭,偽tcp/udp頭結構如下:

struct {unsigned long saddr; //源地址unsigned long daddr; //目的地址char mbz;//置空char ptcl; //協議類型unsigned short tcpl; //TCP長度 }psd_header;

這樣,tcp/udp的checksum計算數據如下:
Tcp:偽頭部+tcp頭部+tcp數據
Udp:偽頭部+udp頭部+udp數據

總結

以上是生活随笔為你收集整理的Checksum算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。