ISO/OSI 参考模型和 TCP/IP 参考模型
OSI 参考模型
国际标准化组织(ISO)提出的网络体系结构模型称为开放系统互连参考模型(OSI/RM),简称 OSI 参考模型。OSI 参考模型有 7 层,自下而上(第 1~7 层)依次为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。OSI 参考模型的层次结构如图所示。

物理层
物理层的传输单位是比特,功能是在物理介质上为数据端设备透明地传输原始比特流。下图表示的是两个通信节点及它们之间的一段通信链路,物理层主要研究以下内容:
(1)通信链路与通信节点的连接需要一些电路接口,物理层规定了这些接口的一些参数,如机械形状和尺寸、引脚的数量和排列等,例如笔记本电脑上的网线接口。
(2)物理层规定了通信链路上所传输的信号的意义和电气特征。例如,若规定信号 X 代表数字 0 ,则当节点传输 0 时就发出信号 X ,而当节点接收到信号 X 时就知道收到的是 0 。
注意,传输信息所用的一些物理介质(如双绞线、光缆、无线信道等)并不在物理层协议之内,而在物理层协议下面。因此,有人将物理介质当作第 0 层。
数据链路层
数据链路层的传输单位是帧。两台主机之间的数据传输总是在一段一段的链路上进行的,这就需要使用专门的链路层协议。主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路。数据链路层将网络层交来的 IP 分组封装成帧,并且可靠地传输到相邻节点的网络层,实现节点之间的差错控制和流量控制的功能。
因为外界噪声的干扰,所以原始的物理连接在传输比特流时可能发生错误。如图1.10所示,节点 A 想向节点 B 传输数字 0 ,于是发出信号 X ;但在传输过程中受到干扰,信号 X 变成了信号 Y ,而信号 Y 又刚好代表1,节点 B 接收到信号 Y 时,误以为节点 A 传送了数字 1 ,从而发生差错。差错控制可以检测出这些差错,然后将收到的错误信息丢弃。
如图所示,在两个相邻节点之间传送数据时,节点 A 的发送速率可能比节点 B 的接收速率快,若不加以控制,则节点 B 就会丢弃很多来不及接收的正确数据,造成传输线路效率下降。流量控制可以协调两个节点的速率,使节点 A 的发送速率刚好是节点 B 的接收速率。
广播式网络在数据链路层还要处理新的问题,即如何控制对共享信道的访问。
网络层
网络层的传输单位是数据报。它关心的是通信子网的运行控制,主要任务是将网络层的协议数据单元(分组)从源主机传输到目的主机,为分组交换网上的不同主机提供通信服务。关键问题是对分组进行路由选择,并实现流量控制、拥塞控制、差错控制和网际互联等功能。网络层既提供有连接可靠的虚电路服务,又提供无连接不可靠的数据报服务。
【注】 无论是在哪一层传送的数据单元,都可以笼统地用“分组”来表示。
在如图所示的某网络结构图中,当节点 A 向节点 B 传输一个分组时,既可经过边 a、c、g ,也可经过边 b、h ,有多条可以选择的路由,而网络层的作用是根据网络的情况,利用相应的路由算法计算出一条合适的路径,使这个分组可以顺利地到达节点 B。

流量控制与数据链路层的流量控制的含义一样,都是协调 A 的发送速率和 B 的接收速率。
若图中的节点都来不及接收分组而丢弃大量分组,导致节点间无法正常通信,则网络处于拥塞状态。网络层要采取措施来缓解这种拥塞,这就是拥塞控制。
差错控制是通信节点之间约定的特定检错规则,接收方根据该规则检查接收到的分组是否出错,若出错,则能纠错就纠错,不能纠错就丢弃,确保向上层提交的数据都是无误的。
传输层
传输层也称运输层,负责主机中两个进程之间的通信,提供端到端的流量控制、差错控制、连接建立与释放、可靠传输管理等服务,传输层仅提供有连接可靠的服务。
数据链路层提供的是点到点通信,传输层提供的是端到端通信,两者不同。
通俗地说,点到点可理解为主机和主机之间的通信,一个点是指一个硬件地址或 IP 地址,网络中参与通信的主机是通过硬件地址或 IP 地址来标识的;端到端通信是指运行在不同主机内的两个进程之间的通信,一个进程由一个端口来标识,因此称为端到端通信。
通过传输层的屏蔽,高层用户看不到通信子网的交替和变化。因为一台主机可同时运行多个进程,所以传输层具有复用和分用的功能。复用是指多个应用层进程可同时使用下面传输层的服务,分用是指传输层将收到的信息分别交付给上面应用层中相应的进程。
会话层
会话层允许不同主机上的各个进程之间进行会话。这种服务主要为表示层实体或用户进程建立连接,并在连接上有序地传输数据,这就是会话,也称建立同步(SYN)。会话层负责管理主机间的会话进程,包括建立、管理和终止进程间的会话。会话层包含一种称为检查点的机制来维持可靠会话,使通信会话在通信失效时从检查点继续恢复通信,即断点下载的原理。
表示层
表示层主要处理在不同主机中交换信息的表示方式。不同机器采用的编码和表示方法不同,为了使不同表示方法的数据和信息之间能够互相交换,表示层采用抽象的标准方法定义数据结构,并采用标准的编码形式。此外,数据压缩、加密和解密也是表示层的功能。
应用层
应用层是 OSI 参考模型的最高层,是用户与网络的接口。应用层为特定类型的网络应用提供访问 OSI 参考模型环境的手段。用户的实际应用多种多样,这就要求应用层采用不同的应用协议来满足不同类型的应用要求,因此应用层是最复杂的一层,使用的协议也最多。
TCP/IP 模型
TCP/IP 模型从低到高依次为网络接口层(对应 OSI 参考模型的物理层和数据链路层)、网际层、传输层和应用层(对应 OSI 参考模型的会话层、表示层和应用层)。TCP/IP 因为得到广泛应用而成为事实上的国际标准。TCP/IP 模型的层次结构及各层的主要协议如图所示。

