返回N协议与选择重传协议的发送窗口大小问题

首先说明:

接收窗口接收到分组就向前移动。发送窗口接受到接收窗口发送的ACK才会向前移动


对于返回N协议,发送窗口大小<=(2^m)-1

  • 在返回N协议中,发送窗口大小必须<=2m-1,接收窗口大小始终为1。本质就是窗口大小不能 超过序号能表示的范围,例如最大序号是3,窗口是6窗口比最大序号大,会出现0,1,2,3,0,1这样的窗口,你无法判断接收窗口返回的ACK0是代表第一个0收到还是第二个0收到。

  • 接收方一般都是采用累积确认的方式。这就是说,接收方不必对收到的分组逐个发送 确认,而是可以在收到几个分组后,对按序到达的最后一个分组发送确认,这样就表示:到 这个分组为止的所有分组都已正确收到了
对于选择重传协议,窗口大小<=2^(m-1)

  • 首先,发送窗口不能比接收窗口大,不然接收窗口可能会溢出


  • 其次,要最大化发送窗口的流水线分组,但是要保证不能产生二义性。假设序号最大为7即0,1,2,3,4,5,6,7,发送窗口大小为5,当发送窗口发送0,1,2,3,4后,假设接收窗口全部收到,则接收窗口向前移动到5次,接受窗口期望接收5,6,7,0,1.若发送窗口并没接收到任何ACK,所以发送窗口重发0,1,2,3,4此时接收窗口会以为重发的0,1是新的分组。



  • 因为发送窗口<=接收窗口。要最大化发送窗口,则发送窗口=接收窗口。假设发送窗口为m,则接收窗口也为m.发送窗口发送m个分组时,接收窗口向前移动m,接收窗口为m+1,m+2,...2m.要避免二义性,必须满足2m<=序号最大值,




  • 70
    点赞
  • 167
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
(1)初始化。开网络层允许;ack_expected = 0(此时处于发送窗口的下沿);next_frame_to_send = 0,frame_expected = 0(初始化正在发送的帧和期待的帧序号);nbuffered = 0(进行发送窗口大小初始化);(2)等待事件发生(网络层准备好,帧到达,收到坏帧,超时)。(3)如果事件为网络层准备好,则执行以下步骤。从网络层接收一个分组,放入相应的缓冲区;发送窗口大小加1;使用缓冲区中的数据分组、next_frame_to_send和frame_expected构造帧,继续发送;next_frame_to_send加1;跳转(7);(4)如果事件为帧到达,则从物理层接收一个帧,则执行以下步骤。首先检查帧的seq域,若正是期待接收的帧(seq = frame_expected),将帧中携带的分组交给网络层,frame_expected加1;然后检查帧的ack域,若ack落于发送窗口内,表明该序号及其之前所有序号的帧均已正确收到,因此终止这些帧的计时器,修改发送窗口大小及发送窗口下沿值将这些帧去掉,继续执行步骤(7);(5)如果事件是收到坏帧,继续执行步骤(7)。(6)如果事件是超时,即:next_frame_to_send = ack_expected,从发生超时的帧开始重发发送窗口内的所有帧,然后继续执行步骤(7)。(7)若发送窗口大小小于所允许的最大值(MAX-SEQ),则可继续向网络层发送,否则则暂停继续向网络层发送,同时返回互步骤(2)等待。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值