《TCP/IP详解 卷一:协议》第5章的IPv4数据报的Checksum(校验和)字段的计算(这里才能解开你的困惑)

这篇具有很好参考价值的文章主要介绍了《TCP/IP详解 卷一:协议》第5章的IPv4数据报的Checksum(校验和)字段的计算(这里才能解开你的困惑)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先,我当你看过书,但是比较懵。

1,实例说明Checksum(校验和)的计算步骤

直奔主题,分析一下这个Checksum(校验和)怎么算出来的。

先用Wireshark随便抓一个UDP或TCP包分析一下。

ipv4 checksum error,TCP/IP详解,Windows,MacOS,tcp/ip,网络,网络协议

如上面,我们得到IP帧头部实际数据(十六进制):

45 00 00 34 fd 34 40 00 80 11 79 46 c0 a8 63 64 31 07 2f 2a

我们看到Wireshark分析出来的Header Checksum是0x7946,下面我们计算验证一下。

Step1:根据IPv4头部格式,我们知道第11和12个字节是要填写的Checksum,先把这两个字节都设置为0,得到

45 00 00 34 fd 34 40 00 80 11 00 00 c0 a8 63 64 31 07 2f 2a

Step2:每两个字节组成一个数字,然后累加

4500 + 0034 + fd34 + 4000 + 8011 + 0000 + c0a8 + 6364 + 3107 + 2f2a =3 86B6

提示:可以把整个算式连同等号粘贴到Windows计算器(程序员模式,HEX方式)能得到结果。

Step3:把后面两个字节组成的数字86B6 和 进位3相加,上面的 3 86B6,分开两个数相加就是

3 + 86B6 = 86B9,一般是写成 86B6 + 3 = 86B9

Step4:取反

~(86B9)=~(1000 0110 1011 1001)=0111 1001 0100 0110=7946 (十六进制!)

所以得到Checksum是0x7946 是对的。

上面是发送端计算出checksum的过程。

下面是接收端校验的过程:

接收到得到数据:45 00 00 34 fd 34 40 00 80 11 79 46 c0 a8 63 64 31 07 2f 2a

同样也是先把checksum两个字节先忽略(当0000),然后每两个字节组成一个数,累加:

4500 + 0034 + fd34 + 4000 + 8011 + 0000 + c0a8 + 6364 + 3107 + 2f2a =3 86B6

进位数加到低位,再变成 3 + 86B6 = 86B9

注:上面几个步骤跟发送端是一样的。

然后再加上checksum这个数:86B9+7946=FFFF

取反:~(FFFF)= 0000

结果是0000就证明没错。

2,解惑时刻

这本书举例说的补码、反码(如下图),跟我们开始接触计算机学到的补码、反码是两码事!

ipv4 checksum error,TCP/IP详解,Windows,MacOS,tcp/ip,网络,网络协议

或者你可以这么理解,这里说的数字都是无符号整数,正整数的补码就是自己,所以这里说的补码根本不是什么补码,就是本身;

这里说的反码,只是简单的按位取反!按位取反!(不是以前学的,正整数的反码是自身,不是.)

关键是求和的时候,是每16位(2个字节)组成一个数字 再累加的!

1E4FF怎么得来的?就是E34F+2396+4427+99F3+0000=1E4FF

接下来为什么 E4FF + 1 不是 E4FF + 2 ?因为刚才算的结果是1E4FF,进位数是1,如果得到的结果是9E4FF,那这一步就是 E4FF + 9。(那为什么要这么加呢?这就要搬出阿贝尔群了)

接下来就是取反操作了。

大家可以看下IETF的文档,里面甚至有C语言示例代码。

RFC 1071 - Computing the Internet checksum

3,阿贝尔群(Abelian Group)

这里只是顺便提一下。阿贝尔群概念相对简单,就是满足一般群的4个公理,又满足交换律公理:

交换性(Commutativity):对于G 中任意两个元素a,b, 满足a⋅b = b⋅a

这就OK了,阿贝尔群又叫交换群。

对于群的概念,要注意理解的是,中间点"⋅"运算符虽然被叫为"乘法",实际上,它只是代表一种运算,可以是加法,也可以是乘法,或者减法、位运算

至于上面Checksum背后的数学性质与阿贝尔群的关系,书上有解释,在此不赘述。

书中有句话:对于16位的十六进制值 集合V = { 0001, ..., FFFF } 与其反码和运算 "+"共同形成一个阿贝尔群。

——这句话的说明了,定义" + "为 二进制反码和  运算,这个很关键。同样,这里的反码是按位取反的意思。

