资源描述
2、序号取值范围:、序号取值范围:如果分组序号字段的位数是如果分组序号字段的位数是k,则序号范围是,则序号范围是0,2k-1。即序号在。即序号在02k-1的范围循环的范围循环 0,1,2k-1,0,如:如:停等协议序号字段的位数是停等协议序号字段的位数是1,序号范围是,序号范围是0,1。3、发送方扩展、发送方扩展FSM:图图3-20给出了一个给出了一个基于基于ACK、无、无NAK的的GBN协议。协议。GBN发送方响应三种事件:发送方响应三种事件:上层的调用:上层的调用:上层调用上层调用rdt_send()检查发送窗口是否检查发送窗口是否已满(是否有已满(是否有N个已发送、但未被确认的分组)个已发送、但未被确认的分组)窗口未满:窗口未满:创建一个分组并将其发送,更新变创建一个分组并将其发送,更新变量;量;窗口已满:窗口已满:将数据返回给上层,以后再试。将数据返回给上层,以后再试。收到收到ACK:对序号为对序号为 n的分组的确认使用的分组的确认使用累积确认累积确认,即表明接收方已正确接收到序号为即表明接收方已正确接收到序号为n及以前的及以前的所有分组。所有分组。超时:超时:设置定时器处理设置定时器处理“丢失数据或确认分组丢失数据或确认分组”的情况。的情况。只使用一个定时器,作为最早的已发送但未只使用一个定时器,作为最早的已发送但未被确认的分组的定时。被确认的分组的定时。产生产生超时超时,发送方,发送方重发重发所有已发送过但还未被确所有已发送过但还未被确认过的分组。认过的分组。收到一个收到一个ACK,但仍有已发送但未被确认的分组,但仍有已发送但未被确认的分组,重新启动定时器。重新启动定时器。若没有未确认报文,终止定时若没有未确认报文,终止定时器。器。GBN:发送方扩展的发送方扩展的 FSM等待等待start_timerudt_send(sndpktbase)udt_send(sndpktbase+1)udt_send(sndpktnextseqnum-1)超时rdt_send(data)if(nextseqnum base+N)sndpktnextseqnum=make_pkt(nextseqnum,data,chksum)udt_send(sndpktnextseqnum)if(base=nextseqnum)start_timer nextseqnum+else refuse_data(data)base=getacknum(rcvpkt)+1If(base=nextseqnum)stop_timer else start_timerrdt_rcv(rcvpkt)¬corrupt(rcvpkt)base=1nextseqnum=1rdt_rcv(rcvpkt)&corrupt(rcvpkt)L窗口未满窗口未满窗口已满窗口已满收到收到ACK超时,重发超时,重发分组有错分组有错L无未确认分组无未确认分组有未确认分组有未确认分组4、接收方、接收方 按序接收。接收方按序接收。接收方WR=1。要点:要点:正确按顺序接收到序号为正确按顺序接收到序号为n 的分组的分组:将分组中:将分组中的数据交付到上层,并回发一个的数据交付到上层,并回发一个 ACK;其他情况的分组其他情况的分组:丢弃该分组,并为最近按序:丢弃该分组,并为最近按序接收的分组重发接收的分组重发ACK。分组一次性交付给上层分组一次性交付给上层:分组:分组k 被交付,被交付,k之之前均已交付。前均已交付。丢弃所有失序分组丢弃所有失序分组:控制简单,接收方不需要:控制简单,接收方不需要缓存任何失序分组。缓存任何失序分组。GBN:接收方扩展接收方扩展 FSM接收方维护下一个按序接收的分组的序号,该值接收方维护下一个按序接收的分组的序号,该值保存保存expectedseqnum变量中。变量中。Waitudt_send(sndpkt)defaultrdt_rcv(rcvpkt)¬currupt(rcvpkt)&hasseqnum(rcvpkt,expectedseqnum)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(expectedseqnum,ACK,chksum)udt_send(sndpkt)expectedseqnum+expectedseqnum=1sndpkt=make_pkt(expectedseqnum,ACK,chksum)L等等待待无错,对序无错,对序出错,失序出错,失序GBN缺点:缺点:可能需要很多的重传。可能需要很多的重传。例,窗口尺寸为例,窗口尺寸为4的的GBN协议的运行协议的运行发送方:发送方:连续发送连续发送4个个分组后等待,直到一个或多分组后等待,直到一个或多个分组被确认;个分组被确认;每接收到一个连续的每接收到一个连续的ACK时,该窗口便向前滑动。时,该窗口便向前滑动。接收方:接收方:收到一个连续的正确的分组,窗口向前收到一个连续的正确的分组,窗口向前滑动。滑动。发送方发送方接收方接收方丢丢弃弃GBN 操作窗口满窗口满总结总结GBN协议具体实现:协议具体实现:采用过程形式(实现在响应采用过程形式(实现在响应各种事件时要采取的动作)。各种事件时要采取的动作)。如,发送方包括如,发送方包括rdt_send()、定时器中断、定时器中断、rdt_rcv()等。等。GBN协议综合可靠数据传输的全部技术:协议综合可靠数据传输的全部技术:使用序使用序号、累积确认、检验和以及超时号、累积确认、检验和以及超时/重传操作等。重传操作等。
展开阅读全文