2.1 协议模型
在讨论协议设计之前,我们先给出协议模型。对于复杂的协议设计,一般采用分层的方法来实现(见2.3节)。下面我们用OSI体系结构中的概念来描述n层协议模型,如图2-1所示。在OSI中,实体(entity)表示任何可以发送和接收信息的硬件或软件进程。在许多情况下,实体就是一个特定的模块。两个(n)实体在(n)协议的控制下通信,使(n)层能够向上一层(n+1)提供服务。这种服务就是(n)服务。接受(n)服务的是上一层实体,即(n+1)实体。它们也称为(n)用户或更严格地称为(n)服务用户。
一个(n)实体向上一层所提供的服务由以下三部分构成:
(1)(n)实体自己提供的某些功能。
(2)从(n-1)层及其以下各层以及本地系统环境得到的服务。
(3)通过与处在另一系统中的对等(n)实体的通信而得到的服务。
图2-1 n层协议模型
将(n)层对等实体之间,为实现该层协议所交换的信息单元称为协议数据单元(PDU,Protocol Data Unit)。通常将第n层的协议数据单元记为(n)PDU。PDU通常由两部分构成:用户数据和协议控制信息(PCI,Protocol Control Information)。PCI一般作为首部加在用户数据的前面,但有时也可作为尾部加在用户数据的后面,例如,用于差错检测的检验和(checksum)常放在尾部。根据PDU中是否携带用户数据,可将其分为两种类型:数据PDU和控制PDU,后者不携带用户数据。
在不同的协议层次中,PDU还有一些其他的表示法。例如,在物理层中,常称为比特(bit);在数据链路层中称为帧(frame)或信元(cell),而在网络层中常称为分组或包(packet);在运输层以上则常称为报文(message)。
同一系统中相邻两层的实体进行交互(即交换信息)之处,通常称为服务访问点(SAP,Serivce Access Point)。在进行交互时所要交换的一些必须信息(或命令)称为服务原语(Service Primitives),以表明需要本地的或远端的对等实体做哪些事情。在OSI中规定了每一层均可使用的4种服务原语:Request、Indication、Response、Confirm,如表2-1所示。OSI将层与层之间交换的数据的单元称为服务数据单元(SDU,Service Data Unit)。换句话说,一个(n)服务数据单元就是(n)服务所要传送的逻辑数据单元。SDU就是数据PDU中的用户数据,但不一定是一一对应关系。例如,可以是多个SDU合成为一个PDU(称为“拼装”),也可以将一个SDU划分为几个PDU(称为“分段”)。
表2-1 4 种服务原语及其意义
在OSI/RM出现之前,很多协议设计者并没有把服务和协议分离开来。事实上,它们之间是有区别的。
首先,在分层次的体系结构中,协议的实现保证了能够向上一层提供服务。本层的服务用户只能看见服务而无法看见下面的协议,下面的协议对上面的服务用户是透明的。
其次,协议是“水平的”,即协议是控制对等实体之间通信的规则。但服务是“垂直的”,即服务是由下层向上层通过层间接口提供的。还应注意到,并非在一个层内完成的全部功能都称为服务。只有那些能够被高一层看得见的功能才能称之为“服务”。上层使用下层所提供的服务必须通过与下层交换一些命令,这些命令在OSI中称为服务原语。
如果协议设计时,不把服务和协议分离开来,就相当于:一个层次有一个“发送分组”的服务原语,用户将完全装配好的分组的指针作为参数传递给该服务原语。这样的设计意味着协议的变化对用户来说是可见的。从多年的实践来说,这种做法是失败的。
这里要注意的是,某一层向上一层所提供的服务实际上已经包括了在它以下各层所提供的服务。所有这些对上一层来说就相当于一个服务提供者。在服务提供者的上一层的实体,也就是“服务用户”,它使用服务提供者所提供的服务。
上述概念在以后的讨论中可能会经常碰到,要好好掌握。