IP資料報的校驗和演算法C 版 原

2021-09-05 15:36:43 字數 726 閱讀 2915

為做偽ip,特地做了乙個ip包,用c#改寫ip頭的校驗和演算法。

資料一:

ip頭格式:

 版本號 (4位)

 ip頭長度 (4位)

 服務型別 (8位)

 資料報長度 (16位)

 標識段 (16位)

 標誌段 (16位)

 生存時間 (8位)

 傳輸協議 (8位)

 頭校驗和 (16位)

 傳送位址 (16位)

 目標位址 (16位)

 選項

 填充

資料二:

ip 協議採用統一的校驗演算法,其計算比較簡單:設校驗和初值為0,然後對資料每16位求異或,結果取反,便得校驗和。校驗時將資料(含校驗和)按同樣的演算法求和,結果為0則資料正確,不為0表示通訊出錯,需要丟棄該資料報。

演算法源**:

public static uint16 checksum(uint16 buffer,int size)

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

cksum+=(cksum>>16);

return (uint16)(~cksum);

}注意:buffer陣列為整個ip包陣列,需要轉換成uint16;size為buffer陣列的長度。

關於byte轉換成uint16的方法比較簡單,在此不介紹了。

IP資料報的校驗和演算法C 版 原

為做偽ip,特地做了乙個ip包,用c 改寫ip頭的校驗和演算法。資料一 ip頭格式 版本號 4位 ip頭長度 4位 服務型別 8位 資料報長度 16位 標識段 16位 標誌段 16位 生存時間 8位 傳輸協議 8位 頭校驗和 16位 傳送位址 16位 目標位址 16位 選項 填充 資料二 ip 協議...

IP資料報的校驗和演算法

1 演算法思路 ip icmp igmp tcp udp等協議的校驗和演算法都是相同的,演算法如下 在傳送資料時,為了計算ip資料報的校驗和。應該按如下步驟 1 把ip資料報的校驗和字段置為0 2 把首部看成以16位為單位的數字組成,依次進行二進位制反碼求和 3 把得到的結果存入校驗和字段中。在接收...

關於IP資料報首部校驗欄位的理解

關於ip資料報首部校驗欄位的理解 ip資料報格式及首部個字段 www.2cto.com 對上表的各個資料項就不一一解釋了,這裡具體關注以下幾個資料項 1 4位首部長度 這裡的長度指的是4bytes單元的個數,例如上圖在 選項 欄位不存在的情況下,ip包的首部是20bytes,那麼首部長度字段應該為5...