目录

文章目录

  • 目录
  • 为什么应用层要做数据完整性校验?
    • 链路层强校验
    • 网络层弱校验
    • 传输层弱校验
    • 安全层超强校验
    • 应用层超强校验
  • 总结

为什么应用层要做数据完整性校验?

以太网的 CRC32 比较强,但它只能保证同一个网段上的通信不会出错(两台机器的网线插到同一个交换机上,这时候以太网的 CRC 是有用的)。


但是,如果两台机器之间经过了多级路由器呢?

我知道同一个以太网域内,Ethernet 的 FCS 尾部有 CRC32 字段会保证数据完整性,但是作者说在多级路由器之间传输的数据无法保证数据完整性。原因是什么呢,是不是因为 “由于多级路由器之间的传输不是使用的 Ethernet 协议栈,所以就没有 CRC32 等算法?”

那么问题来了,为什么路由器间的传输不做完整性校验呢?如果整个链路的每个传输环节都有类似于 CRC 这样的校验算法,那么是不是上层是不是就可以省略数据校验了?为什么实际情况下没有这样做呢?是成本因素考量?

还有一个问题就是,既然 MAC 帧已经有 CRC32 校验了,为什么位于运输层的 UDP 数据包仍然有 checksum 字段?

这个世界没有 100% 的可靠!即使电脑也会犯错,数据受到干扰更会犯错,甚至还有恶意的人为修改数据。那么互联网的专家们是如何最大限度保证数据的完整性的呢?

链路层强校验

通常数据离开电脑在各种介质中流淌的场合是最容易出错的,因为信号会有各种干扰。介质包括网线、光纤、空气,由于出错概率颇大,故数据链路层的数据完整性校验采用强校验,CRC 校验。

所谓强校验,是指一旦数据发生了错误,CRC 校验会高可靠性地检测倒错误并丢弃,可靠性可以达到 1-1/108。

以太网为例,一帧的数据大约 1500 字节,而 CRC 却要为这 1500 字节提供完整性,而 CRC 的取值空间去仅仅 4 个字节!对,你没有看错,仅仅 4 个字节,却要为 1500 字节服务。客人远远超出服务员的人数,能够达到高可靠性已经难能可贵了。

网络层弱校验

意味着数据链路层提交给 IP 层的数据,有可能是错误的。提交的过程是一次数据的复制过程,这里可能会引入错误,上文已经提到了这一点。浓眉大眼、五官端正的电脑竟然也会犯错,这实在是没有想到啊!

没有关系,IP 层不是还有 Checksum 校验吗?

有同学会说,CRC 是非线性的、高级校验算法,而 Checksum 不过是线性的、低级的校验和算法,CRC 没有校验出的,你 Checksum 能校验出吗?

尺有所长,寸有所短,真不好说 Checksum 是否能校验出 CRC 的疏漏。但是如果我告诉你,IP 层的 Checksum 主要目的是为了防止数据在电脑中的复制操作产生 IP 头数据错误错误,你可能就不会那么纠结了。因为 IP 校验压根不覆盖数据部分。

这里的核心思想是,距离数据的发源地越近的地方,将错误的数据丢弃,避免错误的数据奔袭万里贻害网络资源,善莫大焉!

传输层弱校验

不怕不怕,不是还有 TCP/UDP 的校验吗?

问题是 TCP/UDP 也是 Checksum 弱校验,既然是弱校验,意味着可靠性堪忧,尽然堪忧为何不采用强校验,例如 CRC 或 MD5 或 SHA 校验呢?

在设计 TCP/IP 时代,电脑的计算能力没有那么强大,CRC 耗费的 CPU 资源大,会让电脑一下子慢下来,而 Checksum 只是一个单纯的加法,耗费的 CPU 资源小,故 Checksum 胜出!

不怕不怕不怕啦,我们还有安全层的校验!

安全层超强校验

这里的安全层指的是业界妇孺皆知的 TLS,通常 TLS 的校验值空间具有 16 或 20 字节,取决于是 MD5 还是 SHA1。如果觉得可靠性不够,可以采用 SHA 512, 校验空间可以达到 64 字节。

此外,安全层在计算这些校验值时,还会加入密钥,只有发送方、接收方知晓,任何第三方都无法伪造。这样就真正实现了超过可靠性的数据完整性!

应用层超强校验

数据是通信的核心要素,如果数据错了,一切都是浪费感情!

所以,应用层做为最后一道管卡,要尽可能采用超强校验,来最大限度地保护数据的完整性!

总结

如果五层的校验,只能选择其中之三,那就选择:

  1. 链路层强校验
  2. 安全层超强校验
  3. 应用层超强校验

