IPv4首部校驗和是在IP數(shù)據(jù)報傳輸前計算出來的,用于檢錯和確認(rèn)數(shù)據(jù)的完整性。它是一種基于二進(jìn)制補(bǔ)碼的校驗和,計算方法是將16位字節(jié)碼加和,并對結(jié)果進(jìn)行反碼求和。
在Java中進(jìn)行IP首部校驗和計算的思路如下:
//將16位字節(jié)碼進(jìn)行加和
int sum = 0;
for (int i = 0; i < length; i += 2) {
sum += (((header[i] << 8) & 0xFF00) | (header[i + 1] & 0xFF));
}
//將進(jìn)位的高16位加到低16位中
while ((sum >> 16) > 0) {
sum = (sum & 0xFFFF) + (sum >> 16);
}
//對結(jié)果進(jìn)行反碼求和
return ~sum & 0xFFFF;
其中,header
表示IPv4頭部數(shù)據(jù),length
為頭部長度。
這段代碼將頭部按照16位進(jìn)行拆分,將這些16位字節(jié)碼加和。再將進(jìn)位的高16位加到低16位中,最后對結(jié)果進(jìn)行反碼求和即可得到校驗和。