第3章
Computer Networking Problems and Solutions: An Innovative Approach to Building Resilient, Modern Networks
网络传输建模
学习目标
阅读完本章,读者应该能够:
- 理解协议栈模型对网络工程的价值
- 理解美国国防部(Department of Defense,DoD)网络协议栈模型,包括每一层的目标
- 理解开放系统互连(Open Systems Interconnect,OSI)网络协议栈模型,包括每一层的目标
- 理解递归互联网架构(Recursive Internet Architecture,RINA)模型,以及它与DoD及OSI模型的区别
- 理解面向连接模型和无连接模型之间的区别
前一章所讨论的一系列问题和解决方案对网络传输系统的复杂性提出了一些观点。工程师如何才能处理这些系统中所涉及的显著复杂性呢?
第一种方法是研究传输系统所解决的基本问题,其中的每个问题都有一系列解决方案。第二种方法是建立模型来帮助理解传输协议:
- 帮助工程师按传输协议的作用、每个协议包含的信息以及协议之间的接口对协议进行分类。
- 帮助工程师了解需要提出哪些问题才能够理解某个特定的协议,或者理解一个特定的协议是如何与运行该协议的网络进行交互的,以及为哪些应用程序传输信息。
- 帮助工程师理解如何将一个个单独的协议组合起来构成一个传输系统。
第1章提供了关于传输问题及其解决方案空间的高层次概述。本章将讨论使工程师可以更全面地理解协议的第二种方式:模型。模型本质上是上一章所讨论的问题和解决方案的抽象表示。它们提供了一个更加可视化和模块聚焦的表示形式,并且展示了事物是如何组合在一起的。本章将详细讨论以下问题:
如何使传输系统模型化,使得工程师能够快速而充分地理解这些系统所需要解决的问题,以及如何将多种协议组合起来解决这些问题?
本章将讨论三种具体的模型:
- 美国国防部模型
- 开放系统互连模型
- 递归互联网架构模型
这三个模型都有着不同的作用和历史。本章还将讨论协议分类的第二种形式—面向连接和无连接。
3.1 美国国防部模型
20世纪60年代,美国国防部高级研究计划局(Defense Advanced Research Projects Agency,DARPA)赞助开发了一个分组交换网络,以取代电话网络作为计算机通信的主要方式。与传说不同的是,最初的想法不是源于在核爆炸中生存下来,而是为几所大学、研究机构和*机关的各种计算机创造一种互相通信的方式。当时,每种计算机系统都使用自己的物理连线、协议和附属的其他系统,因此无法将这些设备互相连接起来,甚至不能传输数据文件,更不用说创建“万维网”或跨平台执行软件之类了。这些原始模型一般是为了提供终端到主机的通信,因此可以安装一个远程终端并连接到一个办公室或共享空间,然后访问系统的共享资源或主机。围绕这些模型的许多论文反映了这一现实。
该领域最早的发展之一就是DoD模型,如图3-1所示。
图3-1四层DoD模型
DoD模型将跨越网络传输信息的工作分为四个不同的功能,每个功能都可以通过众多协议中的一个来执行操作。直到20世纪80年代末甚至90年代初,在每一层都有多个协议的想法一直被认为是有争议的。事实上,DoD模型和OSI模型的初始版本之间的一个关键概念区别就是:在每一层能否有多个协议。
在DoD模型中:
- 物理链路层负责将这些0和1的数据调制或序列化到物理链路上。每个链路类型都有一个不同的信号格式来表示一个0或者1;物理层负责将这些0和1转换为物理信号。
- 网络层负责在非同一物理链路连接的系统之间传输数据。因此,网络层提供了网络层的地址,而不是物理链路的本地地址,同时也提供了一些方法以发现到达目的地址的中间设备和链路集合。
- 传输层负责在通信设备之间构建和维护会话,并为数据流或数据块提供通用的透明数据传输机制。流量控制和可靠传输也可以在这一层实现,如TCP协议。
- 应用层是用户和网络资源之间的接口,或者是用户和特定应用程序之间的接口,这些应用程序使用并向连接到网络的其他设备提供数据。
特别是应用层,把它放在网络传输模型中似乎不太合适。为什么把使用这些数据的应用程序视为传输系统的一部分呢?因为在早期系统中,人是数据的最终用户,而应用程序主要是一种将数据呈现给最终用户的方式。许多机器到机器的处理,如在数据提交给用户之前对其进行大量处理,或者以数字格式对信息进行简单存储等,甚至被认为是不可行的使用场景。既然信息是从一个人传递到另一个人,那么应用程序就应该被认为是传输系统的一部分。
以下两个观点可能更有助于说明为什么将应用程序包含在传输系统之内。首先,在这些原始系统的设计中有两个组件:一个终端和一个主机。终端实际上是一台显示设备;应用程序安装在主机上。其次,网络软件并不被认为是系统中的一个独立存在;当时,路由器还没有被发明出来,也没有任何其他独立的设备来处理和转发数据包。相反,主机只是连接到终端或另一台主机;网络软件只是在这些设备上运行的另一种应用程序而已。
随着时间的推移,OSI模型的使用越来越普遍,DoD模型被修改为包含更多层。例如,如图3-2所示是从1983年关于DoD模型的论文中复制的一个图,它有七层(由于某些原因,7是一个神奇的数字)。
这里增加了三层:
- 公共业务层是一组介于传输层和应用层之间的协议。具体来说,简单邮件传输协议(SMTP)、文件传输协议(FTP)以及其他协议被视为该层的一部分。
- 四层版本的网络层被分为网间业务层和网络层。网络层表示在每个链路类型上使用不同的分组格式,如无线网络和以太网(在20世纪80年代初仍然非常新)。对于运行在网络上的应用程序和实用工具协议,网间业务层将它们统一为单个互联网数据报服务。
- 链路层是为了区分不同链路类型上的信息编码和设备到物理链路的连接,并非所有的硬件接口都提供了链路层。
随着时间的推移,这些扩展的DoD模型已经不再受欢迎;四层模型是当今最常被引用的模型。主要有如下几个原因:
- 在大多数情况下,公共业务层和应用层基本上是相互重叠的。例如,FTP在TCP之上多路传输内容,而不是在协议栈中作为一个单独的协议或者层。TCP和UDP最终被固化为传输层中的两个协议,其他协议(通常)在这二者之一上运行。
- 随着数据包转发设备(路由器和交换机)的发明,网络层和网间业务层之间的区分逐渐消除。二者最初的区分主要是在低速长距离(广域)链路和短距离局域链路之间;一般地,路由器承担了将链路安装到主机外的广域网中,因此这种区分就变得不那么重要了。
像链路层和物理层之间的分离所遇到的问题那样,有些接口类型根本没有办法将信令编码与主机接口分开。因此,在DoD模型中,这两个层通常被合并成一个单独的“层”。
DoD模型在历史上是重要的,因为:
- 这是第一次尝试将网络功能编码成一个模型。
- 设计了TCP/IP协议族(在其上运行全球互联网),这个模型对于理解TCP/IP协议设计的许多方面都非常重要。
- “内建”在模型的任何特定层都有多个协议的概念。这为缩小任何特定协议焦点范围并允许许多不同的协议在同一网络上同时运行的总体概念奠定了基础。
3.2 开放系统互连模型
从20世纪60年代到80年代,主要的通信形式是电路交换;发送方会要求一个网元(一个交换机)将其连接到一个特定的接收方,这个交换机将完成连接(在接收方不忙的情况下),并且通过所建立的电路进行通信。如果这听起来像一个传统的电话系统,那是因为它实际上就是基于传统网络系统(现在称为“普通老式电话服务”(POTS))。大型电话公司和计算机公司对这种模式进行了深度投资,并从围绕电路交换技术设计的系统中获取大量收入。随着DoD模型(以及一系列相关的协议和概念)开始在研究人员中流行起来,这些人决定建立一个新的标准组织,这个组织将建立一个替代系统,提供“两全其美”的服务。系统将包含分组交换的最佳组成部分,同时保留电路交换的最好元素,以创造一个新的标准,让每个人都满意。这个新的标准组织于1977年被提出,并作为国际标准化组织(ISO)的一部分获得通过。
这个新的ISO工作组设计了一个基于数据库通信,类似于分组模型提案(已被拒绝)的分层模型,其主要目标是允许在20世纪70年代后期占主导地位的大型数据库核心系统之间互相通信。该委员会被分为电信工程师团队和数据库团队,使标准变得非常复杂。所开发的协议需要提供面向连接和无连接的会话控制,并且发明了整个应用程序协议族来创建电子邮件、文件传输和许多其他应用程序(记住,应用程序是协议栈的一部分)。例如,需要编纂各种各样的传输模式,以便提供广泛的服务。直到1989年,整整十年过去了,规范还没有完全完成。尽管许多*、大型计算机制造商和电信公司在DoD协议栈和模型上支持它,但该协议并没有得到广泛的部署。
但是在这十年间,DoD协议栈仍在继续发展;互联网工程任务组(IETF)成为TCP/IP协议栈的领导者,主要为研究人员和大学(现在众所周知的互联网直到1992年才允许为商业流量)服务。随着OSI协议落地失败,许多商业网络和网络设备都转向TCP/IP协议族,以便“马上”解决现实世界的问题。
此外,由于TCP/IP协议栈是由美国*拨款资助开发的,所以这些规范是免费的。事实上,由于大学和研究生需要实现他们的研究成果,从而TCP/IP协议栈在广泛的系统中得到了实现。而OSI规范只能从国际标准化组织购买纸质版本,而且购买者只能是国际标准化组织的成员。国际标准化组织旨在成为一个“会员专用”的俱乐部,使得现有成员可以牢牢掌控分组交换技术的发展。但是,该组织的“会员专用”性质与业内人员有抵触,最终扮演了一个逐渐衰落的角色。
不过,OSI模型为促进网络工程的发展做出了许多贡献;例如,其对服务质量(QoS)和路由问题的关注在之后的几年中得到了回报。其中一个主要贡献是明确了模块化的概念;许多不同系统之间相互连接的复杂性以及许多不同的需求,推动了OSI社区明确责任界限,以及层间接口的清晰界定。
第二个贡献是机器与机器之间的通信概念。如图3-3所示,中间的几个方框(最初称为网关,现在称为路由器和交换机)被明确地视为网络模型的一部分。
图3-3 OSI模型(包括了中间系统的概念)
甚至不需要看这张图片就能记住OSI模型—因为所有参加过网络课程或者网络工程认证学习的人都熟悉使用七层模型来描述网络的运作方式。
通过这种方式建立网络,其特点在于使得不同部分之间的交互更容易被看到和理解。通过模型垂直移动,每一对相邻层都可以通过套接字或应用程序编程接口(API)进行交互。因此,如果要连接到特定的物理端口,数据链路层的一段代码将连接到该端口的套接字。这使得不同层次之间的相互作用能够被抽象化和标准化。网络层的一个软件不需要知道如何处理各种物理接口,只需要知道如何将数据传输到同一系统的数据链路层软件即可。
每一层都有一组特定的执行功能。
物理层,也称为第1层,负责将这些0和1数据调制或序列化到物理链路上。每个链路类型都以一个不同的格式来发送一个0或1;物理层负责将这些0和1转换成物理信号。
数据链路层,也称为第2层,负责将某些传输的信息实际发送到连接在同一链路中合适的计算机上。每个设备都有一个不同的数据链路(第二层)地址,可以用来向特定设备发送流量。数据链路层假定信息流中的每个帧与同一信息流中的所有其他帧是分开的,只提供通过同一物理链路连接的设备间通信。
网络层,也称为第3层,负责在非同一物理链路连接的系统之间传输数据。网络层提供了全网(或者第3层)地址,而不是链路的本地地址,还提供了一些方法来发现到达目的地址所必须经过的一组设备和链路。
传输层,也称为第4层,负责不同设备之间的透明数据传输。传输层协议可以是“可靠的”,这意味着传输层将会重新传输在较低层丢失的数据;也可以是“不可靠的”,这意味着在较低层丢失的数据必须通过某些更高层的应用程序来重新传输。
会话层,也称为第5层,并非真正地传输数据,而是管理在两台不同计算机上运行的应用程序之间的连接。会话层确保数据的类型、数据的形式以及数据流的可靠性,这些都是对外暴露并解释说明的。
表示层,也称为第6层,实际上是以某种方法来格式化数据,以便允许在这两个设备上运行的应用程序能够理解和处理数据。加密、流量控制,以及任何其他需要提供应用程序和网络之间接口的数据操作都发生在这一层。应用程序通过套接字与表示层交互。
应用层,也称为第7层,提供了用户和应用程序之间的接口,而应用程序又通过表示层与网络进行交互。
七层模型不仅可以精确地描述层与层之间的相互作用,而且可以精确地描述多台计算机上平行层之间的相互作用。第一台设备上的物理层可以与第二台设备上的物理层进行通信,第一台设备上的数据链路层可以与第二台设备上的数据链路层通信等。正如设备上两个层之间的相互作用通过套接字来处理一样,不同设备在平行层之间的交互通过网络协议来处理。
例如,以太网描述了物理线路上0和1的数字信号、一种启动和停止一个数据帧的格式,以及在所有连接到单个线路的设备中寻址单个设备的方法。因此,以太网属于OSI模型中的物理层和数据链路层(第1层和第2层)。
IP描述了将数据格式化为数据包,然后通过寻址和其他必要的方法,跨越多个数据链路层链路,将数据包发送到经过几跳后的设备上。因此,IP属于OSI模型的网络层(第3层)。
TCP描述了会话的建立与维护、数据重传以及与应用程序的交互。因此,TCP属于OSI模型的传输层和会话层(第4层和第5层)。
对于那些只涉及TCP/IP协议栈的工程师来说,一个更令人困惑的问题是:在OSI协议栈中设计的协议与设备进行交互的方式是不同的。在TCP/IP中,地址指的是接口(并且,在一个虚拟化程度很高的网络世界里,多个地址可以指向单个接口,或者一个选播的服务,或者一个多播数据流等)。然而,在OSI模型中,每个设备都有一个单独的地址。这意味着OSI模型中的协议经常由设备类型来引用。例如,在网络中传输可达性和拓扑(或路由)信息的协议称为“中间系统到中间系统”(IS-IS)协议,因为它在中间系统之间运行。还有一个允许中间系统发现终端系统的协议,被称为“终端系统到中间系统”(ES-IS)协议(没想到这么具有创造性的名字,是吗?)。
注意:这是网络工程史上令人悲哀的事实之一,TCP/IP协议族的支持者很早就不喜欢OSI协议套件了,以至于拒绝在开发过程中吸取那些经验教训。虽然近年来这在很大程度上已经变得相对温和了,但多年来一个协议因其起源而被拒绝,而非关注其技术的优点,这给网络工程上了一堂关于谦逊的课。对事不对人,把注意力集中在想法上,而不是人的身上。尽可能地向每个人和每个项目学习,不要让自我的狭隘影响到一个大型项目或者影响解决手头上的问题。
3.3 递归互联网架构模型
DoD模型和OSI模型有两个共同的特点:
- 它们都包含应用层;这在网络工程世界的早期场景中是有意义的,因为应用程序和网络软件都是一个大系统的一部分。
- 它们将什么数据应该包含在哪里的概念与特定层应该实现什么目标的概念结合了起来。
这导致了一些奇怪的问题,比如:
- 为独立实体(自治系统)之间提供路由(可达性)的边界网关协议(Border Gateway Protocol,BGP)在两个模型的传输层之上运行。BGP算是一个应用程序吗?同时,该协议提供了网络层运行所需的可达性信息,这使得BGP成为一个网络层协议吗?
- IPsec将信息添加到IP报头,并指定网络传输的加密信息。因为IP运行在网络层,而IPsec(这类的协议)在IP之上运行,这是否使得IPsec成为传输协议呢?或者,因为IPsec与IP并行运行,它是一个网络层协议吗?
对这些问题的争论为技术会议或者关于标准讨论会议提供了很多乐趣。然而,他们也指出这些模型的定义方式有些模糊。这种模糊性来自于这些模型中形式和功能的细密混合;它们描述了哪些信息被包含,谁使用信息,信息是怎么处理的,或者一个具体目标是否与网络信息传输所解决的具体问题相匹配?答案是—以上都是。或许,视情况而定。
这就导致了以下观察结果:任何数据传输协议只能提供四种功能,即传输、多路复用、纠错和流量控制。这些听起来很熟悉,因为这正是第2章所揭示的四种功能。
这四个功能可以自然分为两组,即传输和多路复用、差错和流量控制。因此,大多数协议可以分为两类:
- 该协议提供了传输,包括从一种数据格式到另一种数据格式的某种形式的翻译;以及多路复用,即协议能够将来自不同主机和应用程序的数据分开保存。
- 该协议对丢失或损坏的数据提供了纠正错误或重新传输的能力,即差错控制;以及流量控制,由于网络传输数据的能力与应用程序生成数据的能力不匹配,流量控制可防止不必要的数据丢失。
从这个角度来看,以太网提供了传输服务和流量控制,因此它是一个集中于网络中单个链路以及端口到端口(或隧道端点到隧道端点)的混合数据包。IP是一种提供传输服务的多跳协议(跨越多个物理链路的协议),而TCP也是一种多跳协议,它使用了IP的传输机制,并提供纠错和流量控制。图3-4说明了这一迭代模型。
图3-4 RINA模型
模型的每一层都有相同的两个功能之一,只是范围不同。这种模型在网络协议的运行中并没有得到广泛的应用,但它提供了一个比七层或四层模型更简单的网络协议动态和操作视图,并且增加了范围的概念,这对于理解网络运行至关重要。信息的范围是网络稳定性和弹性的基础。
3.4 面向连接与无连接
迭代模型再次引出网络协议中面向连接和无连接概念。
在发送数据的第一个比特之前,面向连接的协议建立了端到端连接,包括全部有意义的数据传输状态。传输状态可以包括诸如服务质量要求、流量通过网络的路径、发送和接收数据的特定应用程序、数据可以被发送的速率以及其他信息。一旦连接被建立,数据可以在非常小的开销下进行传输。
另一方面,无连接服务将数据传输所需的数据与数据本身结合起来,在单个数据包(或协议数据单元)中传输。无连接协议将网络数据传输所需的状态传播到每一个可能需要数据的设备上,而面向连接的模型将状态限制在只需要知道特定数据流的设备上。因此,在无连接的网络中,单个设备或链路故障可以通过将流量迁移到另一个可能路径来解决,而不是重做所有工作:构建从源地址到目的地址的数据传输所需要的状态。
大多数现代网络都采用无连接的传输模型,同时结合了面向连接模型的服务质量、差错控制和流量控制。这种组合并不总是理想的;例如,服务质量通常配置特定路径以匹配必须遵循这些路径的特定数据流。这种对服务质量的处理比实际管理的流量更加面向连接,使得网络的理想状态和各种可能的故障模式之间严重脱节。
3.5 总结思考
了解一些模型以及这些模型如何适用于各种网络协议,可以帮助我们快速地理解一个陌生的协议,并在一个运行的网络中诊断问题。了解协议模型的历史可以帮助我们理解特定协议的设计方式,特别是那些协议设计者认为需要解决的问题,以及最初设计时协议的周边协议。不同模型以不同的方式抽象出了一套协议,了解这几个模型以及如何将一套协议放入每个模型中,可以帮助我们以不同方式而不是单一方式来理解协议运行,就像在一幅画中看到一个花瓶与在三维空间中看到一个花瓶是截然不同的。
特别重要的是无连接协议和面向连接协议这两个概念,它们将是理解流量控制、差错管理和许多其他协议运行的基础。
在下一章,这些模型将应用于底层的传输协议。
3.6 拓展阅读
3.7 复习题
1.研究X.25协议栈中的协议,该协议比本章描述的三个网络模型出现得更早。X.25协议栈是否呈现了一种分层设计?DoD模型和OSI模型的哪些层与X.25协议栈中的哪些协议相符合?能否用RINA模型来描述每个协议?
2.研究IBM的系统网络架构(Systems Network Architecture,SNA)协议栈中的协议,这些协议在本章描述的三个网络模型之前就已经存在了。SNA协议栈是否呈现了分层设计?DoD模型和OSI模型的哪些层与SNA栈中的哪些协议相符合?能否用RINA模型来描述每个协议?
3.某些协议栈和模型(如X.25协议栈)考虑了计费,而其他协议栈和模型则没有考虑。为什么?思考在IP和X.25协议栈中的网络利用率测量方式,特别是使用分组带宽作为主要测量系统。
4.分层网络模型如何有助于网络协议栈的模块化?
5.分层网络模型如何帮助工程师理解网络工作原理?
6.绘制一个比较DoD和OSI模型的图表。其中一个模型的每一层是否与另一个模型完全契合?
7.考虑一下OSI和RINA模型,能否从RINA模型中找出哪些服务适合OSI模型中的哪些层吗?
8.根据状态/优化/表面(SOS)模型,特别是从状态和优化两方面来考虑无连接协议和面向连接协议的运作模型。能否解释在一个面向连接模型中添加了状态,会在哪里增加了网络资源的使用优化吗?它是如何减少网络资源的使用优化的?
9.在较老的网络模型中,应用程序通常被认为是协议栈的一部分。然而,随着时间的推移,应用程序似乎已经基本上从网络协议栈中分离出来了,并被视为网络服务的用户或消费者。思考终端主机的设计与运行在终端主机上的应用程序之间的一个特别转变,这会导致网络工程思维的转变吗?
10.从协议设计的角度来看,固定长度的数据包(或帧,或信元)比可变长度的数据包更有意义吗?与固定长度格式相比,可变长度的分组格式增加了多少状态?获得了多少优化?回答这个问题的一个有效出发点是全球互联网上平均数据包长度的列表或图表。