
1.6 计算机网络体系结构
在计算机网络的基本概念中,协议与分层体系结构是最重要的。计算机网络体系结构的抽象概念较多,在学习时要多思考。这些概念对后面的学习很有帮助。

计算机网络体系结构
1.6.1 网络协议
计算机网络是由多个互连的结点组成的,结点之间需要不断地交换数据与控制信息。要做到有条不紊地交换数据,每个结点都必须遵守一些事先约定好的规则。这些规则明确规定了所交换的数据的格式和时序,以及在发送或接收数据时要采取的动作等。这些为进行网络中的数据交换而建立的规则、标准或约定即称为网络协议(Network Protocol)。网络协议也可简称为协议。更进一步讲,网络协议主要由以下三要素组成。
(1)语法,即数据与控制信息的结构或格式。例如,地址字段多长以及它在整个分组中的什么位置。
(2)语义,即各个控制信息的具体含义,包括需要发出何种控制信息、完成何种动作及做出何种响应。
(3)同步(或时序),即事件实现的顺序和时间的详细说明,包括数据应该在何时发送出去,以及数据应该以什么速率发送。
其实协议不是网络所独有的,它在我们的日常生活中处处可见。凡是多个实体通过传递信息来协作完成一项任务都需要协议,协议通常都包含语法、语义和时序这三要素。例如,人们在使用邮政系统进行通信时,需要遵守一些强制的或约定俗成的规则,这些规则就是协议。人们在书写信封时需要遵守信封书写规范,规范对收信人和发信人的地址、姓名、邮政编码的书写都有明确的要求。又如,在古代战场上,军队统帅用击鼓鸣金的方法来指挥作战的过程中就需要协议。显然将士和统帅要遵守某种共同的约定,如击鼓表示进攻,鸣金表示撤退,击鼓和鸣金的节奏也有明确的规定。若事先无明确约定,军队行动肯定会产生混乱从而导致作战失败。
在计算机网络中,任何一个通信任务都需要由多个通信实体协作完成,因此,网络协议是计算机网络不可缺少的组成部分。实际上,只要我们想让连接在网络上的另一台计算机做点什么事情(例如,从网络上的某个主机下载文件),就需要有协议。
协议必须在计算机上或通信设备中用硬件或软件来实现,有时人们将实现某种协议的软件也简称为协议。我们经常会听到有人说在计算机上安装某协议,注意,这里的协议指的是协议软件,即实现该协议的软件。
1.6.2 计算机网络的分层体系结构
我们在处理、设计和讨论一个复杂系统时,总是将复杂系统划分为多个小的、功能相对独立的模块或子系统。这样我们可以将注意力集中在这个复杂系统的某个特定部分,并有能力把握它。这就是模块化的思想。计算机网络是一个非常复杂的系统,当然需要利用模块化的思想将其划分为多个模块来处理和设计。人们发现层次式的模块划分方法特别适合网络系统,因此目前所有的网络系统都采用分层体系结构。
在我们的日常生活中不乏分层结构,例如,邮政系统就是一个分层的系统,而且它与计算机网络有很多相似之处。在讨论计算机网络的分层体系结构之前,先来看看我们所熟悉的邮政系统的分层结构。如图1-14所示,我们可以将邮政系统抽象为用户应用层、信件递送层、邮包运送层、交通运输层和交通工具层5个层次。发信人与收信人通过邮政系统交换信息,将传递的信息写在纸上并封装在信封里,信封上写上收信人和发信人的姓名与地址等信息,然后将信件投入邮箱或直接交给邮局。邮局工作人员将送往同一地区的信件装入一个邮包,并贴上负责这一地区的邮局的地址,然后交给邮政系统中专门负责运送邮包的部门。该部门要根据邮包的目的地选择运送路线、中转站和交通工具。注意,到目的邮局可能要用到多种交通工具,例如,经火车从北京运送到南京后再经汽车运送到南通。运送邮包的部门要将邮包作为货物交给铁路部门或汽运公司去运送,在中转站,该部门还要负责在不同交通工具间中转,最后将邮包交给目的邮局。目的邮局再将邮包中的信件取出分发给收信人。
邮政系统的最上层是用户应用层,其任务是用户通过信件来传递信息,如写家书、求职或投稿等。通信的双方必须用约定的语言和格式来书写信件内容。为了保密,双方还可以用约定的暗语或密文进行通信。
用户应用层的下层是信件递送层,其任务是将用户投递的信件递送到收信人。为完成该功能,必须对信封的书写格式、邮票、邮戳等进行规定。
再下层是邮包运送层,其任务是按运送路线运送邮包,包括在不同交通工具间中转。为把邮包运送到目的地,邮包运送部门需要规定邮包上的地址信息的内容和格式。
再下层是交通运输层,其任务是提供通用的货物运输功能,并不一定仅为邮政系统提供服务。不同类型的交通运输部门是相互独立的,并且有各自的寻址体系。
最下层是具体的交通工具,如火车和汽车,它们是货物运输的载体。

