计算机网络(第3版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4.2 网络协议

下面回到计算机之间的通信问题上。计算机之间的数据通信实际上是指计算机上的对等层(peer-to-peer)实体之间进行数据交换(实体是指计算机上能够发送和接收数据的任何事物,比如进程或硬件设备)。要想让不同计算机上的两个对等层实体顺利通信(即一台计算机上的第N层实体与另一台计算机上的第N层实体进行对话),两个实体之间必须就通信内容(讲什么)、如何通信(怎么讲)、何时通信(什么时候讲)等事项达成一致,这就是协议(protocol)。

协议定义了两个或多个通信实体之间交换的报文格式和次序,以及在报文传输、报文接收或其他事件方面所采取的动作。

一般来说,计算机网络和互联网广泛地使用了协议。不同协议用于完成不同的通信任务。当阅读完本书之后你将会知道,一些协议简单且直接,而另外一些协议复杂且难懂。掌握计算机网络领域知识的过程就是理解网络协议的构成和原理的过程。

实际上,协议就是控制和管理两个实体之间数据通信过程的一组规则和约定,如图1-13所示。

图1-13 协议和接口

同一台计算机上相邻层之间(即不同实体之间,如不同进程之间)的通信也有约定,我们称这种约定为接口(interface)或服务接口(service interface),即下层通过接口向上层提供服务。接口定义了上层如何调用下层提供的服务。当网络设计者决定在一个网络中应该包含多少层以及每一层应该提供哪些功能时,其中最需要清楚地定义好不同层之间尤其是相邻层之间的接口。为了做到这一点,网络设计者应准确定义好每一层要完成的特定功能。良好的接口定义除了可以尽可能地减少层与层之间要传递的信息的数量以外,还可以方便人们用某一层协议的新实现来代替原来的实现或者用新的协议来代替原来的旧协议。

需要注意的是,协议通常由协议规范(protocol specification)来描述,例如可以用文字、伪代码、状态转换图等形式来描述协议。而同一个协议规范可以由不同人员在不同的软硬件平台上采用不同的方法来实现,即同样的协议规范可能有不同的实现。如果某个协议规范的两个不同实现(即不同的软硬件)能够成功地交换信息,我们就称这两个协议实现彼此是可互操作的(interoperable),协议实现之间的互操作是非常重要的特性。

我们将网络中层次和协议的集合称为网络体系结构(network architecture)。实际上,网络体系结构包括网络的层数、每一层所必须完成的功能以及每一层使用的协议等。对网络体系结构的描述必须包括足够的信息,使实现者可以为每一层进行软硬件设计与实现,并使之符合相关协议。协议实现的内部细节和接口规范不属于网络体系结构的内容,因为它们隐藏在机器内部,对外界是不可见的。一个特定的网络系统所使用的一组协议(每一层至少有一个协议)称为协议栈(protocol stack)。

下面来考察一个五层网络示例,看看在图1-14给出的五层网络中,下层是如何向上层提供通信服务的。

图1-14 五层网络示例

在第5层运行的某应用进程产生了消息M并把它交给第4层进行发送。第4层在消息M前加上一个报头(header),报头主要包括控制信息,如序号,以便目标机器上的第4层在下层不能保持消息顺序时,把乱序的消息按原来的顺序组装好。

在很多网络中,第4层对接收的消息长度没有限制,但在第3层通常存在一个限度。因此,第3层必须将接收的消息分成较小的单元,如报文(packet),并在每个报文前加上一个报头。在本示例中,消息M被分成两部分:M1M2

第3层确定主机之间的通信使用哪一条路径,然后将报文传送给第2层。第2层不仅给每个报文加上头部,还要加上尾部信息,构成新的数据单元,通常称为帧(frame),然后将其传送给第1层进行实际的物理传输。在接收端,数据每向上递交一层,该层的头部就被剥掉。

在图1-14中,除了在最下层对等实体之间直接通过一条物理链路进行通信外,其他层对等实体之间的通信是间接的。我们称最下层对等实体之间的直接通信为物理通信(physical communication),而其他层对等实体之间的间接通信为虚拟通信(virtual communication)。

比如,第4层的对等进程,在概念上认为它们之间的通信是水平方向地应用第4层协议。每一方好像都有一个叫作“发送到另一方”和一个叫作“从另一方接收”的过程,尽管实际上这些过程是跨过3/4层接口与下层通信而不是直接与另一方通信。

对等通信这一抽象概念对网络设计是至关重要的。有了这种抽象技术,就可以把网络设计这种难以处理的大问题划分成几个易于处理的小问题,这就是分层的设计。

在上面给出的分层网络示例中,还涉及一个关于报文封装的概念。第4层在接收到第5层交给它的消息M时,要加上一个头部,从而构成第4层的报文。一般来说,头部是一个小的数据结构,大小为几个字节到十几个字节,用于对等层实体之间的通信。另外,在有些情况下,对等层通信所需要的控制信息还可以加在消息的尾部(tailer),图1-14所示的第2层的报文中就有一个尾部。不管某层协议的控制信息在头部还是尾部,其确切的格式和含义都由该层协议规范来定义。