1974年,美国的IBM公司宣布了系统网络体系结构SNA(System Network Architecture)。这个著名的网络标准就是按照分层的方法制定的。现在用IBM大型机构建的专用网络仍在使用这个SNA。不久后,其他公司也相继推出自己公司的具有不同名称的体系结构。然而,全球经济的发展使得不同网络体系结构的用户迫切要求能够互相交换信息。为了使不同的体系结构的计算机网络都能够互连,国际标准化组织ISO于1997年成立了专门机构研究该问题。他们提出了一个试图使各种计算机在世界范围内互连成网的标准框架,即著名的开放系统互连基本参考模型OSI/RM(Open System Interconnection Reference Model),简称为OSI。“开放”是指非独家垄断的。因此只要遵循OSI标准,一个系统就可以和位于世界上任何地方的、也遵循这同一标准的其他任何系统进行通信。这一点很像世界范围的有限电话和邮政系统,这两个系统都是开放系统。“系统”是指在现实的系统中与互连有关的各部分(我们知道,并不是一个系统中的所有部分都与互连有关。OSI/RM把与互连无关的部分除外,而仅仅考虑与互连有关的那些部分)。所以OSI/Rm是个抽象的概念。在1983年形成了开放互连基本参考模型的正式文件,即著名的ISO 7498国际标准,也就是所谓的七层协议的体系结构。
OSI试图达到一种理想境界,即全球计算机网络都遵循这个统一标准,因而全球的计算机将能够很方便地进行互连和交换数据。在20世纪20年代,许多大公司甚至一些国家的政府机构纷纷表示支持OSI。当时看来似乎在不久的将来全世界一定会按照OSI制定的标准来构造自己的计算机网络。然而到了20世纪90年代初期,虽然整套的OSI国际标准都已经制定出来了,但由于基于TCP/IP的互联网已经抢先在全球相当大的范围成功地运行了,而与此同时却几乎找不到有什么厂家生产出符合OSI标准的商用产品。因此人们得出这样的结论:OSI只获得了一些理论研究的成果,但在市场化方面则事与愿违地失败了。现今规模最大的、覆盖全球的、基于TCP/IP的互联网并未使用OSI标准。OSI失败的原因可归纳为:
(1)OSI专家们缺乏实践经验,他们在完成OSI标准时缺乏商业驱动力;
(2)OSI的协议实现起来过分复杂,而且运行效率很低;
(3)OSI标准的制定周期太长,因而使得按OSI标准生产的设备无法及时进入市场;
(4)OSI的层次划分不太合理,有些功能在多个层次中重复出现。
按照一般的概念,网络技术和设备只有符合有关的国际标准才能大范围地获得工程上地应用。但现在情况却反过来了。得到最广泛应用的不是法律上的国际标准OSI,而是非国际标准TCP/IP。这样,TCP/IP就常被称为是事实上的国际标准。从这种意义上来说,能够占领市场的就是标准。在过去制定标准的组织中往往以专家、学者为主。但现在许多公司都纷纷加入各种标准化组织,使得技术标准具有浓厚的商业气息。一个新标准的出现,有时不一定反映其技术水平是最先进的,而是往往有着一定的市场背景。
在计算机网络中要做到有条不紊地交换数据,就必须遵守一些事先约定好的规则这些规则明确规定了所交换的数据的格式以及有关的同步问题。所谓同步即指在一定的条件下应当发生什么事件(例如,应当发送一个应答信息),因而同步含有时序的意思。这些为进行网络中的数据交换而建立的规则、标准或约定称为网络协议,也可简称为协议。网络协议主要由以下三个要素组成:
(1)语法:即数据与控制信息的结构或格式
(2)语义:即需要发出何种控制信息,完成何种动作以及做出何种响应
(3)同步:即时间实现顺序的详细说明
网络协议是计算机网络不可缺少的组成部分。实际上,只要我们想让连接在网络上的另一台计算机做点什么事情(例如,从网络上的某台主机上下载文件),我们都要有协议。但是当我们经常在自己的电脑上进行文件存盘操作时,就不需要任何网络协议,除非这个用来存储文件的磁盘是网络上的某个文件服务器的磁盘。
协议通常有两种形式,一种是使用便于人老阅读和理解的文字描述,另一种是使用让计算机能够理解的程序代码。
ARPANET的研制经验表明,对于非常复杂的计算机网络协议,其结构应该是层次式的。例,计入我们在主机1和主机2之间通过一个通信网络传送文件。
我们可以将要做的工作划分为三类。第一类工作与传送文件直接有关。例如,发送端的文件传送应用程序应当确信接收端的文件管理程序已经做好接收和存储文件的准备。若两台主机所应用的文件格式不一样,则至少其中的一台主机应完成文件格式的转换。这两项工作可用一个文件传送模块来完成。这样,两台主机可将文件传送模块作为最高的一层。在这两个模块之间的虚线表示两台主机系统交换文件和一些有关文件交换的命令。
但是,我们并不想让文件传送模块完成全部工作的细节,这样会使文件传送模块过于复杂。可以再设立一个通信服务模块,用来保证文件和文件传送命令可靠地在两个系统之间交换。即让位于上面的文件传送模块利用下面的通信服务模块所提供的服务。除此之外,我们再构造一个网络接入模块,让这个模块负责做与网络接口细节有关的工作,并向上层提供服务,使上层的通信服务模块能够完成可靠通信的任务。
此种分层方式可以带来好多好处。如:
(1)各层之间是独立的。某一层并不需要知道它的下一层是如何实现的,而仅仅需要知道该层通过层间的接口(即界面)所提供的服务。由于每一层只实现一种相对独立的功能,因而可将一个难以处理的复杂问题分解为若干个较容易处理的更小一些的问题。这样,整个问题的复杂程度就下降了。
(2)灵活性好。当任何一层发生变化时(例如由于技术的变化),只要层间接口关系保持不变,则在这层以上或以下各层均不受影响。此外,对某一层提供的服务还可以进行修改。当某层提供的服务不再需要时,甚至可以将这层取消。
(3)结构上可分割开。各层都可以采用最合适的技术来实现。
(4)易于实现和维护。这种结构使得实现和调试一个庞大而又复杂的系统变得已于处理,因为整个的系统已经被分解为若干个相对独立的子系统。
(5)能促进标准化工作。因为每一层的功能及其所提供的服务都已经有了精确的说明。
分层时应注意使每一层的功能非常明确。若层数太少,就会使每一层的协议太复杂。但层数太多又会在描述和综合各层功能的系统工程任务时遇到较多的困难。通常各层所要完成的功能主要有以下几种:
计算机网络的各层及其协议的集合就是网络的体系结构。换种说法就是,计算机网络的体系结构就是这个计算机网路及其构件所完成的功能的精确定义。需要强调的是:这些功能究竟是用何种硬件或软件完成的,则是一个遵循这种体系结构的实现的问题。总之,体系结构是抽象的,而实现则是具体的,是真正在运行的计算机硬件和软件。
OSI的七层协议体系结构的概念清楚,理论也较完整,但它既复杂又不实用。TCP/IP体系结构则不同,但它现在却得到了非常广泛的应用。TCP/IP是一个四层的体系结构,它包含应用层、运输层、网际层和网络接口层(用网际层这个名字是强调这一层是为了解决不同网络的互连问题)。不过从实质上来讲,TCP/IP只有最上面的三层,因为最下面的网络接口层并没有什么具体内容。
五层协议的各层的功能与作用:
(1)应用层(application layer)
应用层是五层体系结构中的最高层。应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程间通信和交互的规则。这里的进程就是指主机中正在运行的程序。对于不同的网络应用需要有不同的应用层协议。在互联网中的应用层协议很多,如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议,等等。我们把应用层交互的数据单元称为报文(message)。
(2)运输层(transport layer)
运输层的任务就是负责向两台主机中进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。所谓“通用的”,是指并不针对某个特定网络应用,而是多种应用可以使用同一个运输层服务。由于一台主机可同时运行多个进程,因此运输层有复用和分用的功能。复用就是多个应用层进程可以同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付给上面应用层中的相应进程。
运输层主要有以下两种协议:
传输控制协议TCP(Transmission Control Protocol):提供面向连接的、可靠的数据传输服务,其数据传输的单位是报文(message)。
用户数据报协议UDP(User Datagram Protocol):提供无连接的、尽最大努力交付的数据传输服务(不保证数据传输的可靠性),其数据传输的单位是用户数据报。
有人也把运输层称为传输层,理由是这一层使用的TCP协议就叫做传输控制协议。虽然从字面上来理解,传输和运输的差别不大。但OSI定义的第4层使用的是Transport,而不是Transmission。这两个字的含义还是有些差别的,因此,使用运输层这个译名较为准确。
(3)网络层(network layer)
网络层负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系中,由于网络使用IP协议,因此分组也叫做IP数据报,或简称为数据报。
请注意:不要将运输层的“用户数据报UDP”和网络层的“IP数据报”弄混。此外,无论在哪一层传送的数据单元,都可笼统地用“分组”表示。
网络层的另一个任务就是要选择合适的路由,使源主机运输层所传下来的分组,能够通过网络中的路由器找到目的主机。
网络层中的“网络”两字已经不是我们通常谈到的具体网络,而是在计算机网络体系结构模型中的第3层的名称。
互联网是由大量的异构网络通过路由器相互连接起来的。互联网使用的网络层协议是无连接的网际协议IP和许多种路由选择协议,因此互联网的网络层也叫做网际层或IP层。
(4)数据链路层(data link layer)
数据链路层常常被简称为链路层。我们知道,两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。在两个相邻结点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻结点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)。
在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束。这样,数据链路层在收到一个帧后,就可以从中取出数据部分,上交给网络层。
控制信息还使接收端能够检测到所接收到的帧中有无差错。如发现有差错,数据链路层就简单地丢弃这个出了差错的帧,以免继续在网络中传送下去白白浪费网络资源。如果需要改正数据在数据链路层传输时的差错(这就是说,数据链路层不仅要检错,而且要纠错),那么就要采用可靠传输协议来纠正出现的差错。这种方法会使数据链路层的协议复杂些。
(5)物理层(physical layer)
在物理层上所传数据的单位是比特。发送方发送1(或0)时,接收方应当收到1(或0),而不是0(或1)。因此物理层要考虑用多大的电压代表“1”或“0”,以及接收方如何识别出发送方所发送的比特。物理层还要确定连接电缆的插头应当有多少根引脚以及各引脚应如何连接。当然,解释比特代表的意思,就不是物理层的任务。请注意,传递信息所利用的一些物理媒体,如双绞线、同轴电缆、光缆、无线信道等,并不在物理层协议之内而是在物理层协议的下面。因此也有人把物理层下面的物理媒体当作第0层。
在互联网所使用的各种协议中,最重要的和最著名的就是TCP和IP两个协议。现在人们经常提到的TCP/IP并不一定是单指TCP和IP这两个具体的协议,而往往是表示互联网所使用的整个TCP/IP协议族。