流量控制


  在连续ARQ协议中,如果发送方一直没有收到接收方的确认信息,发送方并不能无限制的发送数据帧,因为

  • 当未被确认的数据帧数目太多时,如果有一帧出现了差错,发送方需要重新发送的数据帧太多,造成浪费
  • 数据帧的编号所占据比特位不能太多,所以需要有重复的编码,相同的编码不能同时在链路中传输
  • 所以需要流量控制,通过滑动窗口机制来流量控制

流量控制

发送方滑动窗口

## 流量控制

  • 包含前沿指针,后沿指针,滑动窗口,假设编号用三个比特表示,滑动窗口的大小为7
  • 每发送一个数据帧,前沿指针往前移动,最多移动到发送窗口最右边,这是需要等待确认信息,才能继续发送
  • 每接收到一个ACK确认信息,后沿指针带着滑动窗口向前移动,后沿指针一直指向滑动窗口的最前端。
  • 后沿指针不能超过前沿指针。

  这里会有一个疑问,滑动窗口的大小是怎么设置的呢,三个比特位,八个编号,为什么大小是七呢?
  这里我们想一下,如果滑动窗口的大小是8,01234567一个发送窗口大小数量的数据帧都发送出去之后,前沿指针开始等待,接收方接收到所有的数据帧,这是需要的是下一个0数据帧,变数来了,这时候ACK丢掉了,发送方会怎么做呢?
  发送方接收不到确认信息,等到计时器时间到了,会从第一遍的0数据帧开始重发,这时候就出现问题了我需要的是第二遍的0数据帧,但你给我的是第一遍的0数据帧,但接收方不知道,还是会全部接收。就会出现问题

接收方滑动窗口

## 流量控制

  • 通过滑动窗口一个一个接收数据帧
  • 从宏观上来看,只有在接收窗口向前滑动时,发送窗口才有可能向前滑动
  • 当发送窗口和接收窗口的大小都是1时,就是停止等待ARQ协议

数据链路层协议

点到点协议(PPP)

  现在全世界使用得最多的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol),面向字符的协议。PPP协议由3个部分组成:链路控制协议LCP:用于建立配置测试连接;
认证协议;一套网络控制协议NCP:协商该链路上所传输的数据包格式与类型,建立、配置不同的网络层协议。 LCP在链路层 NCP在网络层
  链路层的主要实现的功能就是数据帧封装,透明传输,差错控制,然后来看一下PPP协议的数据帧格式

  • 开始和结束都有一个7E,是数据帧开始和结束的标志
  • 地址字段以为是点对点电路,不需要写地址填FF
  • 控制字段C通常设置为03
  • 协议编号字段,用来描述数据是什么,若为0021,为ip数据报,若为c021,是lcp,若为8021,是ncp
  • 把收到的数据报存放到信息部分
  • 校验码放入FCS中

  如何做到透明传输呢,面向字节时,中间出现7E的变成对应的0x7d,0x5e 0x7d变为0x7d,0x5d 接收方接受会做相反的处理 实现透明传输
  面向比特时,当发现有连续五个1时,就插入一个0,保证数据帧里没有超过连续五个1的比特序列

注意:PPP协议不提供使用需要和确认的需要
  说明PPP协议其实是一个不可靠的传输协议,但能做到无差错的接受,由于FCS的存在,因为链路层出错的几率不大,把是否需要重传的判断交个应用层来判断,如果少了几个字节也可以运行,就不需要重传,当需要重传是再进行重传。

相关文章: