IP数据报检验和计算

计算机网络 专栏收录该内容
3 篇文章 0 订阅

在进行计算之前先补充一下基础知识。

一、原码,反码和补码

原码

原码是计算机机器数中最简单的一种形式,数值位就是真值的绝对值,符号位位“0”时表示正数,符号位为“1”时表示负数,原码又称带符号的绝对值。为了方便整数和小数区别,整数的符号位与数值位之间用“,”隔开,小数的符号位与数值位之间用“.”隔开。
举例: 以8位机器数为例,整数的“+0”原码为0,0000000;整数的“-0”原码为1,0000000;小数的“+0”原码为0.0000000,小数的“-0”原码为1.0000000

反码

正数的反码就等于原码,负数的反码相当于除了符号位之外,其他位取反。
举例: 整数的“+0”反码为0,0000000;整数的“-0”原码为1,1111111;小数的“+0”原码为0.0000000,小数的“-0”原码为1.1111111

补码

正整数的补码是其二进制表示,与原码相同;
负整数的补码为反码加1;
举例: +1的补码为0,0000001;
-1的补码为1,111 1111

二、IP数据报中,首部检验和计算方法

这个字段用来检验数据报的首部,不包括数据部分。数据报每经过一个路由器,路由器都要重新计算首部检验和。不检验数据部分可以减小计算量。
计算方法: 先把IP数据报首部化为许多16位的序列,并把检验和字段置零。用反码运算把所有16字相加后,将得到的和的反码写入检验和字段。接收方收到数据后,将首部的所有16位子序列再使用反码算术符相加一次,将得到的和取反码。如果首部未发生任何变化,那么这个和肯定为0。否则认为出差错,并将此数据报丢弃。

反码相加:从低位向高位计算,0 0 得0 ,0 1 得1 ,1 1 得0 进1,如果最高位相加后产生进位,最后得到的结果加1。

例题:设IP数据报使用固定首部,其个字段的数值如图。计算下列IP数据报首部的检验和,各字段的数值如图
在这里插入图片描述
4 5 0 —>01000101 00000000
28 —>00000000 00011100
1 —>00000000 00000001
00 —>00000000 00000000
4 17 —>00000100 00010001
10.12.14.5 —>00001010 00001100 00001100 00000110
12.6.7.9 —> 00001110 00000101 0000111 00001001
反码运算:
01110100 01001110
取反,得到检验和字段:
10001011 10110001

使用16进制算法(每16位二进制数字,转换为4个十六进制数字表示)
4 5 0 —>4500
28 ---->001C
1 --------->0001
0 0 —>0000
4 17 ---->0411
10.12.14.5 —> 0A0C 0E05
12.6.7.9 -->0C06 0709
加法结果:744E
反码:8BB1

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页

打赏作者

XIE_QAID

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值