精华内容
下载资源
问答
  • 文章主要介绍了IP数据首部检验和它的计算过程
  • IP首部检验和详细计算步骤

    千次阅读 2021-06-22 14:25:52
    前段时间在做计算机网络的期末课设,题目就是关于IP首部检验和的计算程序实现,要实现这个程序的首要步骤就是要明白计算原理。可是我翻来找去,发现课本上对这部分的描述十分的.......干净利索。 IP首部的检验不...

    前言

    前段时间自己在做计算机网络的期末课设,题目就是关于IP首部检验和的计算程序的实现,要实现这个程序的首要步骤就是要搞明白相关的计算原理。可是我翻来找去,发现课本上对这部分的描述十分的.......干净利索。

    IP首部的检验和不采用复杂的CRC检验码而采用下面的简单计算方法:

    在发送方,先把IP数据报首部划分为许多16位字的序列,并把检验和字段置零。用反码算术运算把所有16位字相加后,将得到的和的反码写入检验和字段。

    接收方收到数据报后,将首部的所有16位字再使用反码算术运算相加一次。将得到的和取反码,即得出接收方检验和的计算结果。

    若首部未发生任何变化,则此结果必为0,于是就保留这个数据报。否则即认为出差错。

     说句实话,当时我看完这段话之后,本来只有一个问题在阻碍着我,然后一个问题就变成了很多的问题。

    既然课本看不懂那我就去网上找找,没想到找到的结果也和课本上差不多,基本没啥用。给的例子看着好像很详细,实际上知识点非常的混乱,东说一句,西说一句,在完全不了解原理之前这些东西简直就是天书(至少在当时的我看来是这样的)。不过好在最后还是通过为数不多的高质量文章知道了如何计算IP首部检验和及其具体计算步骤,所以在这做一个详细的计算方法的总结与说明,以尽可能的帮助那些有类似经历的朋友 。

    “什么是IP数据报”,“IP首部检验和是干什么用”,类似的理论叙述就不在这里详细阐述了,直接上方法。

    详细计算步骤

    要计算IP首部检验和,我们得先知道在IP数据报的固定部分里有什么字段(这个不是套话,很重要),以下12个字段是我们待会在计算过程中使用到的数据。

    ①版本(Version)   ②首部长度(Header Length)   ③区分服务(Differentiated Service Field) 

    ④总长度(Total Length)         ⑤标识 (Identification)            ⑥标志 (Flags)

    ⑦片偏移(Fragment Offset)   ⑧生存时间 (Time to Live)     ⑨协议(Protocol)

    ⑩首部检验和(Header CheckSum)        ⑩①源地址(Source Address) 

    ⑩②目的地址 (Destination Address)

    上面这张图是我在WireShark中随机抓取的一个IP数据报的报头部分的数据。

    通过分析这个数据报,结合上面说的12个字段,我们可以得到以下信息:

    (1)版本 = 4            (2)首部长度 = 5     (3)区分服务 = 0x00      (4)总长度 = 40

    (5)标识 = 5386 (0x150a)               (6)标志 = 0x40                 (7)片偏移 = 0

    (8)生存时间 = 128                            (9)协议 = 6                      (10)首部检验和 = 0x72e3

    (11)源地址 = 192.168.1.176            (12)目的地址 = 39.106.137.32

    这里稍微介绍一下“协议”字段,课本上对协议的字段值是这么说明的:

    协议名ICMPIGMPIPTCPEGPIGPUDPIPv6ESPOSPF
    协议字段值12468917415089

     即什么协议就取其对应的值,上面的数据报里的协议是TCP,所以取的值是6。

    在了解了上述知识点后,现在我们可以开始计算了。为了更为直观的说明计算过程,接下来均采用二进制数据作为计算数据。实际上,采用二进制数据进行计算与采用十六进制数据进行计算并无区别,读者可根据自身情况进行选择。 

    将上述11个字段(除了首部检验和)转为二进制这里提一嘴,在实际的程序中,包内的首部检验和是要置零然后要参与计算的,但是因为“将首部检验和置零参与计算”和“将首部检验和排除在外然后计算”,这两者在计算结果上没有任何区别。所以,遵循怎么简单怎么来的原则,在下面的计算步骤中就不再涉及首部检验和,大家心里有个数就好,并进行字段拼接。

    要注意的是,每个拼接的字段长度均为 16 位(拼接规则:每个字段括号内的数字为该字段转为二进制的最长位数,若该字段转为二进制后小于所规定的最长位数,则在该二进制首位添零,直至达到最长位数)。(“+”表示拼接)

    ① 版本(4) + 首部长度(4) + 区分服务(8)

    ② 总长度(16)

    ③ 标识(16)

    ④ 标志(8) + 片偏移(8)

    ⑤ 生存时间(8) + 协议(8)

    ⑥ 源地址第一部分(8) + 源地址第二部分(8)

    ⑦ 源地址第三部分(8) + 源地址第四部分(8)

    ⑧ 目的地址第一部分(8) + 目的地址第二部分(8)

    ⑨ 目的地址第三部分(8) + 目的地址第四部分(8)


    由此,将得到的11个字段通过上述转换,我们可以得到如下数据(“+”表示拼接):

    0100 0101 0000 0000(4 + 5 + 00)

    0000 0000 0010 1000(40)

    0001 0101 0000 1010(5386)

    0100 0000 0000 0000(40 + 0)

    1000 0000 0000 0110(128 + 6)

    1100 0000 1010 1000(192 + 168)

    0000 0001 1011 0000(1 + 176)

    0010 0111 0110 1010(39 + 106)

    1000 1001 0010 0000(137 + 32)

    将这 9 个二进制数据相加,我们可以得到 0010 1000 1101 0001 10100x2 8d1a

    可以看出,累加后的数据发生了进位,即 0b0010(0x0002)部分。

    是否发生了进位可以通过位数进行判断,以二进制为例,从最后一位开始向前数 16 位,超出的位数即进位部分(0010),若该二进制数刚好为16 位,则说明未发生进位。

    若发生了进位情况,只需要将进位部分(0010)与剩余部分(1000 1101 0001 1010)重新累加,直至得到的二进制数据位数等于 16 位,然后对该二进制数据取反码,即可得到首部检验和。此处可以用递归的思想实现,长度 > 16 继续递归,else return 当前计算结果

    0010(进位部分) + 1000 1101 0001 1010(剩余部分) = 1000 1101 0001 1100,此时位数为 16 位,未发生进位,则无需累加。对该二进制取反码,可以得到 0111 0010 1110 00110x72e3,该计算结果与包内IP首部检验和相同,计算完成。 

    结语

    以上就是IP首部检验和的计算步骤,都是较为详尽的步骤。对刚接触该方法的读者来说,个人建议采用二进制的计算模式,二进制在字段拼接上比较直观易懂,能使读者尽快的了解字段拼接规则。但二进制在计算方面较为冗长,容易在累加的过程中出现错误;如果读者对该计算思想有了较为清晰的认识,可以改为采用十六进制数据进行计算,这样在计算方面会比二进制简短不少,同时也不容易出错。

    展开全文
  • 计算首部检验和

    千次阅读 多人点赞 2020-06-26 18:50:44
    我们先看一下概念 是 一行 16位 相加 最后取反就是首部检验和了 看一下IP数据报的格式 例题: 0100 0101 0000 0000 // 4 5 ,0 0000 0000 0001 1100 //28 0000 0000 0000 0001 // 1 0000 0000 0000 0000 // 0 ...

    先看一下概念

    在这里插入图片描述

    我们先看一下概念 是 一行 16位 相加和 最后取反就是首部检验和了
    

    看一下IP数据报的格式

    在这里插入图片描述

    例题:

    在这里插入图片描述

    0100 0101 0000 0000   // 4 5 ,0
    0000 0000 0001 1100   //28
    0000 0000 0000 0001   // 1
    0000 0000 0000 0000   // 0
    0000 0100 0001 0001   // 4  17
    0000 1010 0000 1100   //10  12
    0000 1110 0000 0101   //14 5
    0000 1100 0000 0110   // 12  6
    0000 0111 0000 1001   // 7  9
    相加的和为:
    0111 0100 0100 1110
    取反
    1000 1011 1011 0001
    所以首部检验和为:  1000 1011 1011 0001
    
    展开全文
  • 首部检验和

    2021-07-26 17:25:38
    我们先看一下概念 是 一行 16位 相加 最后取反就是首部检验和了 1 看一下IP数据报的格式 例题: 0100 0101 0000 0000 // 4 5 ,0 0000 0000 0001 1100 //28 0000 0000 0000 0001 // 1 0000 0000 00...

    先看一下概念

    在这里插入图片描述

    我们先看一下概念 是 一行 16位 相加和 最后取反就是首部检验和了
    
      
    • 1

    看一下IP数据报的格式

    在这里插入图片描述

    例题:

    在这里插入图片描述

    0100 0101 0000 0000   // 4 5 ,0
    0000 0000 0001 1100   //28
    0000 0000 0000 0001   // 1
    0000 0000 0000 0000   // 0
    0000 0100 0001 0001   // 4  17
    0000 1010 0000 1100   //10  12
    0000 1110 0000 0101   //14 5
    0000 1100 0000 0110   // 12  6
    0000 0111 0000 1001   // 7  9
    相加的和为:
    0111 0100 0100 1110
    取反
    1000 1011 1011 0001
    所以首部检验和为:  1000 1011 1011 0001
    
    展开全文
  • IP首部校验的计算方法: 把校验字段清零,对每16位(2字节)进行二进制反码求和, 反码求和的意思是先对每16位求和,再将得到的转为反码。 IP数据报校验只对首部进行校验,不对数据部分进行校验。把首部看成16...


     

    IP首部校验和的计算方法:

    把校验和字段清零,对每16位(2字节)进行二进制反码求和, 反码求和的意思是先对每16位求和,再将得到的和转为反码。

    IP数据报校验只对首部进行校验,不对数据部分进行校验。把首部看成16位为单位的数字组成,依次进行二进制反码求和,再把结果依次存入校验和字段中即可。

    例题《计算机网络第八版》4.11

     0100 0101 0000 0000   // 4 5 ,0
    0000 0000 0001 1100   //28
    0000 0000 0000 0001   // 1
    0000 0000 0000 0000   // 0
    0000 0100 0001 0001   // 4  17
    0000 1010 0000 1100   //10  12
    0000 1110 0000 0101   //14 5
    0000 1100 0000 0110   // 12  6
    0000 0111 0000 1001   // 7  9
    相加的和为:
    0111 0100 0100 1110
    取反
    1000 1011 1011 0001
    所以首部检验和为:  1000 1011 1011 0001

    原文连接:(10条消息) 计算首部检验和_辉小歌的博客-CSDN博客_首部检验和

    展开全文
  • IP数据报首部检验和原理

    千次阅读 2020-10-31 21:09:45
    首部检验和 首部检验和,只检验数据报的首部,不包括数据部分。 在发送方,先把IP数据报首部划分为许多16位字的序列,并把检验字段置为0,用反码算术运算把所有16位字相加,将得到的的反码写入检验字段。 接收...
  • ip首部检验和代码

    2013-12-31 21:36:42
    IP首部检验和的一些源代码,适合做课设的大学同学们
  • IP_UDP首部检验和

    2013-04-06 00:08:03
    如何计算IP_UDP首部检验和
  • 首部检验和习题解析【计算机网络】

    千次阅读 多人点赞 2020-10-20 20:17:03
    试用二进制运算方法计算应当写入到首部检验和字段中的数值(用二进制表示)。 一行32位,一个小格4位,中格8位,大格16位,写法如下: 正常求和(不忽略进位) 0100 0101 0000 0000 0000 0000 0001 1100 0000 0000...
  • title: IP数据报中的首部检验和如何发挥作用? date: 2019-08-14 16:53:28 tags: - 计算机网络 - 科普 categories: - 计算机网络 在IP数据报的头部中的“首部检验和”字段,它的作用是为了校验数据报 头部 在传输中...
  • 首部检验和计算

    万次阅读 2016-08-09 15:39:23
    IP/ICMP/IGMP/TCP/UDP等协议的校验算法都是相同的,算法如下: 在发送数据时,为了计算IP数据包的校验。应该按如下步骤: (1)把IP数据包的校验字段置为0; (2)把首部看成以16位为单位的数字组成,依次...
  •  首先将检验和置零,求首部数据的补码(包含检验和),因为为零,所以无影响,再对所求结果求反码放入检验和就完成啦  PS:补码其实就是带循环进位的加法,如果有进位就不断累加最后多处来的再加到末位上即可...
  • 用反码算术运算把所有16位字相加后,将得到的的反码写入检验和字段。 非常疑惑,因为印象中对反码的理解是: 正数的反码是其本身 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反 在网上搜索...
  • IPV4数据报的首部长度为5,数据总长度为80字节,数据报的标识为1,未分片, TTL值为4,封装的是TCP数据,源地址目的地址分别是192.168.20.86192.168.21.20, 请对IP数据报进行首部校验。
  • 为什么要在IP首部在添加一个...(数据包在路由里传递时最少的时候只有目标MAC,TTL发生改变,增加首部检验和,可以至少有三项异同,生成CRC校验重复的可能性会降低)但我自己觉得不对,求解啊,这样设计的用意是啥!
  • Ip:首部检验和字段

    千次阅读 2016-09-22 21:39:09
    (1)把IP数据报的首部都置为0,包括校验字段。 (2)把首部看成以16位为单位的数字组成,依次进行二进制反码求和。 (3)把得到的结果存入校验字段中。 在接收数据时,计算数据报的校验相对简单,
  • IP 首部检验和算法

    2019-10-05 19:52:40
    原创博文,转载请注明出处。 在学习TCP/IP 详解的过程中遇到...然后,对首部中每个 16 bit进行二进制反码求和(整个首部看成是由一串 16 bit的字组成),结果存在检验和字段中。当收到一份I P数据报后,同样对首部...
  • IP数据报首部检验和字段分析

    千次阅读 2014-04-21 11:00:48
    说明: 1、算法思路:  IP/ICMP/IGMP/TCP/UDP等协议的校验算法都是相同的,算法如下: ... (2)把首部看成以16位为单位的数字组成,依次进行二进制反码求和;  (3)把得到的结果存入校验字段中。
  • 对于某个ip首部,如“45000028ea6340003406c11772705ddfc0a80a5d”, 要校验ip首部,首先把首部按每16bit进行求和,也就是: sum = 0x4500 + 0x0028 + 0xea63 + 0x4000 + 0x3406  + 0xc117 + 0x7270 + 0x5ddf + 0xc...
  • ip首部检验和算法

    2013-03-27 21:10:00
    最近在书中看到多次ip检验和算法,就找度娘问了一下,结果给出的答案也都大差不离,但是自己也不是很明白,就决定自己亲自实践计算一下,彻底的搞明白。工具:wireshark下面是ip首部的结构经过抓包后得到下图从图中...
  • 对IP首部检验和的理解

    千次阅读 2014-04-14 13:57:26
    很多文章对ip首部检验和的计算介绍得很简略,在理解上常常会比较困难。这篇文章是我自己的一些理解。或许也有不正确的地方,希望大家指正。 这个问题一直困绕了我很长时间,今天终于理解了。 我们可以通过spynet ...
  • IP首部检验和原理:在发送方,先把IP数据报首部划分为许多16位字的序列,并把检验字段置零。用反码算术运算把所有16位字相加后,将得到的的反码写入检验字段。接收方收到数据报后,将首部的所有16位字再使用...
  • IP/ICMP/IGMP/TCP/UDP等协议的校验算法都是相同的,算法如下:  在发送数据时,为了计算IP数据包的校验。应该按如下步骤:  (1)把IP数据包的校验字段置为0;  (2)把首部看成以16位为单位的数字组成...
  • java ip首部效验

    2020-12-07 20:31:32
    大学生网络实验课 (1)在界面上,用户能够输入或编辑IP协议包各字段数据,例如,“协议”字段应该是下拉选择 方式; (2)程序能够自动检查IP地址的合法性,且主机可用;...检验首部校验”字段的计算结果:
  • IP首部检验和计算

    千次阅读 2016-11-20 10:05:02
    计算IP首部检验和: 如上图,计算????是多少? 计算: 从08 00之后开始计算到后面的08 00即(两个字节的相加)45 00+00 20+D5 56+00 00+80 01+DE B7+45 5D+C0 A8+00 DC 等于 3800F 然后溢出的再次加到后面即 ...
  • 概念: 2.计算的流程: 3.实例: 补充:

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,161
精华内容 15,264
关键字:

首部检验和