图1-14 邮政系统的分层结构
邮政系统是一个很复杂的系统,但通过划分层次,整个通信任务被划分为5个功能相对独立和简单的子任务。每一层任务为其上层任务提供服务,并利用其下层任务提供的服务来完成本层的功能。计算机网络的层次结构与其非常相似。
在计算机网络的术语中,我们将计算机网络的层次结构模型与各层协议的集合称为计算机网络的体系结构(Architecture)。换种说法,计算机网络的体系结构就是这个计算机网络及其部件所应完成的功能的精确定义。需要强调的是,这些功能究竟是用何种硬件或软件实现的,则是一个遵循这种体系结构的实现(Implementation)的问题。体系结构是抽象的,而实现则是具体的,是真正在运行的计算机硬件和软件。
按层次来设计计算机网络的体系结构有如下好处。
(1)各层之间是独立的。某一层并不需要知道它的下一层是如何实现的,而仅仅需要知道该层通过层间的接口(即界面)所提供的服务。例如,邮包运送部门将邮包作为货物交给铁路部门运输时无须关心火车运行的具体细节,这是铁路部门的事。由于每一层只实现一种相对独立的功能,因而可将一个难以处理的复杂问题分解为若干个较容易处理的小一些的问题。这样,整个问题的复杂程度就下降了。
(2)灵活性好。当任何一层发生变化时(如由于技术的变化),只要层间接口关系保持不变,则该层以上或以下各层均不受影响。例如,火车提速了,或更改了车型,对邮包运送部门的工作没有直接影响。
(3)结构上可分割开。各层都可以采用最合适的技术来实现。
(4)易于实现和维护。这种结构使得实现和调试一个庞大而又复杂的系统变得容易,因为整个系统已被分解为若干个相对独立的子系统。
(5)有利于功能复用。下层可以为多个不同的上层提供服务。例如,交通运输部门不仅可以为邮政系统提供运输邮包的服务,还可以为其他公司提供运输其他货物的服务。
(6)能促进标准化工作。对每一层的功能及其所提供的服务都有精确的说明。标准化对于计算机网络来说非常重要,因为协议是通信实体共同遵守的约定。
分层时应注意使每一层的功能非常明确。若层数太少,就会使每一层的协议太复杂。但层数太多又会在描述综合各层功能的系统工程任务时遇到较多的困难。到底计算机网络应该划分为多少层,不同人有不同的看法。
1974年,美国的IBM公司宣布了它研制的系统网络体系结构(System Network Architecture,SNA),这是世界上第一个网络体系结构。此后,许多公司纷纷提出各自的网络体系结构。这些网络体系结构的共同点是都采用层次结构模型,但层次划分和功能分配均不相同。
为了使不同体系结构的计算机网络都能互连,国际标准化组织(International Standard Organization,ISO)于1977年成立了专门机构研究该问题。不久,他们就提出一个试图使各种计算机在世界范围内互连成网的标准框架,即著名的开放系统互连参考模型(Open Systems Interconnection Reference Model,OSI/RM),简称为OSI。“开放”是指只要遵循OSI标准,一个系统就可以和位于世界上任何地方的、也遵循这一标准的其他任何系统进行通信。该模型是一个七层协议的体系结构,如图1-15(a)所示。
在OSI模型之前,TCP/IP协议簇就已经在运行,并逐步演变成TCP/IP参考模型,如图1-15(b)所示。到了20世纪90年代初期,虽然整套的OSI国际标准都已经制定出来了,但这时互联网已抢先在全世界覆盖了相当大的范围,因此得到最广泛应用的不是法律上的国际标准OSI,而是非国际标准TCP/IP。于是,TCP/IP就被称为事实上的国际标准。从这种意义上说,能够占领市场的就是标准。过去制定标准的组织中往往以专家、学者为主,但现在许多公司纷纷挤进各种各样的标准化组织,使得技术标准具有浓厚的商业气息。一个新标准的出现,有时不一定反映出其技术水平是最先进的,而是它往往有着一定的市场背景。
OSI失败的原因可归纳如下。
(1)OSI的专家们缺乏实际经验,他们在完成OSI标准时没有商业驱动力。
(2)OSI的协议实现起来过分复杂,而且运行效率很低。
(3)OSI标准的制定周期太长,使得按OSI标准生产的设备无法及时进入市场。
(4)OSI的层次划分也不太合理,有些功能在多个层次中重复出现。
1.6.3 具有五层协议的原理体系结构
OSI的七层协议体系结构概念清楚,理论也较完整,但它既复杂又不实用。TCP/IP是一个四层协议体系结构,它包含应用层、运输层、网际层和网络接口层。不过从实质上讲,TCP/IP只有上面的三层,因为最下面的网络接口层并没有什么具体内容。TCP/IP体系结构虽然简单,却得到了非常广泛的应用。因此我们在学习计算机网络原理时往往采取折中的办法,即综合OSI和TCP/IP的优点,采用一种只有五层协议的原理体系结构,如图1-15(c)所示,这样既简洁又能将概念阐述清楚。

