第七章协议实现技术7.1概述计算机网络各层协议实现结果的集合形成计算机网络软件和硬件。计算机网络软件和计算机操作系统密切相关,它往往是操作系统的一部分,计算机网络硬件和计算机硬件系统密切相关,它是计算机I/O系统的一部分。图7.1为DEC公司的DNA在VAX/VMS中的实现结构。DNA(DigitalNetworkArchitecture)是DEC公司所采用的各层网络协议的总称,它在VAX/VMS之中实现后软件和硬件的总称为DECNET/VMS。第七章协议实现技术deviceadaptorVAX硬件系统devicedrivers核数据链路层物理层NETDRIVER会晤层传输层网络层networkutilitiesnetworkobjectsVMSVMS应用层第七章协议实现技术DNA的物理层和数据链路层协议实现于网络适配器(deviceadaptor)中,DECnet/VMS包括许多网络适配器,即DNA支持许多种低层通信协议。DNA的网络层和传输层协议主要实现于伪驱动程序NETDRIVER中,它和网络适配器的设备驱动程序(devicedriver)接口。DNA的高层协议以网络目标模块形式或实用程序的形式实现,DECnet/VMS包括许多这样的目标模块(object)和实用程序(utility),这表示它向用户提供丰富的网络服务。这里,NETDRIVER和devicedriver是VMS内核一部分,DNA高层和VMS的文件系统,作业调度,用户登陆(login)等密切联系,网络适配器是VAX硬件系统的一部分,计算机网络各层协议在其它机器和操作系统中实现形式和实现结构都类似于DECnet/VMS。第七章协议实现技术计算机网络协议是复杂的协议,将它们付诸实现更是一个复杂的技术过程,这是因为计算机网络硬件和软件与计算机硬件操作系统的关系非常密切的原故。一个计算机网络的研制要经历下述七步工作。(1)网络体系结构的制定网络体系结构(NetworkArchitecture)的制定包括许多决策工作:网络支持哪些通讯线路和局域网?向用户提供哪些网络服务?网络划分成多少层?各层的协议功能是什么?各层协议规范和服务规范是什么?第七章协议实现技术(2)实现环境的研究实现环境指计算机的机型和运行的操作系统。实现环境的研究是协议实现者必须进行的一项工作,这包括计算机硬件结构和I/O总线的详细了解,操作系统结构和操作系统服务的详细了解等等。(3)实现结构的设计在(1)和(2)的工作完成之后,协议设计者就可以着手网络实现结构设计。实现结构的设计包括一系列的决策工作:哪几层协议在网络适配器中实现,哪几层协议在操作系统中实现?操作系统的网络软件划分成几个进程,每个进程实现哪几层协议?如果几层协议在同一个进程实现时,各层协议之间怎样相互调用?为了提高网络软件执行效率和连接响应速度应采用哪些措施等等。第七章协议实现技术(4)各层协议实体之间通讯机制设计当n层协议和(n-1)层协议在不同的进程或驱动程序之间实现时,n层协议实体和n-1层协议实体之间通讯必须借助操作系统服务来实现。当n层协议和(n-1)层协议在同一个进程或驱动程序之内实现时,两层协议实体之间通讯可直接借助于程序设计语言(c,pascal)来实现。(5)数据缓冲方案的设计协议数据单元PDU(protocoldataunit)在各层协议实体之间的传递是通过缓冲器来实现的。数据缓冲方案的设计包括一系列的决策工作:缓冲器中的数据怎样传递?是否采用共享缓冲器方案?缓冲器定义多大?缓冲器怎样分配管理?缓冲器的分配管理怎样对网络流控制和交通拥塞控制施加影响等等。第七章协议实现技术(6)各层协议代码的产生协议代码可分为两部分:与实现环境相关的协议代码和独立于实现环境的协议代码。前者必须由协议实现者手工完成,后者可手工完成也可以借助形式语言的编辑程序(如ESTELLEcompiler)自动产生。(7)网络软件的调试由于网络软件的分布性,异步性和实时性,传统的静态调试工具是不适应的,因此设计者必须研制多种动态调试工具以提高网络软件调试效率。这些调试工具包括各种模拟环境,闭环测试软件,PDU追踪,时间标签,事件记录等。第七章协议实现技术限于篇幅,本章只讨论(4)、(5)、(6)步骤的有关问题,首先介绍协议代码半自动生成技术,然后讨论上下层协议实体之间通讯的实现方法,最后讨论数据缓冲技术。如果我们掌握了第(4)和第(5)步的设计方法,那么与实现环境相关的协议代码就可以手工完成了。计算机网络研制工作中第(1)、(2)、(3)和(7)步工作的讨论请参见文献资料[42]和[34]。第七章协议实现技术7.2协议代码半自动生成技术协议代码半自动生成技术试图将协议规范文本(用ESTELLE、LOTOS等语言描述)直接转换成协议代码(c.pascal等程序设计语言)。如果所产生的代码不需要人工修改就可以编译成机器可执行的程序,这是最理想的。但由于计算机网络软件和操作系统结合紧密,这实际上是不现实的。由协议规范直接转换的协议代码只能占全部代码的一部分,约50%左右[33],这部分代码称之为独立于实现环境的代码,另外一部分代码由于和实现环境相关,必须由手工完成。协议代码的这种生成方法称之为协议代码的半自动生成技术。关于协议代码半自动生成技术是否值得深入研究的问题,人们尚有不同的看法。然而,半自动生成技术显然有如下一些好处:第七章协议实现技术(1)利用同一个翻译程序从同一个协议规范中产生的协议代码总是一致的,它不随协议实现者的不同而不同。这就是说,所有协议实现者都能够获得一份相同的协议代码。虽然这一部分协议代码只占总代码的50%左右,但它包括协议的主体部分。它确定了协议的所有逻辑关系,因此它为协议的不同实现版本的互连提供了良好的基础。(2)协议规范的更新修改不会给协议实现者带来太多的麻烦,它只要重新运行一次翻译程序就可以了。(3)由此减少手工编程的错误,缩短网络软件的开发周期,提高网络软件可维护性。第七章协议实现技术目前,世界上已开发了多种协议代码半生成软件,它们大都基于ESTELLE,LOTOS和SDL语言,翻译后的协议代码大都为C代码。下面简单介绍EDS(EstelleDevelopmentSystem)中协议代码半自动生成的基本过程[33],它将协议代码半自动生成过程分为四步。ESTELLE半自动生成过程可用图7.2表示,图中.e表示类型为.e的文件,.m表示类型为.m文件······。f第七章协议实现技术1.协议规范的预处理用形式描述语言描述的协议规范中往往存在许多没有具体数值的符号定义。例如用ESTELLE描述的AB协议中(参见第四章4.2.4),常数low,high,retran-time未给出具体数值,预处理要求实现者给出具体数值。又例如,在ESTELLE:描述的AB协议中,数据类型定义U一data一type是含糊的(它用······表示),这要求协议实现者给出它的具体定义(如定义为stringofcharacters)。预处理要做的工作包括原语primitive的标识等工作。预处理的第二项重要工作是将协议规范文本(.e)分割成三个文件:模块描述文件(.m),实现描述文件(.i)和格式描述文件(.f)。模块描述文件即为原协议规范中的模块头定义和模块体定义。实现描述文件将原协议规范中有关各模块的性质定义,模块之间组织关系描述,模块之间通讯机制描述等全局性内容抽取出来,形成一个描述整个协议的框架文件。格式描述文件完整地描述模块之间报文交换的格式,它也是从原协议规范文件中抽出来的。第七章协议实现技术2.翻译预处理后的协议规范直接送入ESTELLEcompiler翻译,翻译包括语法校对、C代码生成等工作。对模块体文件,翻译结果是对应于每一个ESTELLE模块体产生一个C代码的模块头文件(headfile)和一个C代码的模块体文件(bodyfile)。模块头文件包含模块体内所有数据结构和变量(如交互点ip和ep、队列等)。模块体文件包含模块体内所有函数、过程的代码,除模块体原有的函数和过程定义之外,模块体的每一个转换都翻译成过程。第七章协议实现技术第七章协议实现技术第七章协议实现技术3.手工程序的编写凡是与系统相关的部分(通讯机制、缓冲器管理、文件访问、访问控制等等)必须由协议实现者根据实现环境手工编写。4.执行代玛的产生上述所有C程序文件编译后链接成一个或几个系统可执行的文件,每个可执行的文件对应于一个进程或用户启动的实用程序。第七章协议实现技术7.3模块通讯的实现方法ESTELLE模块之间的通讯的实现很大程度上依赖于操作系统所提供的服务。在VAX/VMS环境中,如果两个模块体分别用两个进程实现,那么VMS所提供的进程通讯服务就成为模块通讯实现的基础。VAX/VMS提供的进程通讯机制包括邮箱、共享存贮区、事件、共享文件,其中邮箱是常用的通讯方法。第七章协议实现技术邮箱是VMS的一种伪设备,用户程序通过标准的QIO服务就可以读写邮箱。邮箱名是系统逻辑符号,为所有进程所认识。当多个进程对名字相同的邮箱进行读写时,它们实际上就进行通讯。下面列出有关邮箱服务和c语言调用。(1)定义邮箱名$DESCRIPTOP(mbx_name,”MBX_NAME”);mbx_name为放置邮箱名字符串MBX_NAME的变量。第七章协议实现技术(2)定义邮箱通道intmbx_ch;mbx_ch为32位的长字,它放置邮箱通道号。(3)创建邮箱通道sys$crembx(1,&mbx_ch,0,0,0,0,&mbx_name);VMS系统服务crembx创建一个邮箱(如果该邮箱不存在),并赋于一个通道号,&表示传递变量的地址值。第七章协议实现技术(4)QIO操作sys$qio(0,mbx_ch,IO$_WRITEVBLK,0,0,0,&mail,mail_size,0,0,0,0);sys$qio(0,mbx_ch,IO$_READVBLK,0,0,0,&buf_size,0,0,0,0);第一个QIO服务(记作QIO(write))向邮箱发一个邮件,第二个QIO服务(记作QIO(read))从邮箱读一个邮件,mail为发出的邮件,buf为放置接收邮件的缓冲器。QIO(read)可以通过AST(AsyncTrap)形成异步地进行(类似中断方式),这给用户程序的设计带来很多好处。(5)取消邮箱sys$delmbx(mbx_ch);切断用户程序和邮箱之间建立的通路。第七章协议实现技术熟悉了VMS邮箱的使用方法,我们就很容易找到怎样实现ESTELLE模块之间通讯的实现途径。下面简述邮箱服务和ESTELLE模块通讯语句之间对应关系。(1)channel定义一个channel对应一个VMS邮箱,channel名用$DESCRIPTOR来说明,channel定义中交互用过程表示,每个过程负责向邮箱发出一个邮件,邮件内容包括交互名和传递的参数。下面的例子说明AB协议channelN-access-point定义翻译成C语言的情况第七章协议实现技术第七章协议实现技术第七章协议实现技术第七章协议实现技术7.4数据缓冲技术协议数据单元(PDU)在机器中的存贮以及上下层协议实体之间的传递是通过缓冲器来实现的,因此缓冲器的使用、分配和管理成为协议实现中关键技术之一。数据缓冲技术涉及三个问题:存贮空间的利用率,对协议执行速度的影响,对协议机制和网络性能的影响。(1)存贮空间利用率协议数据单元的大小不是固定的,小到几个字节,大到数千个字节。如果按最大的单元固定划分缓冲器,对于小报文,存贮空间利用率很低。一个网络中总是存在许多用户,在多用户情况下,一个机器中的逻辑链路数是随用户而动态变化的。如果按照最大用户数给每条逻辑链路分配固定的缓冲器,那么在用户少的情况下,存贮空间浪费较大。第七章协议实现技术(2)协议执行速度协议数据单元在上下层的传递可采用两种方法:缓冲器指针传递法和缓冲器复制法。很显然,前者的额外开销小,协议执行速度高。问题(l)和(2)是有矛盾的。为了提高存贮空间利用率