发送方 发送数据 速率高 , 接收方 接收数据 能力差 , 造成传输出错 , 数据链路层 的 负责进行流量控制的工作 ;
数据链路层 流量控制 是 点对点的 ; 是 每两个相邻节点间的流量控制 ; 如 主机 到 路由器 , 路由器 到 路由器 ;
传输层 流量控制 是 端到端的 ; 是 两个主机端的 流量控制 ;
数据链路层 流量控制 机制 : 如果接收方发现接收不了 , 就不再回复 确认帧 ; 确认帧 是 不包含数据的 控制帧 ;
传输层 流量控制 机制 : 接收方 给 发送方 发送 窗口公告 ; 窗口公告 就是接收方的 接收缓冲区大小 , 让发送方不要发送太多数据 ;
数据链路层 流量控制 : 发送方 向 接收方 发送数据 , 如果接收方 接收了数据 , 还能再继续接收 , 就会向 发送方 发送 确认帧 , 发送方 接收到 接收方 的 确认帧 后 , 就会继续发送 数据帧 ;
流量控制方法 :
① 停止等待协议 : 发送端 每发送 完一帧 , 就停止发送 , 等待 接收方 确认 , 收到 接收方 的确认信息后 , 再发送下一帧 ;
② 滑动窗口协议 :
停止等待协议 :
① 发送端 : 发送端 发送
信息 给 接收端 ;
② 接收端 : 接收端 收到
信息后 , 向 发送端 回送
确认帧 ;
③ 发送端 : 发送端 继续 发送
信息 给 接收端 ;
④ 接收端 : 接收端 收到
信息后 , 向 发送端 回收
确认帧 ;
停止等待协议 , 效率比较低 ;
滑动窗口 协议 :
① 发送窗口 : 发送端 维持 一段连续的 帧序号 , 这一串 帧序号 称为 发送窗口 ;
② 接收窗口 : 接收端 维持 一段连续的 帧序号 ; 这一串 帧序号 称为 接收窗口 ;
滑动窗口 协议 示例 :
① 发送窗口 : 有
个帧序号
~
;
② 接收窗口 : 有
个 ;
③ 发送数据 : 发送端 发送
序号帧 给接收端 ;
④ 接收数据 : 接收端接收到
序号帧 , 接收端 回送 确认
号帧 数据 给 发送端 , 接收端的 接收窗口 向前移动一位 ;
⑤ 发送窗口移动 : 发送端 接收到
序号帧 确认信息 , 发送端的发送窗口 向前移动一格 , 继续发送 ;
⑥ 持续发送 : 如果 发送端 没有收到
序号帧 确认信息 , 会继续发送
序号帧给接收端 ;
滑动窗口 大小 :
① 停止等待协议 : 发送窗口
, 接收窗口
;
② 后退
帧协议 ( GBN ) : 发送窗口
, 接收窗口
;
③ 选择重传协议 ( SR ) : 发送窗口
, 接收窗口
;
数据链路层 流量控制中 , 发送过程中的 发送窗口 和 接收窗口 大小都是固定值 ;
可靠传输 : 发送端发送什么数据 , 接收端就接收什么数据 ; 如果 出现 帧丢手 , 帧失序 , 帧重复 等问题 , 都需要解决 , 保证接接收端 接收的数据 与 发送端 发送的数据 一致 ;
流量控制 : 控制 发送端 发送数据的速率 , 让 接收方 有足够的缓冲空间 接收 发送端发送的每一帧数据 ;
滑动窗口 就是 解决 上述 可靠传输 与 流量控制的问题 :
① 滑动窗口 解决 流量控制 问题 : 发送方 接收到 确认帧 后 , 才能向前移动 发送窗口 , 如果发送端 一致没有收到确认帧 , 其发送窗口一直不动 , 卡死在原位置 , 无法发送后续帧 , 该过程就是对流量的控制 ;
② 滑动窗口 解决 可靠传输 问题 : 发送方 如果 一直没有收到 接收方 的确认帧 , 超过超时等待时间 , 发送方就会重传一次 ;