计算机网络-首部检验和原理
检验和 的计算 方法:
(1)把IP数据包的校验和字段置为0; (2)把首部看成以16位为单位的数字组成,依次进行二进制求 和(注意:求和时应将最高位的进位保存,所以加法应采用 32 位加法); (3)将上述加法过程中产生的进位(最高位的进位)加到低16 位(采用32位加法时,即为将高 16位与低 16位相加,之后还要 把该次加法最高位产生的进位加到低16位) (4)将上述的和取反,即得到校验和。
IP首部检验和的计算步骤
发送端:发送前计算首部 检验和
接收端:接收数据时计算检验 和
发送端: 1、把校验和字段设置为0; 2、把需要校验的数据看成以16位为单位的数字组成,依次 进行二进制反码求和; 3、把得到的结果存入校验和字段中
接收端: 1、把首部看成以16位为单位的数字组成,依次进行二进 制反码求和,包括校验和字段; 2、检查计算出的校验和的结果是否为0; 3、如果等于0,说明被整除,校验和正确。否则,校验 和就是错误的,协议栈要抛弃这个数据包。
谢
谢
观
看
!
位 0 版本 首 固定部分 部 (20字节) 4 首部长度 8 区分服务 16 19 24 总 长 度 31
标 识
生存时间 协 议
标志 源 地 址
目 的 地 址
片 偏 移
Байду номын сангаас首 部 检 验 和
可变 部分
可 选 字 段 (长 度 可 变) 数 据 部 分
填 充
为什么使用首部检验和原理?
IP数据包中的首部校验字段的算法不采用 循环冗余算法,是因为IP包在网络中传输时, 其TTL字段的值经常会变化,故采用简单的叠 加方法,就可以避开中间路由器重新计算其校 验值,只是简单的增加1操作即可,这样可以明 显提高传输效率。
数据部分
二进制反码求和:
0和0相加是0,0和1相加是1,1和1相加是0但要产生一个进位1,加到下一 列.若最高位相加后产生进位,则最后得到的结果要加上溢出的进位1(可 能是多個1)。 所谓的二进制反码求和,即为先进行二进制求和,然后对和取反。
1 1 0 1 1 第一个二进制加数 + 1 0 1 0 1 第二个二进制加数 --------------1 0 0 0 0 相加之和为110000, 最高位的1需要放到 下一列相加 1 --------------1 0 0 0 1 相加得到的结果 0 1 1 1 0 取反得到最终结果
首部检验和原理
三组
什么是首部检验和?
首部检验和字段是根据IP首部计算的检 验和码。首部检验和在IP数据报中占16位。 它只检验数据报的首部,不包括首部后面的 数据。
下图是一般IP数据报的格式,若仅仅 去理解校验和就不必去看这些字段的细节。 IP检验和就是对首部(固定部分+可变 部分)求的检验和。
具 体 过 程 :
发送端 接收端
字1
字2 检验和 字n 反码算术 运算求和 检验和
16 位 16 位 … 置为全 0 … 16 位 16 位
字1
字2 检验和 字n
16 位 16 位 … 16 位 … 16 位
取反码
16 位
IP 数据报
反码算术 16 位 运算求和 取反码 结果 16 位
数据部分 不参与检验和的计算