为了分析和介绍数据链路层的设计原理,先定义本章中将要用到的基本模型。由于数据链路层担负着两个相邻结点之间的数据传输,所以可以把网络中两相邻结点之间的信道简化为如图4.1.3所示的模型。
图4.1.3 数据链路协议的简化模型
为讨论方便起见,把数据链路层的上层称为主机,并略去其它细节,只研究报文和帧的传输过程,而把报文分组的传输过程放在一边不管(相当于无网络层)。基本思想是,当数据链路层收到上层的一个报文后,尽管在有噪音的线路上,它也须将报文无误地传送。在这里,报文来自于第三层还是第四层是无关紧要的。
在数据链路层传送报文之前,要将其封装到一个帧中,即构造帧。帧包含有一定的控制信息和报文(数据)本身。在相邻的CCP之间传送的就是这些帧。帧的格式如下:
报文封装在Info域中。在后面所讨论的协议中,并非全都用到了这些域,但为了讨论方便,还是使用了统一的格式。(www.xing528.com)
下面给出了以后要讨论的各协议范例均遵守的声明语句及其使用过程。这里定义了五种数据结构:bit,SequenceNr,message,FrameKind,Frame.bit=0或1.SequenceNr是一个小的整数,用于给帧编号以便加以区别。常数MaxSeq与每个协议一起定义。假设message(报文)是CCP与主机之间的数据单位,在本节模型中,message总是恰为LastBit+1比特,而实际上message的长度将在0到LastBit+1比特之间变化。
上面列出的这些程序都假设是一些相适应的库过程,不必理会其中的细节。sendf(发送帧)和getf(接收帧)为与物理层的接口。校验字段由硬设备自动加上,故在软件中不考虑这一点。在各个范例中,协议都是由事件驱动的,调用过程Wait(event)后将等待某个事件的发生。如果发生了某种事件,将会返回给event某个值,用于说明发生了哪种事件。事件有CksumErr(校验错误),FrameArrival(帧无损到达),HostReady(主机就绪),TimeOut(超时)等等。
当一帧无误到达后,协议将对报头的控制信息进行检查。如果各个项目都正确无误,帧中的数据部分将送往上层,而其余的部分不再上送,这个过程就是报文的拆封过程。如果发出的报文是有顺序的,那么送往收方上层的报文也应依此顺序,不能乱序或重复,更不能丢失某一帧报文。若做不到这一点,协议就是失败的。
为了讨论方便起见,将忽略各个协议的链路建立和结束阶段,而着重讨论数据的传输阶段这个主体部分。各个协议及其讨论都以此为基础。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。