滑动窗口协议


协议4:滑窗协议(全双工协议)简介

两个窗口

  • 发送窗口:已经发送但还未被确认的帧的序号
  • 接收窗口:期望接收的帧的序号

默认窗口为1,序列号长度为3位的发送过程:


文字描述:

接收方收到帧后,首先核对是否为预期帧号(frame_expected),如果是的,则接收并frame_expected+1移动接收窗口

发送端收到应答帧,核对响应帧号(next_frame_to_send),核对无误后,从网络层取新的帧,并执行next_frame_to_send+1,移动发送窗口,如核对帧号不正确,则不移动窗口

void protocol4(void)		//因为是双工协议,不再有发方收方的界限
{
	seq_nr next_frame_to_send;
	seq_nr frame_expected;
	frame r, s;
	packet buffer;
	event_type event;
	next_frame_to_send = 0;		//第一帧要传0号帧
	frame_expected = 0;			//接收方期望接受的是对方的0号帧
	from_network_layer(&buffer);
	s.info = buffer;
	s.seq = next_frame_to_send;
	s.ack = 1-frame_expected;
	to_physical_layer(&s);
	start_timer(s.seq);
	Seq = 0
	Ack = 1
	while(true)
	{
		wait_for_event(&event);
		if(event==frame_arrival)
		{
			from_physical_layer(&r);
			if(r.seq==frame_expected)	//是不是期望的帧
			{
				to_network_layer(&r.info);
				inc(frame_expected);		//移动接收窗口
			}
			if(r.ack==next_frame_to_send)	//是不是确认了
			{
				stop_timer(r.ack);
				from_network_layer(&buffer);
				inc(next_frame_to_send);		//移动发送窗口
			}
		}
		s.info = buffer;
		s.seq = next_frame_to_send;
		s.ack = 1-frame_expected;	//捎带确认
		to_physical_layer(&s);
		start_timer(s.seq);
	}
}


每个待发送帧被赋予一个序列号seq,seq的取值范围是0~2^n-1(n位字段,图片中n=1)

建立缓冲区:

发送窗口:缓存已发送、待确认的帧

  • 顺序接收来自网络层的分组,成帧,赋予序列号
  • 最多保存W个已经发送、等待确认的帧
  • 窗口达到最大值W时强制关闭网络层

接收窗口:缓存期待接收的帧(序号)

  • 对进入窗口的帧顺序提交网络层,产生确认
  • 落在窗口外的帧被丢弃


发送窗口滑动机制


窗口设置

  • 滑动窗口最大值:max_seq = 1
  • 通信双方初始值:seq = 0,  ack = 1(准备发送seq号帧,收到了ack号帧(捎带确认)

窗口滑动机制

  • A首先发送数据帧(seq=0, ack=1, A0)
  • B收到A0,在发送数据帧"B0"时发送捎带确认帧(seq=0, ack=0, B0)
  • 收到对A0的确认,滑动窗口,继续发送帧(seq=1, ack=0, A1)……一来一往

特点

  • 序列号seq和确认值ack"01交替"
  • 滑动窗口长度w=1,收到确认才移动窗口
  • 保证按顺序将接收到的正确帧只一次上交网络层

可能会出现的异常情况


因为机制原因仍然可以正常工作,只不过有很多重复帧浪费了带宽


信道利用率

已知:

  • 信道传输速率是:b bps
  • 每帧的大小是:k bits
  • 来回时间是:R sec

信道的利用率为:k/(k+bR)

例子:

  • 信道容量 b = 50 kbps
  • 传输延迟 R = 500 ms(双程)
  • 数据帧的长度 k = 1000 bit
  • 设接收方收到数据帧后马上回送确认短帧,没有延时

求解:

  • 在源端发送数据帧过程需要的时间 Tf = k/b = 20ms
  • 从发送完毕到确认帧返回需要的时间(双程延迟) R = 500ms
  • 从开始发送到确认返回总共需要的时间 Tf+R = 520ms
  • 线路的利用率 Tf/(Tf +R) = 20/520 = 3.85%(信道利用率不足4%)

提高信道利用率的方法:

增加滑动窗口最大长度W

理想情况下,使例题信道利用率达到100%,则滑动窗口最大长度为:W = 26


如何寻找一个合适的w值

  • 信道上的容量:一帧从发送方传输到接收期间可容纳的帧数量
  • 带宽-延迟积:BD
  • 窗口值:w = 2*BD+1
  • 上述的例子:BD = 50kbps*0.250 = 12.5kb;W = 2*12.5kb+1 = 26kb = 26帧
  • 但实际上w≤2*BD+1



  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值