Internet 校验和(Checksum)仅计算头部的正确性,这一点很重要,这意味着 IP 协议不检查 IPv4 packet 有效载荷部分的数据正确性。为了保证有效载荷部分的正常传输,其他协议必须通过自己的协议数据完整性检测机制来保护重要数据。我们可以看到在封装在 IP 的几乎所有协议(UDP、TCP、ICMP、IGMP)在自己头部中都有一个涵盖头部数据的校验和。

IPv6 放弃了校验和字段。原因如下:位错误带来的后果一般是数据被投递到错误的目的地、数据的来源显示错误、有效载荷中的位错误。由于位错误比较少见,而且其他上层协议的字段提供了对有效载荷部分的更有力的确保正确性的机制,因此IPV6删除了这个字段。

特别的,当 IPv4 的数据包经过一台路由器时,TTL 字段减一会导致头部校验和的重新计算,即每一跳路由都会导致校验和的重新计算。

校验和检测失败时 IPv4 将直接丢弃接收到有误的数据包不会生成差错信息,更高层需要以某种方式检测丢失的数据报并在必要时重新传输。

internet校验和的内容

Internet 校验和的内容如下

  1. 将校验和的字段设置为零。
  2. 将整个头部(仅有 header 部分)认为是一个 16 bits integer 的一个序列。计算这一系列的 16 位整数的反码和。将运算结果存放到校验和字段内。
  3. 收到 IPv4 packet 时,对整个 header (校验和字段不是 0 而是有填充)进行相同的计算。反码和结果应该为 0 ,代表数据无误。若非 0 ,则代表数据有误

实例

例如要发送的 packet 内容是 :E3 4F 23 96 44 27 99 F3 【00 00】 (checksum 字段清零)

将整个序列看成 16 位的整数,一个十六进制数是 4 bits,所以要看成 4 个十六进制数为一个整数。

二进制反码求和:从低位到高位逐列进行和计算,如果最高位(16位)进位,则得到的结果加1,一直循环到最高位没有进位为止.最后把得到的结果取反.

可以用如下的简单方法求反码和:对几个数进行补码和,也就是我们通常所用的加法,然后将进位的数字加到最低位。

最后把结果取反。

  • 补码和:E34F + 2396 + 4427 + 99F3 = 1E4FF
  • 反码和:进位的数字加到最低位:E4FF + 1 = E500
  • 取反:checksum = ~(E500) = 1AFF

则填充 checksum 之后发送的 packet 内容变成:E3 4F 23 96 44 27 99 F3 【1A FF】

接收方检测过程:计算包括 checksum 在内的整个 packet 的反码和,再取反。

  • 补码和:E34F + 2396 + 4427 + 99F3 + 1AFF = 1FFFE
  • 反码和:进位的数字加到最低位:FFFE + 1 = FFFF
  • 取反结果 = ~(FFFF) = 0

若结果为 0 ,说明数据在传输过程中没有发生变动。若结果不为 0 ,则数据在传输过程中有变动、受损。

数学性质

这里运用到离散数学中关于群论的知识点。

集合 G 不为空集,在 G 上的二元运算满足封闭性、结合律、存在单位元、每个元素都有逆元,则称<G, +> 为群,若满足交换律,则称群 G 为阿贝尔群。

可以通过观察发现,16 位整数的一个十六进制值序列集合 V = {0001,0002,...,FFFF} ,定义 + 为二进制反码和运算,<V, +> 构成阿贝尔群

  • 对于任意的 X,Y in V, (X + Y) in V [封闭]
  • 对于任意的 X,Y,Z in V, X + (Y + Z) = (X + Y) + Z [可结合]
  • 对于任意的 X in V, e + X = X + e = X ,e = FFFF [单位元 e 是 FFFF]
  • 对于任意的 X in V, 存在 X′ in V 使 X + X′ = e [每个元素都存在逆元]
  • 对于任意的 X,Y in V, (X + Y) = (Y + X) [交换律]

事实上,观察构造 checksum 的过程我们可以得知:checksum 其实是前面 4 个 16 bit integer 做二进制反码和运算(下文用 ‘+’ 代替)的结果的取反取反这个操作特别的有意思,因为你对任何一段长度为 n 的二进制数据取反,与原来的数据相加,结果一定是长度为 n 的 1 串。

例如:1011,取反是 0100。1011 + 0100 = 1111

所以,对于 16 bit integer,这个结果一定是 FFFF。FFFF 在我们前面的分析中,就是阿贝尔群<V, +>单位元!所以我们可以得出一个结论:在构造 packet checksum 时,checksum 其实就是其余数据在群<V, +>中的逆元!!

当收到 packet 的一方,在做验证的时候,因为前面的 4 个 16 bit integer 和后面这 2 个字节的 checksum 是互为逆元的,所以对它们进行 + 的运算结果一定是单位元 FFFF。而由于整个运算集合构成了一个群,因此确保了每一个元素都有一个对应的逆元,也就证明了:如果检验和检测正确,意味着数据完好,如果出错,意味着数据受损。

关于这个十六位整数的十六进制值序列集合,非常让人感兴趣的一点是 其中没有 0000。这是为什么呢?我们考虑一下,如果将数字0000放入集合,则 <V, +> 不再是一个阿贝尔群。

0000 显然可以作为单位元 e。对于群,每个元素都要有一个逆元,取随意的元素 AB12 来说,需要有一个逆元 X′ + AB12 = 0000,这样的 X′ 在<V, +>是不存在的。因此,我们需要排除 0000 ,使得<V, +> 构成阿贝尔群。

