因特网使用的IP协议是无连接的,因此其传输是不可靠的。

这样easy使人们感到因特网非常不可靠,那为什么当初不直接把它设计为可靠的?

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

我们知道,传统的电信网的最基本的用途是进行电话通信。

普通的电话机很easy,没有什么智能,因此电信公司就不得不把电信网设计得很好,这样的电信网可以保证用户通话时的通信质量。这点对使用很easy的电话机的用户则是很方便的。

但电信公司为了建设可以确保传输质量的电信网则付出了巨大的代价(使用昂贵的程控交换机和网管系统)。

数据的传送显然必须是非常可靠的。当初美国国防部在设计 ARPANET 时有一个非常重要的讨论内容就是:“谁应当负责传输数据的可靠性?”这时出现了两种对立的意见。

一种意见是主张应当像电信网那样,由通信网络负责传输数据的可靠性(由于电信网的发展历史及其技术水平已经证明了人们能够将网络设计得相当可靠)。但还有一种意见则坚决主张由用户的主机负责传输数据的可靠性。这里最重要的理由是:这样能够使计算机网络廉价、灵活,同一时候还能够满足军事上的各种特殊的需求。

以下用一个简单样例来说明这一问题。

设主机 A 通过因特网向主机 B 传送文件(例如以下图所看到的)。如何才干实现文件数据的可靠传输呢?

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

但设计计算机网络的人採用第二种思路。即设法实现端到端的可靠传输。

提出这样的思路的人觉得,计算机网络和电信网的一个重大差别就是终端设备的性能差别非常大。

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

第二,即使网络可以实现
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 协议。使得端到端的传输数据成为可靠的,因此这样扩大了范围的因特网就成为可靠的网络。



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



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

因特网的IP协议是不可靠无连接的,那为什么当初不直接把它设计为可靠的?的更多相关文章

  1. TCP/IP协议原理与应用笔记23:路由选择模块 和 路由表的设计

    1. 路由选择模块 和 路由表的设计 2. 路由选择算法(路由模块在路由表中查找算法) (1)用IP分组中的目的IP地址查找路由表,使用匹配表项的下一跳地址完成分组交付 (2)匹配条件: dIP &a ...

  2. TCP/IP协议原理与应用笔记24:网际协议(IP)之 IP协议的简介

    1. IP协议:(网际协议) 2. IP协议(不可靠无连接数据报协议) (1)连接 vs. 可靠性 连接:面向连接.无连接 可靠:差错控制.流量控制等 面向连接不一定保证可靠,无连接不一定不可靠 在连 ...

  3. 计算机网络自学之路-----IP协议(3)

    前面一期说到了IP层的IP协议跟ARP协议,因为IPV4协议自身有些不足的地方,为了弥补这些不足,又引入了一些别的协议.觉得这种弥补方式治标不治本~~ 1)ICMP网络控制报文协议 2)CIDR无类域 ...

  4. 【TCP/IP 协议】 TCP/IP 基础

    总结 : 通过学习 TCP/IP 基础, 并总结相关笔记 和 绘制思维导图 到博客上, 对 TCP/IP 框架有了大致了解, 之后开始详细学习数据链路层的各种细节协议, 并作出笔记; 博客地址 : h ...

  5. tcp ip协议笔记(1)——简单介绍

    前言 本人记性不佳,看书健忘,以此笔记来记录看书后自己所知所想,已达到加深对tcp ip的理解.本笔记不过我看完书后自己所写的总结,权当是书后复习. 一.为什么会有tcp ip协议        ...

  6. tcp/ip协议学习笔记一

    一. 简述 以前在学校学习计算机网络的时候学习多是网络7层模型OSI,了解了一些基本的计算机网络概念和协议通信格式,但是一直没弄明白其中的原理,包括各层之间的关系,应用,还有一些常见的令牌环网到底是什 ...

  7. OSI七层模型详解 TCP/IP协议

      总结 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 表示层 数据格式化,代码转 ...

  8. TCP、UDP、IP 协议分析

    http://rabbit.xttc.edu.cn/rabbit/htm/artical/201091145609.shtml  http://bhsc881114.github.io/2015/06 ...

  9. TCP、UDP、IP协议分析

    此篇文章的原创作者是:草根老师博客(程姚根) chengyaogen.blog.chinaunix.net 感谢原作者! 互连网早期的时候,主机间的互连使用的是NCP协议.这种协议本身有很多缺陷,如: ...

随机推荐

  1. ean128与code128 条形码 算法分析

    [code128条形码组成] 除终止符(STOP)由13个模块组成外,其他字符均由11个模块组成 就是说,如果用‘1’表示黑线(实模块),用‘0’表示白线(空模块),那么每表示一个字符就需要11条线, ...

  2. FastDFS的学习与使用(大量帖子)

    http://www.oschina.net/p/fastdfs http://bbs.chinaunix.net/forum-240-1.html

  3. wxWidgets帮助文档(1)

    IMPLEMENT_APP IMPLEMENT_APP(className) 这是在应用程序中使用类的实现文件的应用程序类wxWidgets动态建筑.你用这个代替Old form: MyApp myA ...

  4. Cookie 路径在本机测试及服务器部署,在浏览器处理方式上的不同

    Table of Contents 1 问题场景 2 解决过程 2.1 cookie是否设置成功 2.2 cookie是否上传到服务器 3 总结 1 问题场景 最近在学用Python进行web开发,写 ...

  5. 恢复PasswordChar 默认值、取消密码框设置

    //三种都是清空 this.textBox1.PasswordChar = new char(); this.textBox1.PasswordChar = '\0'; this.textBox1.P ...

  6. 1352 - Colored Cubes (枚举方法)

    There are several colored cubes. All of them are of the same size but they may be colored differentl ...

  7. ArcGIS 10.3 for Desktop新特性介绍

    ArcGIS 10.3是一个完整公布的ArcGIS平台,它包含新的产品(ArcGIS Pro),针对10.2版本号产品进行了功能增强和稳定性的改进. ArcGIS 10.3 for Server新特性 ...

  8. 核心游记之 page_address_init

    lock_kernel()仅仅虚晃一枪就过去了. 紧接着来的是page_address_init include/linux/mm.h   #if defined(CONFIG_HIGHMEM) &a ...

  9. Swift - 获取屏幕点击坐标下所有对象(SpriteKit游戏开发)

    对于场景内对象元件的点击响应,我们可以在场景的touchesBegan()方法中内统一处理. SKScene中touchesBegan()是响应屏幕点击的方法,在这里面我们可以先获取点击位置下所有的对 ...

  10. java对象引用传递和值传递的一些总结

    1.对象作为函数的参数传递过去的时候,是以原对象的引用的方式传递的,更改参数对象的值,会影响原来的对象. 2.对象作为函数的返回值的时候,传递过来的也是一个引用传递,更改传递过来的对象的时候,会影响原 ...