网络接口层的功能类似于 OSI 参考模型的物理层和数据链路层,其作用是从主机或节点接收 IP 分组,并将它们发送到指定的物理网络上。但 TCP/IP 并未具体描述网络接口层的功能和协议,只是指出主机必须使用某种协议与网络连接,以便在其上传送 IP 分组。具体的物理网络既可是各种类型的局域网,如以太网、令牌环网等,又可是诸如电话网、ATM 等公共数据网络。
网际层(主机-主机)是 TCP/IP 体系结构的关键部分,功能上它与 OSI 参考模型的网络层非常相似。网际层将分组发往任何网络,并为其独立地选择合适的路由,但不保证各个分组有序地到达,各个分组的有序和可靠交付由高层负责。网际层仅提供无连接不可靠的IP,数据传输的单位是 IP 数据报。当前采用的 IP 是第4版,即 IPv4,它的下一版本是 IPv6。
传输层(应用-应用或进程-进程)的功能同样与 OSI 参考模型中的传输层类似,即使得发送端和目的端主机上的对等实体进行会话。传输层主要使用以下两种协议:
1)传输控制协议(Transmission Control Protocol,TCP)。它是面向连接的,传输数据之前必须先建立连接,能够提供可靠的交付。数据传输的单位是报文段。 2)用户数据报协议(User Datagram Protocol,UDP)。它是无连接的,不保证提供可靠的交付,只能提供"尽最大努力交付"。数据传输的单位是用户数据报。 应用层(用户一用户)包含所有的高层协议,如虚拟终端协议(Telnet)、文件传输协议(FTP)、域名解析服务(DNS)、电子邮件协议(SMTP)和超文本传输协议(HTTP)。
由图1.12可以看出,IP 是互联网中的核心协议;TCP/IP 可为各式各样的应用提供服务(所谓 everything over IP),TCP/IP 还允许 IP 在由各种网络构成的互联网上运行(所谓 IP over everything)。因此,互联网才会发展到今天的规模。
TCP/IP 模型与 OSI 参考模型的比较
TCP/IP 模型与 OSI 参考模型有许多相似之处。 首先,二者都采取分层的体系结构,且分层的功能也大体相似。 其次,二者都是基于独立的协议栈的概念。 最后,二者都可解决异构网络的互联,实现不同厂家生产的计算机之间的通信。 TCP/IP 模型与 OSI 参考模型的层次对应关系如图所示。

两个模型除了具有这些基本的相似之处,也有很多差别。 第一,OSI 参考模型的最大贡献是精确定义了三个主要概念:服务、协议和接口,这与现代的面向对象程序设计思想非常吻合。而 TCP/IP 模型在这三个概念上没有明确区分。
第二,OSI 参考模型是 7 层模型,而 TCP/IP 模型是 4 层结构。TCP/IP 模型将 OSI 参考模型的表示层和会话层的功能合并到了应用层,还将数据链路层和物理层合并为网络接口层。
第三,OSI 参考模型先有模型,后有协议规范,通用性良好,适合描述各种网络。TCP/IP 模型正好相反,即先有协议栈,后建立模型,因此不适合任何其他的非 TCP/IP 网络。
第四,OSI 参考模型在网络层支持无连接和面向连接的通信,但在传输层仅有面向连接的通信。而 TCP/IP 模型认为可靠性是端到端的问题,因此它在网际层仅有一种无连接的通信模式,但传输层支持无连接和面向连接两种模式。这个不同点容易在考试中出现。
OSI 参考模型和 TCP/IP 模型都不是完美的,对二者的批评都很多。OSI 参考模型的设计者从一开始就试图建立一个全世界的计算机网络都要遵循的统一标准。从技术角度看,他们追求一种完美的理想状态,导致基于 OSI 参考模型的软件效率极低。OSI 参考模型缺乏市场与商业动力,结构复杂,运行效率低,这是它未能达到预期目标的重要原因。
学习计算机网络时,我们往往采取折中的办法,即综合 OSI 参考模型和 TCP/IP 模型的优点,采用一种如图1.14所示的只有 5 层协议的体系结构,本书也采用这种体系结构进行讨论。

最后简单介绍使用协议栈进行通信的数据传输过程。每个协议栈的顶端都是一个面向用户的接口,下面各层是为通信服务的协议。用户传输的数据通常是用户能够理解的自然语言,通过应用层将自然语言转化为用于通信的通信数据。通信数据到达传输层,作为传输层的服务数据单元 (传输层 SDU ),加上传输层的协议控制信息(传输层 PCI ),组成传输层的 PDU;下放到网络层后,就成为网络层的 SDU,加上网络层的 PCI,又组成了网络层的 PDU;下放到数据链路层……就这样层层下放,层层包裹,最后形成的数据包通过通信线路传输,到达接收方节点协议栈,接收方逆向逐层地拆开"包裹",然后将收到的数据提交给用户,如图所示。
