-
2019-01-01 10:37:58
为了方便大家,这里再借用网上的一个例子吧:
IP头:
45 00 00 31
89 F5 00 00
6E 06 00 00(校验字段)
DE B7 45 5D -> 222.183.69.93 (源IP地址)
C0 A8 00 DC -> 192.168.0.220 (目的IP地址)
计算:
4500 + 0031 +89F5 + 0000 + 6e06+0000 + DEB7 + 455D + C0A8 + 00DC =3 22C4 (结果大于4bit,继续迭代计算)
0003 + 22C4 = 22C7
~22C7 = DD38 ->即为应填充的校验和
当接受到IP数据包时,要检查IP头是否正确,则对IP头进行检验,方法同上:
计算:
4500 + 0031 +89F5 + 0000 + 6E06+DD38 + DEB7 + 455D + C0A8 + 00DC =3 FFFC
0003 + FFFC = FFFF
得到的结果是全1,正确。
更多相关内容 -
IP数据报首部校验和算法说明
2017-12-28 16:26:28《IP数据报首部校验和算法》 1. IP数据报首部校验主要用于保证IP数据报头的完整性。 2. 该算法为“反码求和校验”,”反码求和校验“是一个专用术语,区别于先求反码再求和。 3. 该算法过程如下文所示例。 => ...
《IP数据报首部校验和算法说明》
1. IP数据报首部校验主要用于保证IP数据报头的完整性。
2. 该算法为“反码求和校验”,”反码求和校验“是一个专用术语,区别于先求反码再求和。
3. 该算法过程如下文所示例。
=> 发送方
i. 将校验和字段初始化为0,然后将IP报头按照16bit分成多个单元,如果报头长度不是
16bit整数倍,则填充0;
ii. 对上述各个单元(16bit)采用“反码求和”运算,即将各个单元直接相加,高位溢出位
加到最低位(不同于通常补码运算是直接丢掉溢出位),将得到的和取其反码,填入校验和字段即可;
iii. IP数据报头发送完毕后,接着发送数据报内容;
=> 接收方
i. 将校验和字段初始化为0,然后将IP报头按照16bit分成多个单元,如果报头长度不是
16bit整数倍,则填充0;
ii. 对上述各个单元(16bit)采用“反码加法”运算,包括发送方发送的校验和字段,
然后检查得到的结果每个数据位是否全部为1;
iii. 如果满足,则进行下步处理,否则表明该帧数据报在传输过程中发生错误,舍弃该帧数据;
4. “反码求和”运算示例
例如,位宽为3bit的两个数值100b和101b进行反码求和运算。
i. 100b + 101b = 1_001b,高位存在溢出;
ii. 高位溢出的1,加到最低位。即 001b + 1b(溢出位) = 010b;
iii. 上述两数反码求和结果为010b,然后取反,为101b即为校验和发送给接收端;
说明:在接收端会接收到三个数值(包含校验和),100b, 101b, 101b。
按照“反码求和”运算,结果为
100b + 101b + 101b = 1_110b, 溢出位加到最低位后,结果为111b,每个数据位全部为1;
(为什么全部为1,不难理解,原码010b与反码101b求和,其结果各数据位必然为1)
备注:参考博客文章链接为http://www.360doc.com/content/15/0910/23/27653981_498345868.shtml
-
IP数据报首部校验和算法
2018-05-26 13:51:19IP数据报首部校验和算法 详细 非代码当用google搜索IP数据报首部校验和算法的时候,总是看到的是代码,没有看到其过程,于是就有了此文,如有错误请指正。文章省略一点,呵呵 IP/ICMP/IGMP/TCP/UDP等协议的校验和...IP数据报首部校验和算法 详细 非代码
当用google搜索IP数据报首部校验和算法的时候,总是看到的是代码,没有看到其过程,于是就有了此文,如有错误请指正。文章省略一点,呵呵在发送数据时,为了计算数IP据报的校验和。应该按如下步骤:
(1)把IP数据报的首部都置为0,包括校验和字段。
(2)把首部看成以16位为单位的数字组成,依次进行二进制反码求和。
(3)把得到的结果存入校验和字段中。
在接收数据时,计算数据报的校验和相对简单,按如下步骤:
(1)当接收IP包时,需要对报头进行确认,检查IP头是否有误,算法同上2、3步,然后判断取反的结果是否为0,是则正确,否则有错。
1、发送方
i)将校验和字段置为0,然后将IP包头按16比特分成多个单元,如包头长度不是16比特的倍数,则用0比特填充到16比特的倍数;
ii)对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉溢出的高位),将得到的和的反码填入校验和字段;
iii)发送数据包。
2、接收方
i)将IP包头按16比特分成多个单元,如包头长度不是16比特的倍数,则用0比特填充到16比特的倍数;
ii)对各个单元采用反码加法运算,检查得到的和是否符合是全1(有的实现可能对得到的和会取反码,然后判断最终值是不是全0);
iii)如果是全1则进行下步处理,否则意味着包已变化从而丢弃之。需要强调的是反码和是采用高位溢出加到低位的,如3比特的反码和运算:100b+101b=010b(因为100b+101b=1001b,高位溢出1,其应该加到低位,即001b+1b(高位溢出位)=010b)。
1.实例
请看我用ominipeek的抓包
I.将校验和字段置为0,然后将IP包头按16比特分成多个
校验和Header Checksum:0x618D将其重置为0X0000
将IP包头分段:
1. 0x4500
2. 0x0029
3. 0x44F1
4. 0x4000
5. 0x8006
6. 0x0000 ------->这个为Header Checksum的值,我们前面将其重置为0了
7. 0xC0A8
8. 0x01AE
9. 0x4A7D
+ 10. 0x477D
-------------------------------------------------------
将1至10相加求出来的和为:0x29E70
II.对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉溢出的高位),将得到的和的反码填入校验和字段
0x0002+0x9E70=0x9E72
0x9E72二进制为:1001 1110 0111 0010
反码为:0110 0001 1000 1101
0110 0001 1000 1101的16进制为:0x618D
看看这个 是否与IP包头中的Checksum相同
==========================================================
当接收到IP对其进行检测
III.对各个单元采用反码加法运算,检查得到的和是否符合是全1(有的实现可能对得到的和会取反码,然后判断最终值是不是全0)
当收到IP数据局包的时候,要验证IP头是否正确,则可以这样进行
1. 0x4500
2. 0x0029
3. 0x44F1
4. 0x4000
5. 0x8006
6. 0x618D ------->这个为Header Checksum的值
7. 0xC0A8
8. 0x01AE
9. 0x4A7D
+ 10. 0x477D
-------------------------------------------------------
将1至10相加求出来的和为:0x2FFD
对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉溢出的高位),将得到的和的反码填入校验和字段:
0x0002+0x0FFD=0xFFFF
0xFFFF二进制为:1111 1111 1111 1111
1111 1111 1111 1111反码为:0
====================================================
关于这一部的补充说明,
将IP包头分段:
1. 0x4500
2. 0x0029
3. 0x44F1
4. 0x4000
5. 0x8006
6. 0x0000 ------->这个为Header Checksum的值,我们前面将其重置为0了
7. 0xC0A8
8. 0x01AE
9. 0x4A7D
+ 10. 0x477D
----------------------------------------------------------------------------------------------------------
-
IP数据报首部校验和算法详细非代码
2019-06-28 07:34:59目录 IP数据报首部校验和算法 详细 非代码 IP数据报首部校验和算法 详细 非代码 参考转载至: http://www.cnblogs.com/fhefh/archive/2011/10/18/2216885.html 当用google搜索IP数...IP数据报首部校验和算法 详细 非代码
参考转载至:
http://www.cnblogs.com/fhefh/archive/2011/10/18/2216885.html
当用google搜索IP数据报首部校验和算法的时候,总是看到的是代码,没有看到其过程,于是就有了此文,如有错误请指正。文章省略一点,呵呵
IP/ICMP/IGMP/TCP/UDP等协议的校验和算法都是相同的,算法如下:
在发送数据时,为了计算数IP据报的校验和。应该按如下步骤:
(1)把IP数据报的首部都置为0,包括校验和字段。
(2)把首部看成以16位为单位的数字组成,依次进行二进制反码求和。
(3)把得到的结果存入校验和字段中。
在接收数据时,计算数据报的校验和相对简单,按如下步骤:
(1)当接收IP包时,需要对报头进行确认,检查IP头是否有误,算法同上2、3步,然后判断取反的结果是否为0,是则正确,否则有错。
1、发送方
i)将校验和字段置为0,然后将IP包头按16比特分成多个单元,如包头长度不是16比特的倍数,则用0比特填充到16比特的倍数;
ii)对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉溢出的高位),将得到的和的反码填入校验和字段;
iii)发送数据包。
2、接收方
i)将IP包头按16比特分成多个单元,如包头长度不是16比特的倍数,则用0比特填充到16比特的倍数;
ii)对各个单元采用反码加法运算,检查得到的和是否符合是全1(有的实现可能对得到的和会取反码,然后判断最终值是不是全0);
iii)如果是全1则进行下步处理,否则意味着包已变化从而丢弃之。需要强调的是反码和是采用高位溢出加到低位的,如3比特的反码和运算:
100b+101b=010b(因为100b+101b=1001b,高位溢出1,其应该加到低位,即001b+1b(高位溢出位)=010b)
。1.实例
请看我用ominipeek的抓包
图:1 I.将校验和字段置为0,然后将IP包头按16比特分成多个
校验和Header Checksum:0x618D将其重置为0X0000
将IP包头分段:
1. 0x4500
2. 0x0029
3. 0x44F1
4. 0x4000
5. 0x8006
6. 0x0000 ------->这个为Header Checksum的值,我们前面将其重置为0了
7. 0xC0A8
8. 0x01AE
9. 0x4A7D
+ 10. 0x477D
-------------------------------------------------------
将1至10相加求出来的和为:0x29E70
II.对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉溢出的高位),将得到的和的反码填入校验和字段
0x0002+0x9E70=0x9E72
0x9E72二进制为:1001 1110 0111 0010
反码为:0110 0001 1000 1101
0110 0001 1000 1101的16进制为:0x618D
看看这个 是否与IP包头中的Checksum相同
==========================================================
当接收到IP对其进行检测
III.对各个单元采用反码加法运算,检查得到的和是否符合是全1(有的实现可能对得到的和会取反码,然后判断最终值是不是全0)
当收到IP数据局包的时候,要验证IP头是否正确,则可以这样进行
1. 0x4500
2. 0x0029
3. 0x44F1
4. 0x4000
5. 0x8006
6. 0x618D ------->这个为Header Checksum的值
7. 0xC0A8
8. 0x01AE
9. 0x4A7D
+ 10. 0x477D
-------------------------------------------------------
将1至10相加求出来的和为:0x2FFD
对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉溢出的高位),将得到的和的反码填入校验和字段:
0x0002+0x0FFD=0xFFFF
0xFFFF二进制为:1111 1111 1111 1111
1111 1111 1111 1111反码为:0
====================================================
关于这一部的补充说明,
将IP包头分段:
1. 0x4500 2. 0x0029 3. 0x44F1 4. 0x4000 5. 0x8006 6. 0x0000 ------->这个为Header Checksum的值,我们前面将其重置为0了 7. 0xC0A8 8. 0x01AE 9. 0x4A7D 10. +0x477D
图:2 -
ip数据报首部校验和的计算
2016-10-08 17:26:18ip数据报首部校验和的计算网络层间的数据传送特点是: 不可靠: 分组可能丢失,乱序等,不做确认; 无连接: 每个分组都独立对待; 尽力投递: 不随意放弃分组; 点到点。因为在传输过程中会受到很多的干扰,ip数据包会... -
IP数据报首部检验和原理
2020-10-31 21:09:45在发送方,先把IP数据报首部划分为许多16位字的序列,并把检验和字段置为0,用反码算术运算把所有16位字相加,将得到的和的反码写入检验和字段。 接收方收到数据后,将首部所有的16位字使用反码算术运算相加一次,将... -
ip首部校验和
2021-09-02 15:48:07ip首部校验和 只检验数据报的首部,不包括数据部分 方法: 在发送方,先把IP数据报首部划分为许多16位字的序列,并把检验和字段置0,用反码算术运算把所有16位字相加后,将得到的和的反码写入检验和字段。 接收方... -
IP数据报中的首部检验和如何发挥作用
2020-06-14 14:12:17在IP数据报的头部中的“首部检验和”字段,它的作用是为了校验数据报 头部 在传输中是否出错。那这种功能是如何实现的呢? 下面结合一张图来说明(图片来源网络): 在说明之前要补充一个前提就是:IP数据报的长度... -
ip首部校验和计算详解、代码解析、例子
2021-12-27 23:36:23将校验和字段清零 然后对每16位(2字节)进行二进制反码求和(先对每16位求和,再将得到的值取反) 接收方 检查ip头部是否正确,再对ip头进行校验,方法同上。 实例 IP头 45 00 00 31 89 F5 00 00 6E 06 00 00... -
IP数据报首部checksum的计算
2021-03-14 15:14:21一、首先区别下面两个概念:(1)one's complement:正数=原码,负数=反码(2)two's complement:就是通常所指的补码二、计算ip首部校验和1.发送IP数据报计算checksum(1)将校验和字段置为0;(2)对首部中(一般为20B)每个16位... -
IP数据报首部
2022-02-08 20:39:00IP数据报首部固定部分字段解释 -
IP首部检验和详细计算步骤
2021-06-22 14:25:52在发送方,先把IP数据报首部划分为许多16位字的序列,并把检验和字段置零。用反码算术运算把所有16位字相加后,将得到的和的反码写入检验和字段。 接收方收到数据报后,将首部的所有16位字再使用反码算术运算相加一... -
IP首部校验和的计算
2015-09-12 18:31:08IP首部校验和的计算 -
java ip首部效验和
2020-12-07 20:31:32大学生网络实验课 (1)在界面上,用户能够输入或编辑IP协议包各字段数据,例如,“协议”字段应该是下拉选择 方式; (2)程序能够自动检查IP地址的合法性,且主机可用;...检验“首部校验和”字段的计算结果: -
IP首部校验和算法
2015-07-13 10:03:28校验和不计算被封装的数据,UDP、TCP和ICMP都有各自的校验和。报头校验和字段包含一个16位二进制补码和,这是由数据包发送者计算得到的。接受者将连同原始校验和重新进行16位二进制补码和的计算。如果数据包传输中... -
【计算机网络】关于IP数据报 首部检验和的反码问题(二进制反码)
2021-06-23 17:13:31今日,在学习谢希仁版计网的IP数据报格式时看到这段话: 用反码算术运算把所有16位字相加后,将得到的和的反码写入检验和字段。 非常疑惑,因为印象中对反码的理解是: 正数的反码是其本身 负数的反码是在其... -
IP数据报首部校验和算法 详细 非代码
2011-10-18 21:21:00当用google搜索IP数据报首部校验和算法的时候,总是看到的是代码,没有看到其过程,于是就有了此文,如有错误请指正。文章省略一点,呵呵 IP/ICMP/IGMP/TCP/UDP等协议的校验和算法都是相同的,算法如下: 在发送... -
IP数据报检验和计算
2019-11-04 14:20:42一、原码,反码和补码 原码 原码是计算机机器数中最简单的一种形式,数值位就是真值的绝对值,符号位位“0”时表示正数,符号位为“1”时表示负数,原码又称带符号的绝对值。为了方便整数和小数区别,整数的符号位与... -
IP数据包首部校验和的计算
2016-10-10 11:14:50应该按如下步骤:(1)把IP数据报的首部都置为0,包括校验和字段。(2)把首部看成以16位为单位的数字组成,依次进行二进制反码求和。(3)把得到的结果存入校验和字段中。在接收数据时,计算数据报的校验和相对简单... -
IP首部校验和字段计算方法
2020-06-27 00:50:03IP首部有16bit的校验和,因此,IP首部以16bit为单位计算校验和,IP首部的长度一定是16bit的整倍数,这是由于首部长字段是以32bit为单位计算的,不足的补0。 发送方计算方法: 1.首先把校验和的16bit置0。 2.将首部以... -
计算机网络-IP数据报首部
2020-05-04 14:54:35IP数据报由首部(报头)和数据两个部分组成。 首部可分为: 固定部分/定长部分(20字节)+可选部分/变长部分(40字节); 注释: (1)图中每一行由32比特/位bit(4个字节byte),每小格称为域/字段; (2)小括号里... -
IP 数据报首部分析
2020-10-25 15:21:33今咱就抓个数据报具体看一看真实网络中的 IP 报首部. 操作方法很简单, 使用wireshark进行抓包. 抓包后随便找个包看一下就行, 毕竟所有通信的包都需要经过网络层.(同时,wireshark会对协议的相关信息给出标识, 更... -
ip协议首部校验及tcp校验计算
2021-10-18 16:06:14将图中按照16位进行分组,然后校验和位清零,将数据按16位一组进行累加,最后得出一个结果,如果此结果高16位为0,则将结果按位取反后填入16位首部校验和位置;如果高16位不为0,则将高16位与低16位相加,再看得出... -
IP数据报首部字段分析
2020-01-29 11:22:48IP数据报首部字段分析 IP数据报传输使用的是网络字节序,网络字节序是大端字节序 IP数据报首部一般为20个字节(没有选项的情况),最大是60字节,60字节的计算在首部长度字段中 版本号 区分IPv4和IPv6 IPv4是0100 ... -
IP首部校验和计算与程序设计
2020-11-25 09:49:08IP包的首部校验和的计算与程序设计一,感受与实验基本要求1.1 实验目的1.2 实验要求二,实验内容2.1 IP首部的基本校验方法2.2流程图2.3编程思路2.3.1得到数据并进行标准化2.3.2 信息合并后,把字符串转换成十进制,... -
IP数据报首部首部检验和的计算问题?
2015-10-14 05:34:12IPV4数据报的首部长度为5,数据总长度为80字节,数据报的标识为1,未分片, TTL值为4,封装的是TCP数据,源地址和目的地址分别是192.168.20.86和192.168.21.20, 请对IP数据报进行首部校验。