——书上说:对于V中的任何X,e + X = X + e = X,其中 e = FFFF。为什么呢?这里面有一步很关键的操作就是,进位数要加到低位去,举个栗子(都是十六进制数为例):FFFF + 0001 = 10000,进位为1,加到0000,结果就是0001,这才满足e + X = X  (e = FFFF),不然你打死都不明白。

——这里吐槽一下书上把group翻译为组是不对的,正确的是“群”。文章来源地址https://www.toymoban.com/news/detail-756575.html

到了这里,关于《TCP/IP详解 卷一:协议》第5章的IPv4数据报的Checksum(校验和)字段的计算(这里才能解开你的困惑)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【软考网络管理员】2023年软考网管初级常见知识考点(10)- 网际协议IP及IPV6,IPV4详解

    分类的IP地址,子网划分,CIDR和路由汇聚,IPV4数据报格式,IPV6协议,软考网络管理员常考知识点,软考网络管理员网络安全,网络管理员考点汇总。 原创于:CSDN博主-《拄杖盲学轻声码》,更多考点汇总可以去他主页查看 更多考试总结可关注CSDN博主-《拄杖盲学轻声码》 这

    2024年02月11日
    浏览(18)
  • IP 协议报文格式 【IPv4】

    前言: IP 数据报文由首部(称为报头)和数据两部分组成;首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的;在首部的固定部分的后面是一些可选字段,其长度是可变的 每个 IP 数据报都以一个 IP 报头开始;源计算机构造这个 IP 报头,而目的计算机利用

    2024年02月07日
    浏览(21)
  • IP 报文格式详解(IPv4、IPv6)

    中文名 英文名 长度 bit(位) 解释 版本 Version 4 IP 协议版本号,固定为 4 首部长度 Internet Header Length, IHL 4 以 4 字节 为单位,最小值 5(20Byte) ,最大值 15(60Byte) 服务类型 Type of Service, TOS 8 几乎不用 总长度 Total Length 16 整个数据报的长度, 2 16 − 1 = 65535 2^{16} -1 = 65535

    2024年02月10日
    浏览(20)
  • 《TCP/IP详解 卷一》第1章 概述

    目录 1.1 体系结构原则 1.2 设计和实现 1.3 TCP/IP协议族结构和协议 1.4 Internet、内联网、外联网 1.5 设计应用 1.6 标准化进程 1.7 实现和软件分发 1.8 Internet攻击 1.9 总结 TCP/IP来源于ARPANET TCP/IP免费 不保留消息边界会粘包造成,如TCP。 解决方法:         标记消息长度      

    2024年02月22日
    浏览(18)
  • 配置linux net.ipv4.ip_forward数据包转发

    出于系统安全考虑,在默认情况下,Linux系统是禁止数据包转发的。数据包转发指的是当主机拥有多个网卡时,通过一个网卡接收到的数据包,根据目的IP地址来转发数据包到其他网卡。这个功能通常用于路由器。 如果在Linux系统中需要开启路由转发功能,必须要配置一个内核

    2024年02月11日
    浏览(31)
  • 网络层之IP数据报格式、数据报分片、IPv4、子网划分和子网掩码

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需写作干货注入能量… 热爱写作,愿意让自己成为更好

    2024年02月05日
    浏览(22)
  • IPv4,IPv6,TCP,路由

    ip : 网际协议,IP协议能让世界上任意两台计算机之间进行通信。 IP协议的三大功能: 寻址和路由 传递服务:不可靠(尽最大努力交付传输数据包),可靠性由上层协议提供;无连接 数据包分片重组 OSI七层架构(理论) 和 TCP/IP的4层架构(实现) IP的主要作用是在复杂的网络

    2024年02月11日
    浏览(24)
  • 【计算机网络笔记】Internet网络的网络层——IP协议之IP数据报的结构

    什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)——时延带宽积、丢包率、吞吐量/率 计算机网络体系结构概念 OSI参考模型

    2024年02月05日
    浏览(20)
  • 解析 IP(IPv4)地址

    为了保证正常通信,有必要为每个设备配置正确的 IP 地址。在互联网通信中,全世界都必须设定正确的IP地址。否则,根本无法实现正常的通信。而在用 TCP/IP 进行通信时,需要用 IP 地址识别主机和路由器。 IPv4 地址在计算机中是由如下这样构成的 四组二进制数 每组八位二

    2024年04月28日
    浏览(20)
  • 验证IP地址IPv4和IPv6

    编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址 IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(\\\".\\\")分割。比如,172.16.254.1; 同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。 IPv6 地址由8组16进制的数

    2024年02月10日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包