中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

IP的校驗和算法

發布時間:2020-07-12 19:33:11 來源:網絡 閱讀:887 作者:北方小矮人 欄目:網絡安全


IP/ICMP/IGMP/TCP/UDP等協議的校驗和算法都是相同的,算法如下:
  在發送數據時,為了計算IP數據包的校驗和。應該按如下步驟:
  (1)把IP數據包的校驗和字段置為0;
  (2)把首部看成以16位為單位的數字組成,依次進行二進制反碼求和;
  (3)把得到的結果存入校驗和字段中。
  在接收數據時,計算數據包的校驗和相對簡單,按如下步驟:
  (1)把首部看成以16位為單位的數字組成,依次進行二進制反碼求和,包括校驗和字段;
  (2)檢查計算出的校驗和的結果是否等于零(反碼應為16個1);
  (3)如果等于零,說明被整除,校驗是和正確。否則,校驗和就是錯誤的,協議棧要拋棄這個數據包。
  所謂的二進制反碼求和,即為先進行二進制求和,然后對和取反。
  IP數據報格式

IP的校驗和算法


假設IP頭為:4500 0046 17d9 0000 4011 ec1d(校驗字段) ac1c 0f3b  ac1c 0f3d

計算:

4500 + 0046 +17d9 + 0000 + 4011+ ec1d +ac1c + 0f3b + ac1c + 0f3d 

  取出的和相加再取反->即為應填充的校驗和

  當接受到IP數據包時,要檢查IP頭是否正確,則對IP頭進行檢驗,方法同上:

  計算:

  44500 + 0046 +17d9 + 0000 + 4011+ ec1d +ac1c + 0f3b + ac1c + 0f3d再與它們的和相加得出的一個數再次相加為FFFF,得到的結果是全一,正確。

現假如一數據報為45 00 05 D4 CA E0 40 00 75 06 70 D2 CA 62 39 64 C0 A8 00 02

根據IP數據報的格式可以看出它的首部校驗字段為70 D2 它是怎么算出來的呢?

方法:我們把首部校驗字段即70 D2 用0000代替

4500+05D4+CAE0+4000+7506+0000+CA62+3964+C0A8+0002=38F2A

然后把進出來的一位與后4位再進行十六進制加法,8F2A+0003=8F2D

最后用FFFF減去算出來的結果就可以了即FFFF-8F2D=70D2


代碼實現

SHORT checksum(USHORT* buffer, int size)

{

    unsigned long cksum = 0;

    while(size>1)

    {

        cksum += *buffer++;

        size -= sizeof(USHORT);

    }

    if(size)

    {

        cksum += *(UCHAR*)buffer;

    }

    cksum = (cksum>>16) + (cksum&0xffff); 

    cksum += (cksum>>16); 

    return (USHORT)(~cksum);

}






向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宿松县| 舒城县| 九寨沟县| 青海省| 阿图什市| 疏勒县| 灌阳县| 浦城县| 信丰县| 沈阳市| 通渭县| 昌图县| 鲁甸县| 昌平区| 巨野县| 邯郸县| 黄石市| 赤水市| 北川| 杭州市| 蓝山县| 麻栗坡县| 永年县| 滦平县| 吴堡县| 乌鲁木齐县| 分宜县| 灵宝市| 滁州市| 双辽市| 临洮县| 合川市| 海林市| 个旧市| 涿州市| 常宁市| 天镇县| 沐川县| 沁源县| 永丰县| 涪陵区|