IP数据报中的首部检验和如何发挥作用
title: IP数据报中的首部检验和如何发挥作用?
date: 2019-08-14 16:53:28
tags:
- 计算机网络
- 科普
categories:
- 计算机网络
在IP数据报的头部中的“首部检验和”字段,它的作用是为了校验数据报 头部 在传输中是否出错。那这种功能是如何实现的呢?
下面结合一张图来说明(图片来源网络):
在说明之前要补充一个前提就是:IP数据报的长度总是4字节的整数倍
发送端:
首先我们将检验和字段的16位全置0,因为我们补充的前提,所以我们可以将头部的数据按16位依次取出,然后反码算术运算求和。这里的算法和正常的加法一样,0和0相加是0,0和1相加是1,1和1相加是0,但要产生一个进位1,加到下一列。如果最高位相加后产生进位,则最后得到的结果要加1。求和过后再求其反码,得到的就是我们发送端的16位首部检验和。
接收端:
在接收端,我们按照发送端相同的算法,将接收到的头部的数据按16位依次取出进行反码算术运算求和,得到的结果进行取反,如果最后的结果为0,则说明头部传输未出错(也可以对得到的结果不取反,那此时就应该判断结果是否全为1)。如果不为0,就丢弃此数据报。
补充:
现在有个小问题就是我们知道数据报头部中存在生存时间TTL字段,此字段每经过一个路由器就会减1,那岂不是最后结果肯定不为0,首部检验和还有什么意义呢?
答案是当初设计的人十分聪明,他设置每经过一个路由器TTL减1,那首部检验和字段就相应加1,这样就抵消了TTL字段的变化问题,首部检验和依然能够发挥作用!