计算机网络分层结构
两个系统中实体间的通信是一个很复杂的过程 ,为了降低协议设计和调试过程的复杂性,也为了便于对网络进行研究 、实现和维护,促进标准化工作,通常对计算机网络的体系结构以分层的方式进行建模。
我们把计算机网络的各层及其协议的集合称为网络的体系结构 (Architecture ) 。换言之,计算机网络的体系结构就是这个计算机网络及其所应完成的功能的精确定义,它是计算机网络中的层次、各层的协议以及层间接口的集合。需要强调的是,这些功能究竟是用何种硬件或软件完成的,则是一个遵循这种体系结构的实现( Implementation)问题。体系结构是抽象的 ,而实现是具体的,是真正在运行的计算机硬件和软件。
计算机网络的体系结构通常都具有可分层的特性 ,将复杂的大系统分成若干较容易实现的层次 。分层的基本原则是:
1) 每一居都实现一种相对独立的功能 ,降低大系统的复杂度 。
2)各层之间界面自然清晰 ,易于理解,相互交流尽可能少 。
3)各层功能的精确定义独立于具体的实现方法 ,可以采用最合适的技术来实现 。
4)保持下层对上层的独立性 ,上层单向使用下层提供的服务 。
5) 整个分层结构应能促进标准化工作 。
由于分层后各层之间相对独立 ,灵活性好,因而分层的体系结构易于更新( 替换单个模块), 易于调试,易于交流,易于抽象,易于标准化。但层次越多 ,有些功能在不同层中难免重复出现, 产生了额外的开销 ,整体运行效率就越低 。而层次越少 ,就会使每一层的协议太复杂 。因此,在分层时应考虑层次的清晰程度与运行效率间的折中 、层次数量的折中 。
依据一定的规则 ,将分层后的网络从低层到高层依次称为第 1 层、第 2 层...... 第 n 层,通常还为每一层取一个特定的名称 ,如第1层的名称为物理层 。
在计算机网络的分层结构中 ,第 n 层中的活动元素通常称为 n 层实体。具体地,实体指任何可发送或接收信息的硬件或软件进程 ,通常是一个特定的软件模块。不同机器上同一层称为对等层,同一层的实体叫做对等实体 。n 层实体实现的服务为 n+1 层所利用。在这种情况下,n 层被称为服务提供者 ,n+1 层是服务用户 。
每一层还有自己传送的数据单位 ,其名称、大小、含义也各有不同 。 在计算机网络体系结构的各个层次中 ,每一个报文都分为两个部分,一个是数据部分,也就是 SDU,另外一部分是控制信息部分 ,也就是 PCI ,它们共同组成 PDU 。
服务数据单元 (SDU) :为完成用户所要求的功能而应传送的数据 。第 n 层的服务数据单元记为 n-SDU。
协议控制信息 (PCI):控制协议操作的信息。第 n 层的协议控制信息记为 n-PCI。
协议数据单元 (PDU):对等层次之间传送的数据单位称为该层的 PDU 。第 n 层的协议数据单元记为 n-PDU 。
在实际的网络中 ,每层的协议数据单元都有一个通俗的名称,如物理层的 PDU叫比特,链路层的 PDU 叫帧,网络层的 PDU 叫分组,传输层的PDU 叫报文。 在各层间传输数据时 ,把从第 n+1 层收到的 PDU 作为第 n 层的 SDU,加上第 n 层的 PCI,就变成了第 n 层的 PDU ,交给第 n-1 层后作为 SDU 发送,接收方接收时做相反的处理 ,故可知三者的关系为 :n-SDU+n-PCI=n-PDU=(n - 1)-SDU。其变换过程如图所示。
具体地 ,层次结构的含义包括以下几个方面 :
1) 第 n 层的实体不仅要使用第 n -1 层的服务 ,实现自身定义的功能 ,还要向第 n+1 层提供本层的服务 ,该服务是第 n 层及其下面各层提供的服务总和 。
2)最低层只提供服务,是整个层次结构的基础;中间各层既是下一层的服务使用者,又是上一层的服务提供者;最高层面向用户提供服务 。
3)上一层只能通过相邻层间的接口使用下一层的服务 ,而不能调用其他层的服务;下一层所提供服务的实现细节对上一层透明 。
4)两个主机通信时 ,对等层在逻辑上有一条直接信道 ,表现为不经过下层就把信息传送到对方。
计算机网络协议 、接口、服务的概念
协议
协议 ,就是规则的集合 。在网络中要做到有条不紊地交换数据,就必须遵循一些事先约定好的规则。这些规则明确规定了所交换的数据的格式以及有关的同步问题。这些为进行网络中的数据交换而建立的规则 、标准或约定称为网络协议 (Network Protocol) ,它是控制两个 (或多个) 对等实体进行通信的规则的集合 ,也就是水平的。不对等实体之间是没有协议的,比如用TCP/IP 协议栈通信的两个结点 ,结点 A 的传输层和结点 B 的传输层之间存在协议 ,但结点 A 的传输层和结点 B 的网络层之间不存在协议 。网络协议也简称为协议 。
协议由语法、语义和同步三部分组成。语法规定了传输数据的格式;语义规定了所要完成的功能,即需要发出何种控制信息 、完成何种动作以及做出何种应答;同步规定了执行各种操作的条件、时序关系等 ,即事件实现顺序的详细说明 。一个完整的协议通常应具有线路管理(建立、 释放连接)、差错控制 、数据转换等功能 。
接口
接口是同一结点内相邻两层间交换信息的连接点 ,是一个系统内部的规定 。每一层只能为紧邻的层次之间定义接口 ,不能跨层定义接口。在典型的接口上 ,同一结点相邻两层的实体通过服务访问点 ( Service Access Point, SAP) 进行交互 。服务是通过服务访问点 SAP 提供给上层使用的,第 n 层的 SAP 就是第 n+1 层可以访问第 n 层服务的地方。每个 SAP 都有一个能够标识它的地址。服务访问点SAP是一个抽象的概念 ,它实际上就是一个逻辑接口(类似于邮政信箱),但和通常所说的两个设备之间的硬件接口是很不一样的。
服务
服务是指下层为紧相邻的上层提供的功能调用 ,也就是垂直的。对等实体在协议的控制下 , 使得本层能为上一层提供服务 ,但要实现本层协议还需要使用下一层所提供的服务 。
上层使用下层所提供的服务必须通过与下层交换一些命令 ,这些命令在 OSI 中称为服务原语 。OSI 将原语划分为四类 :
1) 请求 ( Request ) :由服务用户发往服务提供者 ,请求完成某项工作 。
2)指示 ( Indication ):由服务提供者发往服务用户 ,指示用户做某件事 。
3)响应 ( Response ):由服务用户发往服务提供者,作为对指示的响应 。
4)证实 ( Conformation ):由服务提供者发往服务用户,作为对请求的证实 。 这四类原语用于不同的功能 ,如建立连接、传输数据和断开连接等 。有应答服务包括全部四类原语,而无应答服务则只有请求和指示两个原语。
四类原语的关系如图所示。
一定要注意 ,协议和服务在概念上是不一样的。首先,本层协议的实现才能保证向上一层提供服务。本层的服务用户只能看见服务而无法看见下面的协议,即下面的协议对上层的服务用户是透明的 。其次,协议是“水平的”,即协议是控制对等实体之间通信的规则 。但服务是 “垂直的”,即服务是由下层通过层问接口向上层提供的 。另外,并非在一个层内完成的全部功能都称为服务,只有那些能够被高一层实体“看得见” 的功能才称为服务 。
协议、接口、服务三者之间的关系如图所示。
计算机网络提供的服务可按以下三种方式分类 :
1) 面向连接服务与无连接服务
在面向连接服务中 ,通信前双方必须先建立连接 ,分配相应的资源 (如缓冲区),以保证通信能正常进行 ,传输结束后释放连接和所占用的资源 。因此这种服务可以分为连接建立、数据传输和连接释放这三个阶段 。例如 TCP 就是一种面向连接服务的协议 。
在无连接服务中 ,通信前双方不需要先建立连接 ,需要发送数据时就直接发送,把每个带有目的地址的包(报文分组)传送到线路上 ,由系统选定路线进行传输 ,是一种不可靠的服务 。这种服务常被描述为 “尽最大努力交付” (Best-Bffort- Delivery),并不保证通信的可靠性 。例如 IP、 UDP 就是一种无连接服务的协议 。
2) 可靠服务和不可靠服务
可靠服务是指网络具有纠错 、检错、应答机制,能保证数据正确、可靠地传送到目的地。 不可靠服务是指网络只是尽量正确 、可靠地传送 ,但不能保证数据正确、可靠地传送到目的地,是一种尽力而为的服务 。
对于提供不可靠服务的网络 ,其网络的正确性、可靠性就要由应用或用户来保障 。例如,用户收到信息后要判断信息的正确性 ,如果不正确,用户把出错信息报告给信息的发送者,以便发送者采取纠正措施 。通过用户的这些措施 ,可以把不可靠的服务变成可靠的服务 。
注意:并非在一个层内完成的全部功能都称之为服务,只有那些能够被高一层实体 “看得见” 的功能才能称为服务。
3) 有应答服务和无应答服务
有应答服务是指接收方在收到数据后向发送方给出相应的应答 ,该应答由传输系统内部自动实现,而不是由用户实现。所发送的应答可以是肯定应答,也可以是否定应答 ,通常在接收到的数据有错误时发送否定应答 。例如,文件传输服务就是一种有应答服务 。
无应答服务是指接收方收到数据后不自动给出应答 。若需要应答,则由高层实现 。例如WWW服务,客户端收到服务器发送的页面文件后不给出应答 。
ISO/OSI 参考模型和 TCP/IP 模型
OSI 参考模型
国际标准化组织 (ISO)提出的网络体系结构模型 ,称为开放系统互联参考模型 ( OSI/ RM ), 通常简称为 OSI 参考模型。OSI 有七层,自下而上依次为物理层 、数据链路层 、网络层、运输层 、会话层 、表示层 、应用层 。低三层统称为通信子网 ,它是为了联网而附加上去的通信设备,完成数据的传输功能;高三层统称为资源子网,它相当于计算机系统,完成数据的处理等功能。运输 层承上启下 。OSI 层次结构如图所示。
下面详述 OSI 参考模型各层的功能 :
( 1 ) 物理层 ( Physical Layer )
物理层的传输单位是比特 ,任务是透明的传输比特流,功能是在物理媒体上为数据端设备透明的传输原始比特流。
物理层主要定义数据终端设备 (DTE ) 和数据通信设备(DCE) 的物理和逻辑连接方法 ,所以物理层协议也称为物理层接口标准 。由于在通信技术的早期阶段 ,通信规则称为规程 (Procedure)时,故物理层协议也称为物理层规程。
物理层接口标准有很多,如EIA-232C 、EWTIA RS-449 、CCITT 的X.21 等。
上图表示的是两个通信结点及它们之间的一段通信链路 ,物理层主要研究以下内容 :
①通信链路与通信结点的连接需要一些电路接口,物理层规定了这些接口的一些参数 ,如机械形状和尺寸 、交换电路的数量和排列等 ,例如我们笔记本电脑上的两线接口 ,就是物理层规定的内容之一。
②物理层也规定了通信链路上传输的信号的意义和电气特征 。例如物理层规定了信号 A 代表数字 0,那么当结点要传输数字0的时候,就会发出信号 A ,当结点接收到信号A的时候,就知道自己接收到的实际上是数字 0 。
请注意 ,传输信息所利用的一些物理媒体 ,如双绞线 、光缆、无线信道等 ,并不在物理层协议之内而在物理层协议下面 。因此,有人把物理媒体当做第 0 层。
( 2 ) 数据链路层 ( Data Link Layer )
数据链路层的传输单位是帧 ,任务是将网络层传下来的 IP 数据报组装成帧 。数据链路层的功能可以概括为 :成帧、差错控制 、流量控制和传输管理等 。
由于外界噪声的干扰,原始的物理连接在传输比特流时可能发生错误。如上图所示,左边结点想向右边结点传输数字 0,于是发出了信号A,但传输过程中受到干扰 ,信号 A 变成了信号 B,而信号 B 又刚好代表 1,右边结点接收到信号 B,就误以为左边结点传送了数字 1,这样就发生了差错 。两个结点之间如果规定了数据链路层协议 ,就可以检测出这些差错 ,然后把收到的错误信息丢弃 ,这就是差错控制功能 。
如上图所示,在两个相邻结点之间传送数据时 ,由于两个结点性能的不同 ,可能结点 A 发送数据的速度会比结点 B 接收数据的速度快 ,如果不加控制 ,那么结点 B 就会丢弃很多来不及接收的正确数据 ,造成传输线路效率的下降 。流量控制可以协调两个结点的速度 ,使结点 A 发送数据的速度 ,刚好是结点 B 可以接收的速度 。
广播式网络在数据链路层还要处理新的问题 ,即如何控制对共享信道的访问 。数据链路层的一个特殊的子层——介质访问子层 ,就是专门处理这个问题的 。
典型的数据链路层协议有 SDLC、HDLC 、PPP, STP 和帧中继等 。
( 3 ) 网络层 (Network Layer )
网络层的传输单位是数据报 ,它关心的是通信子网的运行控制,主要任务是把网络层的协议数据单元(分组) 从源端传到目的端,为分组交换网上的不同主机提供通信服务 。关键问题是对分组进行路由选择 ,并实现流量控制 、拥塞控制 、差错控制和网际互联等功能 。
如图所示,若结点 A 要向结点 B 传输一个分组 ,可以经过边 a、c、g;也可以经过边b、 h。有很多条可以选择的路由,而网络层的作用就是根据网络的情况,利用相应的路由算法计算出一条合适的路径 ,使这个分组可以顺利到达 B。
流量控制与数据链路层的流量控制含义一样 ,都是协调 A 的发送速度和 B 的接收速度。 差错控制是通信两结点之间约定特定的检错规则 ,如奇偶校验间,接收方根据这个规则检查接收到的分组是否出现了差错 ,如果出现了差错 ,能纠错就纠错,不能纠错就丢弃 ,确保向上层提交的数据都是无误的 。
如果如图所示的结点都处于来不及接收分组 ,而要去弃大量分组的情况的话 ,网络就处于拥塞状态 ,拥塞状态使得网络中两个结点无法正常通信 。网络层要采取一定的措施,缓解这种拥塞,这就是拥塞控制 。
因特网是一个很大的互联网 ,它由大量的异构网络通过路由器 ( Router ) 相互连接起来 。因特网主要的网络层协议是无连接的网际协议 (Internet Protocol, IP ) 和许多路由选择协议 ,因此因特网的网络层也叫做网际层或 IP 层。
请注意 ,网络层中的 “网络” 二字,不是我们通常谈到的具体网络 ,而是在计算机网络体系结构中的专用名词 。
网络层的协议有 :IP、IPX、ICMP 、IGMP 、ARP 、RARP 和 OSPF 等。
( 4 ) 传输层 ( Transport Layer )
传输层也叫运输层 ,传输单位是报文段( TCP ) 或用户数据报 ( UDP ) ,传输层的任务是负责主机中两个进程之间的通信 。功能是为端到端连接提供可靠的传输服务;为端到端连接提供流量控制 、差错控制 、服务质量 、数据传输管理等服务 。
数据链路层提供的是点到点的通信 ,传输层提供端到端的通信 ,两者不同 。通俗来讲 ,点到点可以理解为主机到主机之间的通信 ,一个点是指一个硬件地址或者 IP 地址,网络中参与通信的主机是通过硬件地址或者 IP 地址标识的;端到端的通信是指运行在不同主机内两个进程之间通信,一个进程由一个端口来标识 ,所以叫端到端通信 。
使用传输层的服务,高层用户就可以直接进行端到端的数据传输 ,从而忽略通信子网的存在 。 通过传输层的屏蔽 ,高层用户看不到子网的交替和变化。由于一个主机可同时运行多个进程,因此传输层具有复用和分用的功能 。复用就是多个应用层进程可同时使用下面运输层的服务 ,分用则是运输层把收到的信息分别交付给上面应用层中相应的进程。
传输层的协议有 :TCP 、UDP 。
( 5 ) 会话层 ( Session Layer )
会话层允许不同主机上各进程之间的会话 。会话层利用传输层提供的端到端的服务,向表示层提供它的增值服务 。这种服务主要是向表示层实体或用户进程提供建立连接并在连接上有序地传输数据 ,这就是会话 ,也称为建立同步( SYN)。
会话层负责管理主机间的会话进程 ,包括建立、管理以及终止进程间的会话。会话层使用校验点可使通信会话在通信失效时从校验点继续恢复通信 ,实现数据同步 。
( 6 ) 表示层 (Presentation Layer )
表示层主要用于处理在两个通信系统中交换信息的表示方式 。不同机器采用的编码和表示方法不同,使用的数据结构也不同 。为了使不同表示方法的数据和信息之间能互相交换 ,表示层采用抽象的标准方法定义数据结构 ,并采用标准的编码形式 。数据压缩、加密和解密也是表示层可提供的数据表示变换功能 。
( 7 ) 应用层 ( Application Layer )
应用层是 OSI 模型的最高层,是用户与网络的界面。应用层为特定类型的网络应用提供访问 OSI 环境的手段 。因为用户的实际应用多种多样,这就要求应用层采用不同的应用协议来解决不同类型的应用要求 ,因此应用层是最复杂的一层 ,使用的协议也最多 。典型的有文件传送的 FTP、电子邮件的 SMTP、万维网应用的 HTTP 等。
TCP/IP 模型
ARPA 在研究 ARPAnet 时提出了 TCP/IP 模型,从低到高依次为:网络接口层 (对应 OSI 参考模型中的物理层和数据链路层) 、网际层、传输层和应用层 (对应 OSI 参考模型中的会话层 、 表示层和应用层) 。TCP/IP 由于得到广泛应用而成为事实上的国际标准 。TCP/IP 的层次结构及各层的主要协议如图所示。
网络接口层的功能类似于 OSI 的物理层和数据链路层 。它表示与物理网络的接口 ,但实际上 TCP/IP 本身并没有真正描述这一部分 ,只是指出主机必须使用某种协议与网络连接 ,以便能在其上传递 IP 分组。具体的物理网络可以是各种类型的局域网 ,如以太网、令牌环网 、令牌总线网等,也可以是诸如电话网 、SDH、X.25 、帧中继和 ATM 等公共数据网络 。网络接口层的责任是从主机或结点接收 IP 分组,并把它们发送到指定的物理网络上 。
网际层 ( 主机-主机) 是 TCP/IP 体系结构的关键部分。它和 OSI 网络层在功能上非常相似。 网际层将分组发往任何网络 ,并为之独立地选择合适的路由 ,但它不保证各个分组有序的到达 , 各个分组的有序交付由高层负责 。网际层定义了标准的分组格式和协议 ,即IP协议。当前采用的 IP 协议是第 4 版,即 IPv4 ,它的下一个版本是 IPv6。
传输层 ( 应用-应用,或进程-进程) 的功能同样和 OSI 中的传输层类似,是使发送端和目的端主机上的对等实体可以进行会话 。传输层主要使用以下两种协议:
1) 传输控制协议 ( Transmission Control Protocol, TCP ) 。面向连接的 ,数据传输的单位是报文段,能够提供可靠的交付 。
2)用户数据报协议 (User Datagram Protocol, UDP ) 。无连接的 ,数据传输的单位是用户数据报,不保证提供可靠的交付 ,只能提供“尽最大努力交付” 。
应用层( 用户-用户) 包含所有的高层协议 。如虚拟终端协议(Telnet )、文件传输协议 (FTP )、 域名解析服务(DNS )、电子邮件协议 ( SMTP )、 和超文本传输协议 (HTTP )。
IP 协议是因特网中的核心协议 ;TCP/IP 可以为各式各样的应用提供服务 (所谓的 everything over IP),同时TCP/IP 也允许 IP 协议在各种各样的网络构成的互联网上运行(所谓的 IP over everything ) 。正因为如此 ,因特网才会发展到今天的规模 。
TCP/IP 模型与 OSI 参考模型的比较
TCP/IP 模型与 OSI 参考模型有许多相似之处 。首先,二者都采取分层的体系结构,将庞大且复杂的问题划分为若干个较容易处理的 、范围较小的问题,而且分层的功能也大体相似。其次, 二者都是基于独立的协议栈的概念 。再次,二者都可以解决异构网络的互联 ,实现世界上不同厂家生产的计算机之间的通信 。它们之间的比较如图 所示。
两个模型除了具有这些基本的相似之处外 ,也有很多差别。
第一、OSI 参考模型的最大贡献就是精确地定义了三个主要概念 :服务、协议和接口 ,这与现代的面向对象程序设计思想非常吻合 。而 TCP/IP 模型在这三个概念上却没有明确区分,不符合软件工程的思想 。
第二 、OSI 参考模型产生在协议发明之前,没有偏向于任何特定的协议,通用性良好 。但设计者在协议方面没有太多经验 ,不知道把哪些功能放到哪一层更好 。TCP/IP 模型正好相反 。首先出现的是协议 ,模型实际上是对己有协议的描述,因此不会出现协议不能匹配模型的情况,但该模型不适合于任何其他非 TCP/IP 的协议栈。
第三、TCP/IP 模型在设计之初就考虑到多种异构网的互联问题 ,并将网际协议IP作为一个单独的重要层次 。OSI 参考模型最初只考虑到用一种标准的公用数据网将各种不同的系统互联。 后来,OSI 参考模型认识到网际协议 IP的重要性,因此只好在网络层中划分出一个子层来完成类似于 TCP/IP 模型中 IP 的功能。
第四、OSI 参考模型在网络层支持无连接和面向连接的通信 ,但在传输层仅有面向连接的通信 。而TCP/IP 模型认为可靠性是端到端的问题 ,因此它在网际层仅有一种无连接的通信模式 , 但在传输层支持无连接和面向连接两种模式 。
无论是 OSI 参考模型,还是 TCP/IP 模型都不是完美的 ,对二者的讨论和批评都很多。OSI 参考模型的设计者从工作的开始 ,就试图建立一个全世界的计算机网络都要遵循的统一标准。从技术角度来看 ,他们希望追求一种完美的理想状态 ,这也导致基于 OSI 参考模型的软件效率极低 。 OSI 参考模型缺乏市场与商业动力 ,结构复杂,实现周期长 ,运行效率低 ,这是它没有能够达到预想目标的重要原因 。
在学习计算机网络时往往采取折中的办法,即综合 OSI 和 TCP/IP 的优点,采用一种如图所示的只有五层协议的体系结构 ,即我们所熟知的物理层 、数据链路层、网络层、传输层和应用层 。
最后,简单介绍使用通信协议栈进行通信的结点的数据传输过程。每个协议栈的最顶端都是一个面向用户的接口 ,下面各层是为通信服务的协议 。当用户要传输一个数据报时,通常是给出用户能够理解的自然语言 ,然后通过应用层,自然语言会转化为用于通信的通信数据 。通信数据到达运输层,作为运输层的数据部分(运输层 SDU) ,加上运输层的控制信息 (运输层 PCI ),组成运输层的 PDU ,然后交到网络层 ,运输层的PDU 下放到网络层后 ,就成为网络层的 SDU,然后加上网络层的PCI,又组成了网络层的PDU ,下放到数据链路层,就这样层层下放,层层包裹 ,最后形成的数据报通过通信线路传输 ,到达接收方结点协议栈,接收方再逆向地一层一层把 “包 裹” 拆开 ,然后把收到的数据提交给用户 。如图所示。