【Linux网络编程】因特网的IP协议是不可靠无连接的,那为什么当初不直接把它设计为可靠的?

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据同步 1个月
简介:

因特网使用的IP协议是无连接的,因此其传输是不可靠的。这样容易使人们感到因特网很不可靠,那为什么当初不直接把它设计为可靠的?


先打一个比方。邮局寄送的平信很像无连接的IP数据报。每封平信可能走不同的传送路径,同时平信也不保证不丢失。当我们发现收信人没有收到寄出的平信时,去找邮局索赔是没有用的。邮局会说:“平信不保证不丢失。怕丢失就请你寄挂号信”。但是大家并不会将所有的信件都用挂号方式邮寄,这是因为邮局从来不会随意地将平信丢弃,而丢失平信的概率并不大,况且寄挂号信要多花些钱,还要去邮局排队,太麻烦。总之,尽管寄平信有可能会丢失,但绝大多数的信件还是平信,因为寄平信方便、便宜


我们知道,传统的电信网的最主要的用途是进行电话通信。普通的电话机很简单,没有什么智能,因此电信公司就不得不把电信网设计得非常好,这种电信网可以保证用户通话时的通信质量。这点对使用非常简单的电话机的用户则是非常方便的。但电信公司为了建设能够确保传输质量的电信网则付出了巨大的代价(使用昂贵的程控交换机和网管系统)。


数据的传送显然必须是非常可靠的。当初美国国防部在设计 ARPANET 时有一个很重要的讨论内容就是:“谁应当负责数据传输的可靠性?”这时出现了两种对立的意见。一种意见是主张应当像电信网那样,由通信网络负责数据传输的可靠性(因为电信网的发展历史及其技术水平已经证明了人们可以将网络设计得相当可靠)。但另一种意见则坚决主张由用户的主机负责数据传输的可靠性。这里最重要的理由是:这样可以使计算机网络便宜、灵活,同时还可以满足军事上的各种特殊的需求。


下面用一个简单例子来说明这一问题。

设主机 A 通过因特网向主机 B 传送文件(如下图所示)。怎样才能实现文件数据的可靠传输呢?



如按照电信网的思路,就是设法(这需要花费相当多的钱)将不可靠的因特网做成为可靠的因特网。


但设计计算机网络的人采用另外一种思路,即设法实现端到端的可靠传输。


提出这种思路的人认为,计算机网络和电信网的一个重大区别就是终端设备的性能差别很大。电信网的终端是非常简单的、没有什么智能的电话机。因此电信网的不可靠必然会严重地影响人们利用电话的通信。但计算机网络的终端是有很多智能的主机。这样就使得计算机网络和电信网有两个重要区别。第一,即使传送数据的因特网有一些缺陷(如造成比特差错或分组丢失),但具有很多智能的终端主机仍然有办法实现可靠的数据传输(例如,能够及时发现差错并通知发送方重传刚才出错的数据)。第二,即使网络可以实现 100% 地无差错传输,端到端的数据传输仍然有可能出现差错。


为了说明这点,我们可以用一个简单例子来说明这个问题。这就是主机 A 向主机 B 传送一个文件的情况。


文件是通过一个文件系统存储在主机 A 的硬盘中。主机 B 也有一个文件系统,用来接收和存储从 A 发送过来的文件。应用层使用的应用程序现在就是文件传送程序,这个程序一部分在主机 A 运行,另一部分在主机 B 运行。


现在讨论文件传送的大致步骤:

(1)主机 A 的文件传送程序调用文件系统将文件从硬盘中读出。然后文件系统将文件传递给文件传送程序。

(2)主机 A 请求数据通信系统将文件传送到主机 B。这里包括使用一些通信协议和将数据文件划分为适当大小的分组。

(3)通信网络将这些数据分组逐个传送给主机 B。

(4)在主机 B,数据通信协议将收到的数据传递给文件传送应用程序在主机 B 运行的那一部分。

(5)在主机 B,文件传送程序请求主机 B 的文件系统将收到的数据写到主机 B 的硬盘中。


在以上的几个步骤中,都存在使数据受到损伤的一些因素。例如:

(1)虽然文件原来是正确写在主机 A 的硬盘上,但在读出后就可能出现差错(如在磁盘存储系统中的硬件出现了故障)。

(2)文件系统、文件传送程序或数据通信系统的软件在对文件中的数据进行缓存或复制的过程中都有可能出现故障。

(3)主机 A 或 B 的硬件处理机或存储器在主机 A 或 B 进行数据缓存或复制的过程中也有可能出现故障。