为什么说 TCP/IP 是一个不确定性网络相关推荐

  1. ip设置 kali 重置_在 Windows 系统中如何重置 TCP/IP 协议堆栈修复网络连接问题

    Internet 在 TCP/IP 协议上工作,如果 TCP/IP 协议堆栈在 Windows 或任何其他操作系统(例如 Linux 或 MacOS)中无法正常工作,则您的 Internet 连接会出 ...

  2. 信息系统项目管理师教程(第3版)- OSI七层模型TCP/IP四层模型对应网络协议

    一.OSI七层模型: 1.应用层 网络服务与最终用户的一个接口. 协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP 2.表示层 数据的表示. ...

  3. 第2章 OSI 参考模型与TCP/IP 模型-H3C认证网络工程师(H3CNE)

    一.OSI参考模型和TCP/IP模型的产生背景 在网络发展的早期时代,网络技术的发展变化速度非常快,计算机网络变得越来越复杂,新的协议和应用不断产生,而网络设备大部分都是按厂商自己的标准生产,不能兼容 ...

  4. TCP/IP分层模型与网络认知

    自从参加了工作,对于网络底层协议的透彻了解越来越在工作中占大比例,而以往在关于网络编程上,计算机网络基础也仅仅停留在who是tcp,who是http的层面,真正网络传输的一整套流程和模型没有基础性认知 ...

  5. 配置计算机名及工作组;TCP/IP地址配置;网络连通性测试

    1:配置计算机名及工作组 1.1 问题 本例要求为修改计算机名并加入工作组: 1)设置计算机名:姓名拼音 2)设置工作组名:TARENA-NETWORK 1.2 方案 修改Windows 2008服务 ...

  6. 配置计算机名和工作组,TCP/IP地址配置,网络连通性测

    1.配置计算机名及工作组 本例要求为修改计算机名并加入工作组: 1)设置计算机名:姓名拼音 2)设置工作组名:TARENA-NETWORK 1.2 方案 修改Windows 2008服务器的计算机名( ...

  7. 网络发展背景、TCP/IP五层模型、网络传输基本流程、ip地址与端口概念

    网络基础(一) 计算机网络背景 网络发展 独立模式: (计算机之间相互独立) 网络互联: ( 多台计算机连接在一起, 完成数据共享) 局域网LAN: (计算机数量更多了, 通过交换机和路由器连接在一起 ...

  8. TCP协议经典数据--TCP/IP高效编程 : 改善网络程序的44个技巧

  9. 《图解TCP/IP》——第一章 网络基础知识

最新文章

  1. [翻译] Ruby Golf
  2. matlab 数据保存为txt excel mat
  3. 使用cordova serve build以及tomcat进行web 调试。
  4. sts在文件夹中显示_工作中很多问题,巧用Windows 10任务栏,几分钟快速解决
  5. Go服务迁到K8s后老抽风重启? 记一次完整的线上问题解决过程
  6. MySQL服务器硬件和操作系统调节
  7. oracle 群集 无存储,存储的群集注意事项 - Oracle® ZFS Storage Appliance 管理指南
  8. Kinect for Windows v2.0安装教程
  9. java 多态 优势
  10. 自学c语言中相关知识,设计出医院住院管理系统.要求如下所述:,C语言课程设计题Z目.doc...
  11. 猫影视接口相关及短网址
  12. 前端大牛们都学过哪些东西
  13. 128 数据库基本操作
  14. AID数据集的均值和方差
  15. 心理学效应:阿基米德与酝酿效应
  16. 基于神经网络的车牌识别,卷积神经网络车牌识别
  17. Yan LeCun会是AI界的居里夫人吗?
  18. Pycharm和Pytorch安装教程配置环境以及遇到的问题:
  19. she was A Phantom Of Delight
  20. gevent是什么?

热门文章

  1. OUYA游戏开发快速入门教程第1章了解OUYA及其设备
  2. python pillow库_python pillow模块用法
  3. 计算机网络方面国际三大顶级会议 - MOBICOM - SIGCOMM - INFOCOM
  4. 解决 win10 下载文件到某盘 没有权限
  5. MNE-Python专辑 (2) MNE中数据结构Raw及其用法简介(更新)
  6. 程序员们,今天就让她陪你们放松一下吧。她还有大宝剑哦。【原创】
  7. Persona 动画编辑器参考
  8. 深度学习近似建模,助力飞越「维数灾难」温度场
  9. 来自MIT的论文答辩、PPT教程,教你轻松应对毕业季和学术会议
  10. JSONPlaceholder使用