為做偽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...