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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

网络传输中的反码求和算法

發布時間:2023/12/9 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络传输中的反码求和算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在發送數據,計算數據包的校驗和,按如下步驟:

1、把校驗和字段置為0;

2、把需校驗的數據看成以16位為單位的數字組成,依次進行二進制反碼求和;

3、把得到的結果存入校驗和字段中。

在接收數據時,計算數據包的校驗和相對簡單,按如下步驟:

1、把首部看成以16位為單位的數字組成,依次進行二進制反碼求和,包括校驗和字段;

2、檢查計算出的校驗和的結果是否為0;

3、如果等于0,說明被整除,校驗是和正確。否則,校驗和就是錯誤的,協議棧要拋棄這個數據包。 IP,ICMP,TCP,UDP數據校驗的不同: (IP校驗和只校驗20字節的IP報頭;而ICMP校驗和覆蓋整個報文(ICMP報頭+ICMP數據);UDP和TCP校驗和不僅覆蓋整個報文,而且還有12字節的IP偽首部,包括源IP地址(4字節)、目的IP地址(4字節)、協議(2字節,第一字節補0)和TCP/UDP包長(2字節)。另外UDP、TCP數據報的長度可以為奇數字節,所以在計算校驗和時需要在最后增加填充字節0(注意,填充字節只是為了計算校驗和,可以不被傳送)。 反碼求和:對一個無符號的數,先求其反碼,然后從低位到高位,按位相加,有溢出則向高位進1(跟一般的二進制加法規則一樣),若最高位有進位,則向最低位進1。 代碼: /計算校驗和 USHORT checksum(USHORT *buffer,int size) { unsigned long cksum=0; //這里注意,其實是把數據頭部校驗和字段內存里的值也要賦值為0,最后才能正確。while(size>1) { cksum+=*buffer++; size-=sizeof(USHORT); } if(size) { cksum+=*(UCHAR *)buffer; } //將32位數轉換成16 while (cksum>>16) cksum=(cksum>>16)+(cksum & 0xffff); return (USHORT) (~cksum); }

這里有一篇詳細的英文解釋,說明1的反碼求和和2的反碼求和的不同與選擇,參考http://www.netfor2.com/checksum.html

轉載于:https://www.cnblogs.com/MyselfDancing/p/3482333.html

總結

以上是生活随笔為你收集整理的网络传输中的反码求和算法的全部內容,希望文章能夠幫你解決所遇到的問題。

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