1.5.1 ISO/OSI参考模型
在网络发展的初期,许多研究机构、计算机厂商和公司都大力发展计算机网络,自从ARPANET出现后,市场上出现了许多商品化的网络系统。但是这些网络系统在体系结构上差异很大,它们之间互不相容,难于相互连接以构成更大的网络系统。为此,许多标准化机构积极开展了网络体系结构标准化方面的工作,其中最为著名的就是国际标准化组织(International Standard Organization,ISO)提出的开放系统互连参考模型(Open System Interconnection/Reference Model,OSI/RM)。ISO/OSI参考模型是国际标准化组织制定的一个用于计算机或通信系统间互联的标准体系。
ISO/OSI参考模型将计算机网络分为七层,如图1-15所示。我们将从最底层开始,依次讨论ISO/OSI参考模型各层所要实现的功能。
图1-15 ISO/OSI参考模型
1.物理层
物理层的主要功能是完成相邻节点之间比特传输。物理层关心的问题包括物理层接口使用什么样的电磁信号来表示“0”和“1”、“0”和“1”持续的时间有多长、比特传输能否在两个方向上同时进行、节点之间的物理连接是如何建立起来的、完成通信后如何终止连接、物理层接口(插头和插座)有多少个接头,以及接口的电气特性和功能特性如何。
物理层协议设计涉及物理层接口的机械、电气、功能和过程特性等问题,还涉及电子工程和通信工程等领域内的一些问题。物理层接口的例子有EIA RS-232、RS-422、RS-530、RJ-11、RJ-45、USB接口以及各种光接口。
2.数据链路层
数据链路层的主要功能是在不可靠的物理线路上保证相邻节点之间数据的可靠传输。为了保证数据传输的可靠性,发送端把高层数据封装成帧(frame),并按顺序发送每个帧。由于物理线路是不可靠的,因此发送端发出的帧有可能在物理线路上遭到破坏,引起错误,甚至丢失(所谓丢失实际上是数据帧的帧头或帧尾出错),从而导致接收端不能正确接收到数据。为了保证让接收端能正确接收到数据,首先必须让接收端对接收到的数据是否正确进行判断,为此发送端为每个数据帧计算检错码(比如CRC)并加入帧中,这样接收端就可以通过重新计算检错码判断接收到的数据是否正确。如果发送端发送的数据不能被接收端正确接收,则发送端必须重传该数据。然而,相同数据帧的多次重传也可能使接收端收到重复帧,因此数据链路层还必须解决由帧的损坏、丢失和重发所带来的重复帧的问题。
数据链路层要解决的另一个问题是防止发送端发送数据的速度快于接收端接收数据的速度,这样有可能引起数据的丢失。因此数据链路层需要某种机制来协调发送端和接收端之间的收发速度。
对于局域网来说,数据链路层又分为逻辑链路控制(Logical Link Control,LLC)子层和介质访问控制(Media Access Control,MAC)子层。在局域网中,逻辑链路控制子层的功能相当于数据链路层,用于提供两个节点之间的可靠数据传输;而介质访问控制子层则用于控制局域网中的多个节点如何访问共享介质。
3.网络层
网络层的主要功能是完成网络中不同主机之间的数据通信。网络层交换的数据单元一般用报文(packet)来表示。
在网络中的两台主机之间可能存在不止一条路径,因此网络层涉及的关键问题是如何为发送端主机和接收端主机选择一条合适的路径,以保证发送端主机发送的报文正确到达接收端主机,这就是路由。
网络层需要解决的另一个关键问题是:如何防止主机将过多的报文注入网络中,从而引起网络拥塞,导致报文传输的延迟过大,甚至造成报文丢失。
另外,如何将不同的物理网络连接起来,使其逻辑上看起来像一个统一的网络,这就是网络互联,也是网络层的功能之一。
4.传输层
传输层的主要功能是完成网络中不同主机上用户进程之间的数据通信。传输层交换的数据单元一般用报文段(segment)来表示。
传输层要决定网络向上能够提供什么样的服务。传输层可以提供可靠的数据通信,也可以提供不可靠的数据通信。传输层协议是端到端(end-to-end)的,即传输层协议是支持端用户进程之间进行数据通信的。在传输层以下的各层中,各层协议是每个节点与它的直接相邻节点之间(主机-IMP、IMP-IMP)的协议,而不是最终的发送端主机和接收端主机之间(主机-主机)的协议。也就是说,在ISO/OSI参考模型中,物理层、数据链路层和网络层协议都是跳到跳(hop-by-hop)协议,而从传输层开始都采用端到端(end-to-end)协议。
由于目前绝大多数机器都采用多用户操作系统,因此一台机器上会同时运行多个用户进程,这意味着需要某种命名机制,使机器内的进程能够清楚说明它希望与哪台机器的哪个进程建立传输连接。另外,传输层协议还必须引入流量控制机制,以避免发送端主机发送数据速度过快而导致接收端主机来不及处理,从而造成数据丢失。
5.会话层
会话层允许不同机器上的用户之间建立会话关系。会话层允许进行类似传输层的普通数据的传送,在某些场合还提供了一些有用的增值服务。会话层允许用户利用一次会话在远端的分时系统上登录或者在两台机器之间传输文件。
会话层提供的服务之一是会话管理。有些网络服务允许信息双向同时传输(类似于物理信道上的全双工模式),而有些网络服务只允许信息单向传输(类似于物理信道上的半双工模式),此时,会话层将进行有效控制。一般采取的会话控制方式是令牌管理(token management),会话层让令牌在会话双方之间来回移动,任何一方要想发送数据必须首先持有令牌,这样双方可以通过交替拥有令牌而实现数据的半双工传输。
会话层提供的另一种服务是同步。例如,在每隔一段时间就有可能出现故障的网络上,两台机器之间要进行长时间的文件传输会出现什么样的问题?在每一次的文件传输过程中都会由于网络故障不得不重传整个文件。为了解决这个问题,会话层提供数据传输过程中插入同步点的服务,这样当网络出现故障后,发送端只需要重传最后一个同步点以后的数据,而不需要重传整个文件。当然,如果网络中没有会话层提供的增值服务,主机之间的数据通信仍然是可以正常进行的。
6.表示层
表示层完成某些特定的功能,对这些功能人们常常希望找到普遍的解决办法,而不必由每个网络应用来解决。值得一提的是,表示层以下各层只关心如何将发送端主机上某用户进程的数据可靠地传送到接收端主机上的用户进程,而表示层关心的是用户进程所传送数据的语法格式和语义(含义或意义)。
表示层提供的典型服务是对数据进行统一编码。大多数用户程序之间并非交换任意组合的比特串,而是交换人名、日期、货币数量和发票之类的数据,甚至是音频、视频等多媒体数据。这些数据对象用字符串、整型数、浮点数的形式,以及由几种简单类型组成的复杂数据结构来表示。
另外,不同的计算机可能采用不同的数据表示方式,所以需要在数据传输时进行数据格式的转换。例如,不同的机器可能会用不同的代码来表示字符串(如大部分计算机用ASCII码来表示,但是有些早期的计算机可能用其他编码来表示),采用不同字节顺序来存放数据,等等。为了让采用不同数据表示法的计算机之间能够相互通信并交换数据,我们可以在数据通信过程中使用抽象的数据结构(如ISO提供的抽象语法表示ASN.1)来抽象地表示要传送的数据,而在机器内部仍然采用各自的编码方式。管理这些抽象数据结构、在发送端将机器的内部编码转换为适合网上传输的传送语法以及在接收端做相反的转换等工作都是由表示层来完成的。
另外,表示层的工作还涉及数据的压缩和解压、数据的加密和解密等。
7.应用层
应用层是用户与网络的接口。应用层支持各种不同的网络应用,每种网络应用都使用不同的应用层协议。
比如,PC用户通过使用仿真终端软件可以远程登录到某台主机上使用该远程主机的资源。这个仿真终端程序通过虚拟终端协议将PC键盘输入的信息传送到远程主机,由远程主机来解释键盘命令并执行,同时将结果回送到PC的屏幕上。
再比如,当某个用户想要获得远程计算机上的一个文件拷贝时,他要向本机的文件传输软件发出请求,该软件与远程计算机上的文件传输进程通过文件传输协议进行通信,这个协议主要处理文件名、用户许可状态和其他文件访问等细节。
ISO/OSI参考模型可以很好地描述广域网的体系结构,图1-16给出了两台主机通过广域网进行通信对应的ISO/OSI参考模型。
图1-16 广域网参考模型
在图1-16中,广域网由通信子网和主机构成,主机之间通过通信子网进行通信。通信子网由通信介质和交换机构成。
值得注意的是,ISO/OSI参考模型本身不是网络体系结构的全部内容,它并未确切地描述用于ISO/OSI参考模型各层的协议,而仅仅规定了ISO/OSI参考模型每一层必须完成的功能。不过,ISO为各层制定了相应的标准,但这些标准并不是ISO/OSI参考模型的一部分,它们是作为独立的国际标准发布的,只是目前已经不常引用OSI协议标准了。