计算校验和算法
IP、ICMP、UDP和TCP头都有检验和字段,大小都是16bit,算法基本上是一样的。
发送报文时计算校验和
1、把校验和字段设置为0;
2、把需要校验的数据看成以16位为单位的数字组成,依次进行二进制反码求和;
3、把得到的结果存入校验和字段中。
接收数据时计算检验和
1、把首部看成以16位为单位的数字组成,依次进行二进制反码求和,包括校验和字段;
2、检查结果是否为0;
3、如果等于0,校验和正确;否则,校验和错误,丢弃数据包。
作用范围不同
IP校验和只校验20个字节的IP报头。
ICMP校验和覆盖整个报文(ICMP报头+ICMP数据)。
UDP和TCP校验和不仅覆盖整个报文,还有12个字节的IP伪首部,包括源IP地址(4字节)、目的IP地址(4字节)、协议(2字节)、TCP/UDP包长(2字节)。UDP和TCP报文长度可以是奇数字节,所以在计算校验和时需要在最后增加填充字节0(填充字节只是为了计算校验和,可以不被传送)。
参考资料
https://blog.csdn.net/oceanstudy123/article/details/121677774
标签:字节,IP,报文,校验,TCP,计算,ICMP From: https://www.cnblogs.com/WJQ2017/p/17797000.html