单工协议只能在通道的一个方向上传送数据,而大多数应用情况都需要在两个方向上传送数据。这就要求每个站既是发送站又是接收站,且协议对两个站来说应是对称的。这种协议称为双工停等协议,其去掉了前述协议中数据单向传送的假设,但仍假设两站都要向对方发送大量的数据,其余条件同协议3.
双工协议在通道的两个方向上都有数据帧和应答帧。为了使接收方能区分它们,可在帧格式中增加类型域,以标明是数据帧还是应答帧。当某站接收到对方的数据帧后需给对方应答时,若其又有数据需向对方发送(本例中假设总是如此),可不单独发送应答帧,而仅在数据帧中增加一个放置应答信息的Ack域(字段),对方在收到数据帧的同时即可得到应答。这种应答方法称为“搭载”应答(Piggybacking)或“捎带”应答。
搭载应答的主要优点是能更有效地利用信道。这是因为单独的应答帧也需要头、尾、校验及应答域等标准的帧格式,而搭载应答只占用向对方传送数据帧中的某几位(Ack域),可省掉头、尾等开销,使占用的信道容量减少。当然,搭载应答将增加协议的复杂性:它要求双方都有大量的数据要传送,这样搭载的应答才可能发回,否则发送方就很难估计何时才可以重发。所以,一般将搭载应答与单独应答结合起来使用。如果主机能很快送来数据发送,应答就搭载在这些数据帧中一起发出,否则就单独发一应答帧。本章后面要谈到的协议4、协议5采用的都是搭载应答(因假设双方有大量数据传送),而在协议6中则采用结合的方法。无论哪种应答,对n帧的应答总是蕴含着n帧及其以前的各帧都已收妥的含义。这样,即使前面的应答帧丢失也没关系,因为后续的应答帧会包括它的含义。
双工停等协议的程序如下。在该程序中,同一套协议程序在双方CCP中都可运行,但设两个CCP中有一个先动作,即只有其中一个CCP的程序可以有主循环以外的sendf以及StartTimer的过程调用。(www.xing528.com)
现在来研究一下协议4在不正常条件下如何工作。若A和B都准备向对方发送数据帧seq=0,且A的超时时限太短,因而A不断地超时,从而送出一系列相同的数据帧seq=0,ack=1.当第一帧到达B后,B便会接收,并将FrameExpected置为1.以后因为顺序号都不对,所有seq=0的报文都将拒收。直到B向A发一应答seq=0,ack=0后,A才开始发下一报文帧。所以,出错或超时过快都不会导致协议失败。若双方同时启动协议程序,则情况有一些特别。图4.2.1给出了一个例子,其中(a)为正常情况;(b)为特殊情况(同时发送),虽然没有错误,但半数的帧为重复的,需要丢弃,故协议事倍功半。图中采用的记法为(seq,ack,帧号),上角标“*”表示该帧送往主机。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。