为什么说 TCP/IP 是一个不确定性网络
目录
文章目录
- 目录
- 为什么应用层要做数据完整性校验?
- 链路层强校验
- 网络层弱校验
- 传输层弱校验
- 安全层超强校验
- 应用层超强校验
- 总结
为什么应用层要做数据完整性校验?
以太网的 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 字节。
此外,安全层在计算这些校验值时,还会加入密钥,只有发送方、接收方知晓,任何第三方都无法伪造。这样就真正实现了超过可靠性的数据完整性!
应用层超强校验
数据是通信的核心要素,如果数据错了,一切都是浪费感情!
所以,应用层做为最后一道管卡,要尽可能采用超强校验,来最大限度地保护数据的完整性!
总结
如果五层的校验,只能选择其中之三,那就选择:
- 链路层强校验
- 安全层超强校验
- 应用层超强校验
为什么说 TCP/IP 是一个不确定性网络相关推荐
- ip设置 kali 重置_在 Windows 系统中如何重置 TCP/IP 协议堆栈修复网络连接问题
Internet 在 TCP/IP 协议上工作,如果 TCP/IP 协议堆栈在 Windows 或任何其他操作系统(例如 Linux 或 MacOS)中无法正常工作,则您的 Internet 连接会出 ...
- 信息系统项目管理师教程(第3版)- OSI七层模型TCP/IP四层模型对应网络协议
一.OSI七层模型: 1.应用层 网络服务与最终用户的一个接口. 协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP 2.表示层 数据的表示. ...
- 第2章 OSI 参考模型与TCP/IP 模型-H3C认证网络工程师(H3CNE)
一.OSI参考模型和TCP/IP模型的产生背景 在网络发展的早期时代,网络技术的发展变化速度非常快,计算机网络变得越来越复杂,新的协议和应用不断产生,而网络设备大部分都是按厂商自己的标准生产,不能兼容 ...
- TCP/IP分层模型与网络认知
自从参加了工作,对于网络底层协议的透彻了解越来越在工作中占大比例,而以往在关于网络编程上,计算机网络基础也仅仅停留在who是tcp,who是http的层面,真正网络传输的一整套流程和模型没有基础性认知 ...
- 配置计算机名及工作组;TCP/IP地址配置;网络连通性测试
1:配置计算机名及工作组 1.1 问题 本例要求为修改计算机名并加入工作组: 1)设置计算机名:姓名拼音 2)设置工作组名:TARENA-NETWORK 1.2 方案 修改Windows 2008服务 ...
- 配置计算机名和工作组,TCP/IP地址配置,网络连通性测
1.配置计算机名及工作组 本例要求为修改计算机名并加入工作组: 1)设置计算机名:姓名拼音 2)设置工作组名:TARENA-NETWORK 1.2 方案 修改Windows 2008服务器的计算机名( ...
- 网络发展背景、TCP/IP五层模型、网络传输基本流程、ip地址与端口概念
网络基础(一) 计算机网络背景 网络发展 独立模式: (计算机之间相互独立) 网络互联: ( 多台计算机连接在一起, 完成数据共享) 局域网LAN: (计算机数量更多了, 通过交换机和路由器连接在一起 ...
- TCP协议经典数据--TCP/IP高效编程 : 改善网络程序的44个技巧
- 《图解TCP/IP》——第一章 网络基础知识
最新文章
- [翻译] Ruby Golf
- matlab 数据保存为txt excel mat
- 使用cordova serve build以及tomcat进行web 调试。
- sts在文件夹中显示_工作中很多问题,巧用Windows 10任务栏,几分钟快速解决
- Go服务迁到K8s后老抽风重启? 记一次完整的线上问题解决过程
- MySQL服务器硬件和操作系统调节
- oracle 群集 无存储,存储的群集注意事项 - 
Oracle® ZFS Storage Appliance 管理指南
- Kinect for Windows v2.0安装教程
- java 多态 优势
- 自学c语言中相关知识,设计出医院住院管理系统.要求如下所述:,C语言课程设计题Z目.doc...
- 猫影视接口相关及短网址
- 前端大牛们都学过哪些东西
- 128 数据库基本操作
- AID数据集的均值和方差
- 心理学效应:阿基米德与酝酿效应
- 基于神经网络的车牌识别,卷积神经网络车牌识别
- Yan LeCun会是AI界的居里夫人吗?
- Pycharm和Pytorch安装教程配置环境以及遇到的问题:
- she was A Phantom Of Delight
- gevent是什么?
热门文章
- OUYA游戏开发快速入门教程第1章了解OUYA及其设备
- python pillow库_python pillow模块用法
- 计算机网络方面国际三大顶级会议 - MOBICOM - SIGCOMM - INFOCOM
- 解决 win10 下载文件到某盘 没有权限
- MNE-Python专辑 (2) MNE中数据结构Raw及其用法简介(更新)
- 程序员们,今天就让她陪你们放松一下吧。她还有大宝剑哦。【原创】
- Persona 动画编辑器参考
- 深度学习近似建模,助力飞越「维数灾难」温度场
- 来自MIT的论文答辩、PPT教程,教你轻松应对毕业季和学术会议
- JSONPlaceholder使用