IP協議校驗算法程序源碼
IP 協議采用統一的校驗算法,其計算比較簡單:設校驗和初值為0,然后對數據每16位求異或,結果取反,便得校驗和。校驗時將數據(含校驗和)按同樣的算法求和,結果為0則數據正確,不為0表示通訊出錯,需要丟棄該數據包。這樣能簡化校驗程序設計,提高TCP/IP協議的效率。
本文引用地址:http://www.j9360.com/article/154924.htm應廣大讀者的要求給出作者通用的IP校驗程序:
typedef unsigned int __u16;typedef unsigned long __u32;__u16 checksum(__u16 xdata *dp, __u16 length){__u32 sum = 0;__u16 len = length >> 1;while(len-- > 0)sum += *dp++;if(length 1)sum += (*dp 0xFF00);sum = (sum >> 16) + (sum 0xFFFF);sum += (sum >> 16);len = sum 0xFFFF;return(~len);}
所有TCP/IP協議的校驗和計算和數據包的校驗均由上面的子程序完成。不過需要注意的是TCP和UDP的校驗需要加上偽頭標,不然得不到正確的結果,偽頭標違背了協議的分層原則,但這種違背是出于實際需要的,也正體現了TCP/IP協議設計的靈活性。
tcp/ip相關文章:tcp/ip是什么
評論