图1-15 计算机网络体系结构
现在结合互联网的情况,自上而下地、非常简要地介绍一下各层的主要功能。实际上,只有认真学习完本书各章的协议后才能真正弄清各层的作用。
(1)应用层
应用层(Application Layer)是原理体系结构中的最高层。应用层的任务是通过应用进程间的交互来完成特定的网络应用。应用层协议定义的是应用进程间通信和交互的规则。这里的进程指正在运行的程序。不同的网络应用需要不同的应用层协议。互联网中的应用层协议很多,如支持万维网应用的HTTP、支持电子邮件的SMTP,支持文件传送的FTP等。我们将应用层交互的数据单元称为报文(Message)。
(2)运输层
运输层(Transport Layer,或翻译为传输层)的任务就是向两台主机中进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。所谓通用,是指并不针对某个特定网络应用,多种应用可以使用同一个运输层服务。由于一台主机可同时运行多个进程,因此运输层有复用和分用的功能。复用就是多个应用层进程同时使用下面运输层的服务,分用则是运输层把收到的信息分别交付上面应用层中的相应进程。
互联网中主要有以下两个运输层协议。
① 传输控制协议(Transmission Control Protocol,TCP)——提供面向连接的、可靠的数据传输服务,其数据传输的单位是报文段。
② 用户数据报协议(User Datagram Protocol,UDP)——提供无连接的、尽最大努力(Best-Effort)的数据传输服务(不保证数据传输的可靠性),其数据传输的单位是用户数据报。
(3)网络层
网络层(Network Layer)负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系中,由于网络层使用IP,因此分组也叫作IP数据报,或直接称为IP分组。
请注意:不要将运输层的“用户数据报”和网络层的“IP数据报”弄混。
还有一点也请注意:无论在哪一层传送的数据单元,习惯上都可笼统地用“分组”来表示。在阅读国外文献时,特别要注意“packet”往往可指代任何一层传送的数据单元。
网络层的一个重要任务就是选择合适的路由(Route),将源主机运输层所传下来的分组,通过网络中的路由器的转发(通常要经过多个路由器的转发),最后送达目的主机。
这里要强调指出,网络层中的“网络”二字,已不是我们通常谈到的具体的网络,而是在计算机网络体系结构模型中的专用名词。
互联网是由大量的异构(Heterogeneous)网络通过路由器(Router)相互连接而成的。互联网主要的网络层协议是无连接的网际协议(Internet Protocol,IP)和许多种路由选择协议,因此互联网的网络层也叫作网际层或IP层。在本书中,网络层、网际层和IP层是同义语。
(4)数据链路层
数据链路层(Data Link Layer)常简称为链路层。计算机网络由主机、路由器和连接它们的链路组成,从源主机发送到目的主机的分组必须在一段一段的链路上传送。数据链路层的任务就是将分组从链路的一端传送到另一端。我们将数据链路层传送的数据单元称为帧(Frame)。因此数据链路层的任务就是在相邻结点之间(主机和路由器之间或两个路由器之间)的链路上传送以帧为单位的数据。
每一帧包括数据和必要的控制信息(如同步信息、差错控制等)。例如,在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束。控制信息还可用于接收端检测所收到的帧中有无差错。如发现有差错,数据链路层应该丢弃有差错的帧,以免继续传送下去白白浪费网络资源。
(5)物理层
物理层(Physical Layer)是原理体系结构的最底层,完成计算机网络中最基础的任务,即在传输媒体上传送比特流,将数据链路层帧中的每个比特从一个结点通过传输媒体传送到下一个结点。物理层传送数据的单位是比特。发送方发送1(或0)时,接收方应当收到1(或0)而不是0(或1)。因此物理层要考虑用多大的电压代表“1”或“0”,以及接收方如何识别出发送方所发送的比特。物理层还要考虑所采用的传输媒体的类型,如双绞线、同轴电缆、光缆等,以及与传输媒体之间的接口。请注意,传递信息所利用的一些物理传输媒体本身是在物理层的下面,因此也有人把物理传输媒体当作第0层。
图1-16说明的是应用进程的数据在各层之间的传递过程中所经历的变化。这里假定两台主机通过一台路由器连接起来。
假定主机1的应用进程AP1向主机2的应用进程AP2传送数据。AP1先将其数据交给本主机的第5层(应用层)。数据在第5层被加上必要的控制信息H5就变成了这一层的数据单元,并被交给下层。第4层(运输层)收到这个数据单元后,加上本层的控制信息H4构成本层的数据单元,再交给第3层(网络层)。依此类推。不过到了第2层(数据链路层)后,控制信息被分成两部分,分别加到本层数据单元的首部(H2)和尾部(T2),而第1层(物理层)利用传输媒体最终将数据链路层数据单元的所有比特以比特流的形式进行传送。
OSI把对等层次之间传送的数据单位称为该层的协议数据单元(Protocol Data Unit,PDU),这个名词现已被许多非OSI标准采用。

