icmp checksum的计算
时间: 2023-07-30 07:05:57 浏览: 331
checksum计算指导
5星 · 资源好评率100%
ICMP(Internet Control Message Protocol)是一种互联网协议,用于在网络层传输控制信息。ICMP数据报中包含了一个16比特的校验和字段,用于检测ICMP数据报是否在传输过程中发生了错误。
ICMP校验和的计算方法如下:
1. 将ICMP消息按16比特分组,如果长度为奇数,则将最后一个字节填充为0。
2. 将所有16比特分组相加,得到一个32比特的结果。
3. 将32比特结果的高16比特与低16比特相加,再取反,即得到ICMP校验和。
例如,对于以下ICMP消息:
```
4500 003c 1c46 4000 4001 b861 c0a8 0101 c0a8 0102 0800 9384 0001 0002 0003 0004 0005 0006 0007 0008 0009 000a 000b 000c 000d 000e 000f 0010 0011
```
首先将其按16比特分组:
```
4500 003c 1c46 4000
4001 b861 c0a8 0101
c0a8 0102 0800 9384
0001 0002 0003 0004
0005 0006 0007 0008
0009 000a 000b 000c
000d 000e 000f 0010
0011
```
然后将所有16比特分组相加,得到一个32比特的结果:
```
4500 + 003c + 1c46 + 4000 + 4001 + b861 + c0a8 + 0101 + c0a8 + 0102 + 0800 + 9384 + 0001 + 0002 + 0003 + 0004 + 0005 + 0006 + 0007 + 0008 + 0009 + 000a + 000b + 000c + 000d + 000e + 000f + 0010 + 0011 = 6bf5e
```
将32比特结果的高16比特与低16比特相加,得到一个16比特的结果:
```
6b + f5e = 1019
```
最后取反得到ICMP校验和:
```
01018
```
因此,ICMP校验和为01018。
阅读全文