(4)通信系统在传输数据分组时有可能产生检测不出来的比特差错或甚至丢失某些分组。

(5)主机 A 或 B 都有可能在进行数据处理的过程中突然崩溃。


由此可看出,即使对于这样一个简单的文件传送任务,仅仅使通信网络非常可靠并不能保证文件从主机 A 硬盘到主机 B 硬盘的传送是可靠的。也就是说,花费很多的钱将通信网络做成为非常可靠的,对传送计算机数据来说是得不偿失的。既然现在的终端设备有智能,就应当把网络设计得简单些,而让具有智能的终端来完成“使传输变得可靠”的任务。

于是,计算机网络的设计者采用了一种策略,这就是“端到端的可靠传输”。更具体些,就是在运输层使用面向连接的 TCP 协议,它可保证端到端的可靠传输。只要主机 B 的 TCP 发现了数据的传输有差错,就告诉主机 A 将出现差错的那部分数据重传,直到这部分数据正确传送到主机 B 为止。而 TCP 发现不了数据有差错的概率是很小的。采用这样的建网策略,既可以使网络部分价格便宜和灵活可靠,又能够保证端到端的可靠传输。

这样,我们可以这样想像,将因特网的范围稍微扩大一些,即扩大到主机中的运输层。由于运输层使用了 TCP 协议,使得端到端的数据传输成为可靠的,因此这样扩大了范围的因特网就成为可靠的网络。

因此,说“因特网提供的数据传输是不可靠的”或“因特网提供的数据传输是可靠的”这两种说法都可以在文献中找到,问题是是怎样界定因特网的范围。如果说因特网提供的数据传输是不可靠的,那么这里的因特网指的是不包括主机在内的网络(仅有下三层)。说因特网提供的数据传输是可靠的,就表明因特网的范围已经扩大到主机的运输层。

再回到通过邮局寄平信的例子。当我们寄出一封平信后,可以等待收信人的确认(通过他的回信)。如果隔了一些日子还没有收到回信,我们可以将该信件再寄一次。这就是将“端到端的可靠传输”的原理用于寄信的例子。


参考网址:http://blog.csdn.net/shiniji_hh1126/article/details/5997671

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
21天前
|
负载均衡 网络协议 网络性能优化
动态IP代理技术详解及网络性能优化
动态IP代理技术通过灵活更换IP地址,广泛应用于数据采集、网络安全测试等领域。本文详细解析其工作原理,涵盖HTTP、SOCKS代理及代理池的实现方法,并提供代码示例。同时探讨配置动态代理IP后如何通过智能调度、负载均衡、优化协议选择等方式提升网络性能,确保高效稳定的网络访问。
141 2
|
20天前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
68 15
|
25天前
|
Ubuntu Unix Linux
Linux网络文件系统NFS:配置与管理指南
NFS 是 Linux 系统中常用的网络文件系统协议,通过配置和管理 NFS,可以实现跨网络的文件共享。本文详细介绍了 NFS 的安装、配置、管理和常见问题的解决方法,希望对您的工作有所帮助。通过正确配置和优化 NFS,可以显著提高文件共享的效率和安全性。
164 7
|
26天前
|
前端开发 网络协议 安全
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
|
26天前
|
域名解析 网络协议 关系型数据库
【网络原理】——带你认识IP~(长文~实在不知道取啥标题了)
IP协议详解,IP协议管理地址(NAT机制),IP地址分类、组成、特殊IP地址,MAC地址,数据帧格式,DNS域名解析系统
|
27天前
|
数据采集 安全 搜索推荐
HTTP代理IP纯净度 提升用户网络体验的核心竞争力
随着互联网发展,使用HTTP动态代理IP的需求日益增加。高纯净度的代理IP在隐私与安全、网络体验和业务运营方面至关重要。它能保护用户信息、提高数据安全性、确保访问速度和连接稳定,并提升业务效率与信誉度。
45 2
|
29天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
104 1
|
2月前
|
安全 搜索推荐 网络安全
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
86 11
|
2月前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
80 3
|
2月前
|
数据库连接 Linux Shell
Linux下ODBC与 南大通用GBase 8s数据库的无缝连接配置指南
本文详细介绍在Linux系统下配置GBase 8s数据库ODBC的过程,涵盖环境变量设置、ODBC配置文件编辑及连接测试等步骤。首先配置数据库环境变量如GBASEDBTDIR、PATH等,接着修改odbcinst.ini和odbc.ini文件,指定驱动路径、数据库名称等信息,最后通过catalog.c工具或isql命令验证ODBC连接是否成功。