那么排除 0000的道理又何在呢?首先,排除 0000 使得<V, +>是一个阿贝尔群,之前已经说过了。第二条理由是,任何一个合法的 IPv4 包,不可能所有的字节都为 0 。如果要将 0000 纳入群众,则是考虑存在一个合法的 IPv4 包,除了 checksum 之外的字节都为 0 的情况,而这种情况

  1. 会导致<V, +> 不再是一个阿贝尔群。
  2. 实际是不存在的,不存在任何一个合法的 IPv4 头部全是 0 的情况。

因此我们可以排除 0000,由此推断出 Internet 校验和的群属性。


参考链接:http://blog.csdn.net/qq_34369618/article/details/60603867

Internet 校验和的数学性质的更多相关文章

  1. gym101201J Shopping 二分+RMQ+数学性质

    题目传送门 题目大意: 给出n个商品的价格,排成一列,q次查询,每次查询如果你有x的钱,从l格子走到r格子,每种商品有无数个,能买就买,最后还会剩多少钱. 思路: 每一次买都要找离自己最近的且买的起的 ...

  2. TCP-IP详解笔记3

    TCP-IP详解笔记3 地址解析协议 IP协议的设计目标是为跨越不同类型物理网络的分组交换提供互操作. 网络层软件使用的地址和底层网络硬件使用的地址之间进行转换. 对于TCP/IP网络,地址解析协议( ...

  3. 《统计推断(Statistical Inference)》读书笔记——第5章 随机样本的性质

    有了前四章知识的铺垫,第五章进入了统计研究的正题——样本的研究.样本可以说是统计学研究中最基本的对象,样本的数学性质也是最重要的研究课题,统计学的一大任务就是从一大堆样本中提取出有价值的知识,正如对原 ...

  4. PCA的数学原理

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维 数据的 ...

  5. PCA数学原理

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...

  6. PCA的数学原理(转)

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...

  7. TCP/IP 笔记 - Internet协议

    IP是TCP/IP协议族中的核心协议,TCP.UDP.ICMP.IGMP数据都通过IP数据报传输.IP提供了一种"尽力而为.无连接"的数据交付服务:尽力而为表示不保证IP数据报能成 ...

  8. pca数学原理(转)

    PCA的数学原理 前言 数据的向量表示及降维问题 向量的表示及基变换 内积与投影 基 基变换的矩阵表示 协方差矩阵及优化目标 方差 协方差 协方差矩阵 协方差矩阵对角化 算法及实例 PCA算法 实例 ...

  9. opencv——PCA(主要成分分析)数学原理推导

    引言: 最近一直在学习主成分分析(PCA),所以想把最近学的一点知识整理一下,如果有不对的还请大家帮忙指正,共同学习. 首先我们知道当数据维度太大时,我们通常需要进行降维处理,降维处理的方式有很多种, ...

随机推荐

  1. 使用CURL模拟表单上传文件

    //以下代码适合PHP7.x PHP5.6$file = new CURLFile('./127.zip','application/octet-stream');$file->setMimeT ...

  2. day 92 跨域和CORS

      跨域和CORS   本节目录 一 跨域 二 CORS 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 跨域 同源策略(Same origin policy)是一种约定, ...

  3. 20155212 C语言实现linux下pwd命令的两种方法

    20155212 C语言实现linux下pwd命令的两种方法 学习pwd命令 通过man pwd命令查看 pwd [OPTION],一般不加参数 -P显示当前目录的物理路径 -L显示当前目录的连接路径 ...

  4. docker for windows 使用mssql2017

    原文:docker for windows 使用mssql2017 确实有些坑,本来之前坑都踩过了,但是时间一久就忘记了,这次换电脑又都踩了一遍. 几个要点(坑): 1.docker安装时默认就好.然 ...

  5. C#调整图片亮度和对比度

    BitmapSource bitmap = null; ; ; private void SetBrightness(int degree) { degree = degree * / ; Write ...

  6. Windows10放开Administrator权限

    手机上大家都喜欢使ROOT权限,root是超线用户的意思,但是Win10最高权限是Administrator管理员权限,但是系统默认是没有开启这个权限的需要系统安装好以后再次去开启. 方法/步骤 在桌 ...

  7. 【HEOI2016】序列

    题面 题解 很像最长不下降子序列对吧(废话) 设$up[i]$和$down[i]$分别表示$i$最大最小能取多少 注意到: $$ f[i] = max_j\left\{f[j]\right\} + 1 ...

  8. OpenStack入门篇(二十一)之VXLAN原理

    1.Vxlan的概念 VXLAN 全称 Virtual eXtensible Local Area Network.(虚拟扩展本地局域网)VXLAN 提供与 VLAN 相同的以太网二层服务,但是拥有更 ...

  9. AtCoder ExaWizards 2019 D Modulo Operations

    题意 给出一个长度为\(n\)的数列和数字\(X\),对于数列的每一种排列,其权值\(X\)依次对排列中的数取模,求出\(n!\)种情况最后剩下的数的权值和 分析 如果大的数字排在小的数字后面,那么大 ...

  10. cvc-complex-type.2.4.a: Invalid content was found starting with element 'display-name'

    cvc-complex-type.2.4.a: Invalid content was found starting with element 'display-name'. One of '{&qu ...