7.3 网络互连的参考模型
开放系统互连(Open System Interconnection)基本参考模型是由国际标准化组织(ISO)制定的标准化开放式计算机网络层次结构模型,又称ISO’S OSI参考模型。“开放”这个词表示能使任何两个遵守参考模型和有关标准的系统进行互连。
7.3.1 OSI/RM简介
OSI是体系结构、服务定义和协议规范的三级抽象。OSI的体系结构定义了一个七层模型,用以进行进程间的通信,并作为一个框架来协调各层标准的制定;OSI的服务定义描述了各层所提供的服务,以及层与层之间的抽象接口和交互用的服务语言;OSI各层的协议规范,精确地定义了应当发送何种控制信息及用何种过程来解释该控制信息。需要强调的是,OSI参考模型并非具体实现的描述,它只是一个为制定标准而提供的概念性框架。在OSI中,只有各种协议是可以实现的,网络中的设备只有与OSI的有关协议相一致时才能实现互连。
7.3.2 OSI/RM结构
简言之,OSI参考模型将网络划分为7层,如图7-4所示,OSI 7层模型从下到上分别为物理层(Physical Layer,PH)、数据链路层(Data Link Layer,DL)、网络层(Network Layer,N)、传输层(也称为运输层)(Transport Layer,T)、会话层(Session Layer,S)、表示层(Presentation Layer,P)和应用层(Application Layer,A)。从图中可以看出,整个开放系统环境由作为信源和信宿的端开放系统及若干中继系统通过物理介质连接而成。这里的端开放系统和中继开放系统,都是国际标准ISO 7489中使用的术语。通俗地说,它们相当于资源子网中的主机和通信子网中的结点机(IMP)。只有在主机中才可能需要包含所有七层的功能,而在通信子网中的IMP一般只需最底三层甚至最底两层的功能即可。
图7-4
层次结构模型中数据的实际传送过程如图7-5所示,图中发送进程和接收进程的数据,实际上是经过发送方各层从上到下传递到物理介质;通过物理介质传输到接收方后,再经过从下到上各层传递,最后到达接收进程。
在发送方从上到下逐层传递的过程中,每层都要加上适当的控制信息,到最底层为由“0”或“1”组成的数据比特流,然后再转换为电信号在物理介质上传输至接收方。接收方在向上传递时过程正好相反,要逐层剥去发送方相应层加上的控制信息。这个过程,与邮政信件实际传递中要加信封、加邮袋、进入邮车等层层封装,再层层去掉封装的过程相类似。
由于接收方的某一层不会收到底下各层的控制信息,而高层的控制信息对于它来说又只是透明的数据,所以它只阅读和去除本层的控制信息,并进行相应的协议操作。这样,发送方和接收方的对等实体看到的信息是相同的,就好像这些信息通过虚通信直接传递给对方一样。
图7-5
理解网络各层要解决的问题对掌握计算机网络的工作原理是非常重要的,本书限于篇幅,只介绍各层的功能:
1.物理层(Physical Layer)
物理层位于OSI参考模型的最底层,它直接面向原始比特流的传输。为了实现原始比特流的物理传输,物理层必须解决好包括传输介质、信道类型、数据与信号之间的转换、信号传输中的衰减和噪声等在内的一系列问题。另外,物理层标准要给出关于物理接口的机械、电气功能和规程特性,以便不同的制造厂家既能够根据公认的标准各自独立地制造设备,又能使产品相互兼容。
2.数据链路层(Data Link Layer)
数据链路层涉及相邻结点之间的可靠数据传输,数据链路层通过加强物理层传输原始比特的功能,使之对网络层表现为一条无错线路。为了能够实现相邻结点之间无差错的数据传输,数据链路层在数据传输过程中提供了确认、差错控制和流量控制等机制。
3.网络层(Network Layer)
网络中的两台计算机进行通信时,可能要经过许多中间结点甚至不同的通信子网。网络层的任务就是在通信子网中选择一条合适的路径,使发送端传输层所传下来的数据能够通过所选择的路径到达目的端。为了实现路径选择,网络层必须使用寻址方案来确定存在哪些网络,以及设备在这些网络中所处的位置,不同网络层协议所采用的寻址方案是不同的。在确定了目标结点的位置后,网络层还要负责引导数据报正确地通过网络,找到通过网络的最优路径,即路由选择。如果子网中同时出现过多的分组,它们将相互阻塞通路并可能形成网络“瓶颈”,所以网络层还需要提供拥塞控制机制以避免此类现象的出现。另外,网络层还要解决异构网络互连问题。
4.传输层(Transport Layer)
传输层是OSI参考模型中唯一负责端到端结点间数据传输和控制功能的层。传输层是OSI参考模型中承上启下的层,它下面的3层主要面向网络通信,以确保信息被准确有效地传输;它上面的3层则面向用户主机,为用户提供各种服务。传输层通过弥补网络层服务质量的不足,为会话层提供端到端的可靠数据传输服务。它为会话层屏蔽了传输层以下的数据通信的细节,使会话层不会受到下3层技术变化的影响。但同时,它又依靠下面的3个层次控制实际的网络通信操作,来完成数据从源到目标的传输。传输层为了向会话层提供可靠的端到端传输服务,也使用了差错控制和流量控制等机制。
5.会话层(Session Layer)
会话层的主要功能是在两个结点间建立、维护和释放面向用户的连接,并对会话进行管理和控制,保证会话数据可靠传输。在会话层和传输层都提到了连接,那么会话连接和传输连接到底有什么区别呢?会话连接和传输连接之间有3种关系:一对一关系,即一个会话连接对应一个传输连接;一对多关系,一个会话连接对应多个传输连接;多对一关系,多个会话连接对应一个传输关系。会话过程中,会话层需要决定到底使用全双工通信还是半双工通信。如果采用全双工通信,则会话层在对话管理中要做的工作就很少;如果采用半双工通信,会话层则通过一个数据令牌来协调会话,保证每次只有一个用户能够传输数据。当会话层建立一个会话时,先让一个用户得到令牌,只有获得令牌的用户才有权进行发送。如果接收方想要发送数据,可以请求获得令牌,由发送方决定何时放弃。一旦得到令牌,接收方就转变为发送方。当进行大量的数据传输时,例如,正在下载一个100MB的文件,当下载到95MB时,网络断线了,为了解决这个问题,会话层提供了同步服务,通过在数据流中定义检查点(Checkpoint)来把会话分割成明显的会话单元。当网络故障出现时,从最后一个检查点开始重传数据。常见的会话层协议有:结构化查询语言(SQL)、远程进程呼叫(RPC)、X-windows系统、AppleTalk会话协议、数字网络结构会话控制协议(DNA SCP)等。
6.表示层(Presentation Layer)
OSI模型中,表示层以下的各层主要负责数据在网络中传输时不要出错。但数据的传输没有出错,并不代表数据所表示的信息不会出错。表示层专门负责有关网络中计算机信息表示方式的问题。表示层负责在不同的数据格式之间进行转换操作,以实现不同计算机系统间的信息交换。如图7-6所示,基于ASCII码的计算机将信息“HELLO”的ASCII编码发送出去。但因为接收方使用EBCDIC编码,所以数据必须加以转换。因此,传输的是十六进制字符48454C4C4F,接收到的却是C8C5D3D3D6。两台计算机交换的不是数据;相反,同时也是更重要的,它们以单词“HELLO”的方式交换了信息。
图7-6
除了编码外,还包括数组、浮点数、记录、图像、声音等多种数据结构,表示层用抽象的方式来定义交换中使用的数据结构,并且在计算机内部表示法和网络的标准表示法之间进行转换。表示层还负责数据的加密,以在数据的传输过程对其进行保护。数据在发送端被加密,在接收端被解密。使用加密密钥来对数据进行加密和解密。表示层还负责文件的压缩,通过算法来压缩文件的大小,降低传输费用。例如,假设要传输一个包含n个字符的文件,采用EBCDIC编码,那就有8n个比特位。如果会话层重新定义代码,用0代表A,1代表B,依此类推,一直到25代表Z,那么用5位(存储0~25所需的最少位数)就可以表示一个大写字母。这样一来,实际上可以少传输38%的比特位。
7.应用层(Application Layer)
应用层是OSI参考模型中最靠近用户的一层,负责为用户的应用程序提供网络服务。与OSI参考模型其他层不同的是,它不为任何其他OSI层提供服务,而只是为OSI模型以外的应用程序提供服务,如电子表格程序和文字处理程序。包括为相互通信的应用程序或进程之间建立连接、建立关于错误纠正和控制数据完整性过程的协商等。应用层还包含大量的应用协议,如远程登录(TELNET)、简单邮件传输协议(SMTP)、简单网络管理协议(SNMP)和超文本传输协议(HTTP)等。
7.3.3 OSI层间通信
同一台计算机上的层间交互过程,以及在同一层上不同计算机之间的相互通信过程是相互关联的。
・每一层向其协议规范中的上一层提供服务。
・每层都与其他计算机中相同层的软件和硬件交换一些信息。
1.同一台计算机之间相邻层的通信
OSI模型描述了在不同计算机上应用程序的信息是如何通过网络介质传输的。对于一个给定系统的各个层,当要发送的信息逐层向下传输时,信息越往底层就越不同于人类的语言,而是采用计算机能够理解的“1”和“0”。为了向相邻的高层提供服务,每一层必须知道两层之间定义的标准接口。为了使n层获得服务,这些接口定义n+1层应向n层提供哪些信息,以及n层应向n+1层提供何种返回信息。
图7-7所示为OSI类型通信的一个例子。主机A发送信息给主机B。主机A的应用程序与主机B的应用层通信,主机A的应用层再与主机A的表示层通信,主机A的表示层再与主机A的会话层通信,直到到达主机A的物理层。物理层把信息放到网络物理介质上并把信息从网络物理介质上送走。信息在网络物理介质上传输并被主机B接收后,会以相反的方向向上通过主机B的各层(先是物理层,然后是数据链路层……),直到最终到达主机B的应用层。
图7-7
数据是由主机A中的一些应用程序生成的。例如,用户输入一条E-mail消息。每层生成的包头及所传数据一并传到下一层(图7-7中步骤①的箭头,表示数据在不同层的传递过程)。将数据传到下一层意味着下一层需要为上一层提供某种服务。要完成这些服务,下一层需要在包头或包尾中加入一些信息。例如,传输层发送其数据和包头;网络层在其包头中加入正确的网络层目的地址,以使包能被传输到其他计算机上。从各层的观点来看,在该层包头之后的比特被认为是数据。例如,第4层认为第5层、第6层和第7层的包头与原始的用户数据一起是一个大的数据字段。在应用程序生成数据之后,实现每层功能的软、硬件完成各自的工作,加入适当的包头和包尾。为实现物理传输,物理层能够实现媒体发送信号,如图7-7中的步骤②。当接收时(步骤③),主机B启动其上的相邻层协议进行通信,图7-7中的步骤④,指明了接收数据在协议栈中逐层向上递交处理的过程,具体步骤如下:
步骤1 物理层(第1层)保证比特的同步,并将接收的二进制数据放到缓存中。在将接收到的信号解码成比特流后,通知数据链路层已经收到一个帧。因此,第1层在媒体上已经提供了传输的比特流。
步骤2 数据链路层(第2层)检查帧尾的帧校验序列(FCS),判断传输过程中是否有错误发生(差错控制)。如果有错误发生,丢弃此帧。检查数据链路层的地址,主机B将决定是否需要进一步处理这些数据。如果这个地址是主机B的地址,那么将在第2层的包头和包尾之间的数据传递给第3层的软件。从而,数据链路层通过该链路实现了数据的传输。
步骤3 检查网络层(第3层)的目的地址。如果该地址是主机B的地址(逻辑地址),处理过程将会继续进行,将在第3层包头之后的数据传递给传输层(第4层)的软件。从而第3层实现了端到端的数据传输服务。
步骤4 如果传输层(第4层)选择了差错恢复,标识这段数据的计数器与确认信息(差错恢复)一起在第4层的包头中进行编码。在差错恢复和对输入数据进行重新排序后,将这些数据传递给会话层。
步骤5 会话层(第5层)可以用来保证一系列消息的完整性。如果没有完成后续的通信,收到的数据可能没有任何意义。第5层的包头中包含标识字段意味着是一个不连续数据链的中间流而不是结束流。在会话层保证所有的流都完成后,将在第5层包头之后的数据传递给第5层的软件。
步骤6 表示层(第6层)定义并维护数据的格式。例如,如果数据是二进制数据而不是字符数据,包头会指明这一点。接收方并不会用主机B中默认的ASCII字符集转换这些数据。通常,此类包头只包括在初始流中,而不包含在每个被传输的流(数据格式)中。在完成了数据格式的转换后,将数据传递给应用层的软件。
步骤7 应用层(第7层)处理最后的包头,然后检查真正的终端用户数据。这个包头指明了主机A与主机B已协商好的应用程序所使用的运行参数,该包头用于交换所有参数值。因此,通常只在应用程序初始化时才发送和接收这个包头。例如,在文件传输时,会相互传递所传输文件的长度和文件格式(应用参数)。
2.不同计算机上对等层之间的通信
第n层必须与另外一台计算机上的第n层通信才能成功地实现该层的功能。例如,传输层(第4层)能够发送数据,但如果另外一台计算机不对那些已接收的数据进行确认,那么发送方就不知应在何时进行差错恢复。同样,发送方计算机将网络层目的地址(第3层)放到包头中。如果中继路由器拒绝合作,不执行网络层功能,那么包就不会被传输到真正的目的地。为了与其他计算机上的对等层进行通信,每一层都定义了一个包头,而且有时还定义了包尾。包头和包尾是附加的数据位,由发送方计算机的软件或硬件生成,放在由第n+1层传给第n层的数据的前面或后面。这一层与其他计算机上同等层进行通信所需的信息就在这些包头或包尾中被编码。接收方计算机的第n层软件或硬件解释由发送方计算机第n层所生成的包头或包尾编码,从而得知此时第n层的过程应如何处理。每一层使用自己层的协议与其他系统的对等层相互通信。每一层的协议与对等层之间交换的信息称为协议数据单元(PDU)。图7-8提供了同等层之间通信的概念模型。主机A的应用层与主机B的应用层通信。同样,主机A的传输层、会话层和表示层也与主机B的对等层进行通信。OSI模型的下3层必须处理数据的传输,路由器C参与此过程。主机A的网络层、数据链路层和物理层与路由器C进行通信。同样,路由器C与主机B的物理层、数据链路层和网络层进行通信。
图7-8
OSI参考模型的分层禁止了不同主机对等层之间的直接通信。因此,主机A的每一层必须依靠主机A相邻层提供的服务来与主机B的对等层通信。假定主机A的第4层必须与主机B的第4层通信,那么,主机A的第4层就必须使用主机A的第3层提供的服务。第4层叫服务用户,第3层叫服务提供者。第3层通过一个服务接入点(SAP)给第4层提供服务。这些服务接入点使得第4层能要求第3层提供服务。
3.封装
通常将数据放置在每一层的包头后面(及包尾之前)的概念称为封装。当每一层生成了包头时,将由相邻上一层传递来的数据放到该包头的后面,这样就封装了高一层的数据,如图7-9所示。对数据链路层(第2层)协议而言,第3层的包头和数据将放到第2层的包头和包尾之间。物理层并不使用封装,因为它不使用包头和包尾。
图7-9
从用户数据的生成到对物理信号编码的整个封装过程如下:
步骤1 应用程序已经生成了数据。应用层生成该层的包头并将数据放在包头后,然后将封装后数据传递到表示层。
步骤2 表示层同样生成该层的包头并将所接收数据放在其后,之后这个数据结构被传递到会话层。
步骤3 会话层生成该层的包头并将数据放在其后,这个数据结构被传递到传输层。
步骤4 传输层生成该层的包头并将数据放在其后,这个数据结构被传递到网络层。
步骤5 网络层生成该层的包头并将数据放在其后,这个数据结构被传递到数据链路层。
步骤6 数据链路层生成该层的包头并将数据放在其后,数据链路层把包尾放到此结构的后面,这个数据结构被传递到物理层。
步骤7 物理层在媒体上对信号进行编码,传输该数据位。
上面的7步过程对于OSI参考模型是准确、有意义的。然而,对于应用的每次数据传输来说,(通常)并不是每一层都进行封装。一般来说,第5~7层在初始化期间使用包头。但在大多数的流中,没有第5层、第6层或第7层的包头,这是因为不是每个流的数据都有新的信息需要交换。
4.解封装
当远程设备顺序接收到一串比特时,它会把它们传输给数据链路层以组装为帧。当数据链路层接收到该帧时,它会进行以下工作:
・读取物理地址和由直接相连的对等数据链路层所提供的控制信息。
・从该帧剥离该控制信息并由此创建一个数据报。
・遵照在帧的控制部分中出现的内容把数据报向上传输到相邻层。
这个过程即被称为解封装,每个后续层都会经历一个类似过程,如图7-10所示。
图7-10
5.OSI参考模型每一层数据的名称
为了使数据分组从源主机传输到目的主机(见图7-11中),源主机OSI参考模型的每一层要与目标主机的每一层进行通信。用Peer-to-Peer Communications(对等实体间通信)表示源主机与目的主机对等层间的通信。在这一过程中,每一层的协议交换的信息称为协议数据单元(PDU)。位于源计算机上的每个通信层,使用针对该层的协议数据单元与目标计算机上的对等层进行通信。数据分组起源于一台源主机,并且被传输到一台目的主机上。每一层需要依赖于其低层提供的服务。为了提供这种服务,低层将来自上层的协议数据单元封装到它的数据字段中,然后增加实现本层功能所需的包头和包尾。之后,当数据通过OSI模型的每一层时,都会增加相应的包头和包尾。在第7、6和5层增加了它们的信息后,第4层需要增加更多的信息。第4层的协议数据单元被称为段(Segment)。
比如,网络层为传输层提供服务,传输层将数据提交给网络层。网络层的任务是将数据通过网络进行传输,它通过对该数据进行封装和增加一个包头,创建一个分组或数据报(第3层的PDU)来实现这一任务。数据报头里包含为完成传输所需的信息,如源和目的逻辑地址。
图7-11
数据链路层为网络层提供服务,它将网络层信息封装到帧(第2层PDU)中,帧包头包含完成链路操作的信息(如物理地址)。数据链路层通过将网络层数据封装到帧中的方式为网络层提供服务。此外,数据链路包头信息是本地的,而且只对直接相连的设备有意义。
物理层也为数据链路层提供服务,物理层将数据链路层帧编码成1和0的模式以便在介质上传输(通常为线缆),然后这些比特被传输到位于端到端路径中的下一台直接相连的设备上。