图1-16 数据在各层之间的传递过程
这一串比特流离开主机1经网络的物理传输媒体传送到路由器后,就从路由器的第1层依次上升到第3层。每一层都根据控制信息进行必要的操作,然后将控制信息剥去,将剩下的数据单元上交给更高的一层。当分组上升到第3层时,该层根据首部中的目的地址查找路由器中的路由表,找出转发分组的接口,然后将分组往下传送到第2层,加上新的首部和尾部后,再传送到最下面的第1层,然后在物理传输媒体上把每一个比特发送出去。
这一串比特流离开路由器到达目的站主机2后,就从主机2的第1层按照上面讲过的方式,依次上升到第5层。最后,应用进程AP1发送的数据被交给目的站的应用进程AP2。
可以用一个简单例子来比喻上述过程。有一封信从最高层向下传,每经过一层就包上一个新的信封,写上必要的地址信息。包有多个信封的信件传送到目的站后,从第1层起,每层拆开一个信封后把信封中的信交给它的上一层。传到最高层后,发信人所发的信被交给收信人。
虽然应用进程数据要经过图1-16所示的复杂过程才能送到目的站的应用进程,但这些过程对用户来说都被屏蔽掉了,以致看上去应用进程AP1是直接把数据交给了应用进程AP2。同理,任何两个同样的层次(如两个系统的第4层)之间,看上去也如同图1-16中的水平虚线所示的那样,将数据(即数据单元加上控制信息)直接传递给了对方。这就是所谓的“对等层(Peer Layers)”之间的通信。我们以前经常提到的各层协议,实际上就是在各个对等层之间传递数据时的各项规定。
在文献中还可以见到术语“协议栈(Protocol Stack)”。这是因为几个层次画在一起很像一个栈(Stack)的结构。
1.6.4 实体、协议和服务
当研究开放系统中的信息交换时,我们往往使用实体(Entity)这一较为抽象的名词来表示任何可发送或接收信息的硬件或软件进程。在许多情况下,实体就是一个特定的软件模块。
协议是控制两个对等实体(或多个实体)进行通信的规则的集合。协议的语法方面的规则定义了所交换的信息的格式,而协议的语义方面的规则定义了发送者或接收者所要完成的操作,例如,在何种条件下数据必须重传或丢弃。
在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务。要实现本层协议,还需要使用下面一层所提供的服务。图1-17概括了相邻两层之间的关系。

