在IP报文头中有16bit的首部校验和字段,它是根据IP首部计算所得,但并不包括后面的payload。
这是由于ICMP、IGMP、UDP、TCP在它们各自的首部中有覆盖头部和数据的检验和字段。
检验和的计算:
1 把16bit的检验和字段置为零
2 计算所有16位字(仅首部)之和
3 把得到的和求反码(按位取反),得到检验和
4 把检验和存储在检验和字段中
检验和的检测:
1 计算所有16位字之和
2 接受报文中已包含了检验和,所以如果传输过程没有差错,则上一步结果应为全1
3 全1接受报文,并交由上层协议进一步处理;若非全1则证明有误,IP层丢弃该数据,但是不生成差错报文,由上层协议发现丢失的数据并进行重传。
ICMP,IGMP,TCP,UDP各自首部有检验和负责对各自协议内容进行校验(首部+数据)。计算方法与上同。
IP报文由于各个16bit字的值的限制,求和进位过程中不会产生溢出。(有待进一步实际验证)
阅读(5701) | 评论(0) | 转发(0) |