91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

ipv4校驗和計算

發布時間:2020-07-31 18:03:21 來源:網絡 閱讀:2313 作者:1406404036 欄目:網絡安全

ipv4校驗和的計算

原理:

計算方法一:除去校驗和的兩位,將其他的位相加:45+00+00+3c+55+81+00+00+40+01+ac+1c

0f+0d+ac+1c+0f+0e=

計算方法二:


校驗和(checksum)算法,簡單的說就是16位累加的反碼運算:

計算函數如下:

我們在計算時是主機字節序,計算的結果封裝成IP包時是網絡字節序,注意這兩者之間的區別,我們在從IP包里讀取要轉化為主機字節序,往IP包里存入時要轉化為網絡字節序在存入。

UINT32 Checksum(UINT32 cksum, VOID*pBuffer, UINT32 size)

{

   INT8 num = 0;

   UINT8 *p = (UINT8 *)pBuffer;

 

   if ((NULL == pBuffer) || (0 == size))

    {

       return cksum;

    }

  

   while (size > 1)

    {

       cksum += ((UINT16)p[num] << 8 & 0xff00) | (UINT16)p[num + 1]& 0x00FF;

/*2個字節累加,先取網絡字節序低位左移8位(變成主機字節序高位),與(加)上 網絡字節序中的高位(主機字節序地位),即網絡字節序要先變成主機字節序在進行累加,*/

       size  -= 2;

       num   += 2;

    }

  

if (size > 0)

//如果長度為奇數

    {

       cksum += ((UINT16)p[num] << 8) & 0xFFFF;

//如果總的字節數為奇數,則最后一個字節單獨相加

       num += 1;

    }

 

   while (cksum >> 16)

    {

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

//累加完畢將結果中高16位再加到低16位上,重復這一過程直到高16位為全0

    }

  

   return cksum;

}

 

注意:UINT32 cksum的類型,這里是4個字節的,防止在累加的過程中,數據溢出,(例如 0xFF 累加時就會內存溢出)

 

詳細的計算過程和原理如下

一:ip 頭 的計算:

直接對頭部數據進行累加(不包括原來的checksum值):

1、ipv4包頭

 

       ipHeadLen  =(pIpHeader->ver_ihl & 0x0F) << 2;

在ipv4 頭中,版本類型和頭長度加在一起是1 個字節(8位),各占4位,版本類型在前,長度在后,所以要取長度只能取低4 位,

       pIpHeader->chksum = 0;

因為不包括原來的checksum值,所以在每次計算前先把checksum的值置0,然后計算

       sum = Checksum(0, (VOID *)pIpHeader, ipHeadLen);

對整個ip包頭的累加

       pIpHeader->chksum = HTONS((UINT16)(~sum));

結果為計算值的反碼,(別忘轉化為網絡字節序)


向AI問一下細節

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

AI

博乐市| 营口市| 吴忠市| 罗江县| 长汀县| 南丹县| 旺苍县| 安仁县| 遂溪县| 崇左市| 张家界市| 揭西县| 荆州市| 双峰县| 二连浩特市| 安宁市| 阜南县| 宝坻区| 连云港市| 体育| 泰宁县| 自治县| 阳东县| 泾阳县| 柳河县| 陆河县| 喀喇| 克什克腾旗| 西安市| 玛曲县| 仪征市| 新丰县| 宜州市| 即墨市| 五华县| 沅陵县| 郯城县| 喀喇沁旗| 定州市| 台东县| 湟中县|