图1-17 相邻两层之间的关系
一定要弄清楚,协议和服务在概念上是很不一样的。
首先,协议的实现保证了能够向上一层提供服务。使用本层服务的实体只能看见服务而无法看见下面的协议。下面的协议对上面的实体是透明的。“透明”是一个很重要的术语。它表示:某一个实际存在的事物看起来却好像不存在一样。例如,运输层使用了很复杂的协议实现了可靠传输。上面的应用层只感受到运输层所提供的这种可靠传输服务,却看不见运输层是怎样借助于复杂协议来实现可靠传输的。因此,运输层的协议对应用层来说是透明的。
其次,协议是“水平的”,即协议是控制对等实体之间通信的规则;但服务是“垂直的”,即服务是由下层向上层通过层间接口提供的。另外,并非在一个层内完成的全部功能都称为服务。只有那些能够被高一层实体“看见”的功能才能被称为“服务”。为获取下层服务,上层实体需要通过层间接口与下层实体交换信息,例如,上层实体将要发送数据交给下层实体去处理,下层实体将收到的分组的数据提取出来交付上层实体。
1.6.5 TCP/IP体系结构
在互联网所使用的各种协议中,最重要的和最著名的就是TCP和IP两个协议。现在人们经常提到的TCP/IP并不一定是单指TCP和IP这两个具体的协议,而往往是表示互联网所使用的整个TCP/IP协议簇(Protocol Suite)[5],互联网的体系结构也被称为TCP/IP体系结构。
图1-18给出了TCP/IP的四层协议的表示方法举例。请注意,图中的路由器在转发分组时最高只用到网际层而没有使用运输层和应用层。

图1-18 TCP/IP四层协议的表示方法举例
图1-19用另一种方法来表示TCP/IP协议簇,它的特点是上下两头大而中间小:应用层和网络接口层都有多种协议,而中间的IP层很小,上层的各种协议都向下汇聚到一个协议中。这种沙漏计时器形状的TCP/IP协议簇表明,TCP/IP可以为各式各样的应用提供服务(Everything Over IP),同时TCP/IP也允许IP在各式各样的网络构成的互联网上运行(IP Over Everything)。正因为如此,互联网才会发展到今天的全球规模。从图1-19中不难看出IP在互联网中的核心作用。

图1-19 沙漏计时器形状的TCP/IP协议簇示意