数据链路层
- 数据链路和帧
- 链路:从一个节点到另一个节点的一段物理路线
- 数据链路:必要的通信协议来控制数据传输,实现这些协议的硬件和软件加到链路上,构成了数据链路。
- 现在常用网络适配器来实现协议的硬件以及软件。
- 点对点数据链路层进行通信时主要步骤
- 节点A的数据链路层把网络层交下来的IP数据报添加到首部以及尾部封装成帧。
- 节点A把封装好的帧发送给B的数据链路层
- 若节点B的数据链路层收到的帧无差错,则从收到的帧中提取IP数据报交给网络层,否则丢弃该帧。
- 封装成帧
- 数据链路层以帧作为传输单位。网络层的IP数据报向下传送到 数据链路层,同时添加首尾,封装成完整的帧。数据链路层 必须能够识别帧首、帧尾;进行帧定界。
- 帧的首部、尾部的作用之一就是进行帧定界,同时包含必要的控制信息
- 帧的数据部分不能超过MTU(最大传送单元)
- 帧由帧的头部+帧的数据部分(<=MTU)+帧的尾部
- 一般使用某个特殊的不可打印的控制字符作为帧定界符
- 解决帧的透明传输
- 字节填充or字符填充
- 发送端的数据链路层在数据中出现的标记字符前面插入一个转义字符。对转义字符后面的标记字符不在解释为帧定界符。在数据送往网络层之前删除转义字符。
- 比特填充(帧的长度不在要求必须是整数个字节,采用开销较小的比特填充)
- 零比特填充(PPP协议采用0比特填充)
- 当数据中出现五连续的1时,下一位插入0。还原时,逆向操作。
- 差错检测
- 奇偶校验、循环冗余校验(CRC)......
- 循环冗余检验
- 取除数G的首位以及尾位为1
- 在原数据的末尾添加G的位数-1个0
- 将最后的余数前补0至G的位数-1长度生成检测FCS
- 将FCS替换原数据后的0
- 接收端接收到数据后除以G
- 若余数为0,则数据正确
- 若余数不为0,则数据出错,丢弃数据
- CRC又称多项式编程 -若G=1101,则G(X)=X^3+X^2+1
- 差错检测能检查出差错,但是无法确定哪里出错
- 可靠传输
- 可靠传输要做到发送端发送什么,接收端就收到什么。
- 在不可靠的双向信道上建立可靠传输协议实现可靠传输
- 光纤的传播速率为2x10^8
- 停止等待协议
- ACK:当接收方收到的信息无误时,会向发送方发送确认分组ACK。
- NAK:收到的数据出现了比特差错。
- 发送方每发送一个分组必须收到接收方的确认信息后才能发送下一个分组,这就是停止等待协议。
- 超时重传:当接收方的确认分组丢失后,发送方会一直处于等待状态。为了解决这个问题,发送方在发送完一个分组后会启动超时计时器。如果在规定时间内发送方没有收到ACK,则超时重传。
- 数据重复:当发送方没有收到ACK,会重传消息。导致消息重复;解决方法是为数据分组带上序号。
- 上述通过确认和超时重传实现的可靠传输协议,称为自动请求重传协议。
- 回退N帧协议
- 由于停止/等待协议信道利用率很低。为了提高效率,产生了流水线传输方式。
- 发送方的窗口最大为(2^n)-1
- 在协议工作中发送窗口不断向前滑动,因此这类协议称为滑动窗口协议
- ==回退N帧协议需要注意==!
- 接收方只按序接收分组
- 发送方依然采用超时机制来实现重传有问题的分组
- 接收方采用累积确认的方式(当收到5号帧的确认ACK后,默认1---4号帧收到)。(仅在回退N帧协议使用)
- 选择重传协议
- GBN协议可能存在过多数据重传,但实际已经被接收了。
- 接收窗口不为1
- 窗口大小为2^(n-1)
- 当存在失序分组时,就在接收在窗口内就先缓存起来。
- PPP协议(点对点协议)
- 不向上提供可靠传输协议
- PPP的特点
- 简单。每收到一个帧则进行CRC检验。向上不提供可靠传输
- 封装成帧。PPP规定了特殊字符作为帧定界符。
- 透明性。PPP保证数据传输的透明性。
- PPP的帧格式
- 首尾各1字节的定界符
- 首第二三位各占1字节
- 首第四位协议2字节
- 信息部分不超过1500字节
- 倒数第二位为2字节的FCS
- 转义:
- 7E>7D5E,7D>7D5D,03>7D23 ......
- 大于20则减去20加上7D,小于20则加上20加上7D
- PPP的工作状态
- 当用户ISP拨号服务器后,就建立了一条从用户PC到ISP的物理连接。用户PC向ISP发送一系列的LCP分组,以便建立LCP连接。
- 使用广播通信的数据链路层
- 静态接入
- 对突发性数据传输信道利用率低,一般在无限网络的物理层使用,而不再数据链路层使用
- 动态接入
- 随机接入
- 竞争信道,可能产生碰撞
- 受控接入
- 受控接入,服从统一调控
- 多点轮询协议
- 令牌传递协议
- 最大的缺点是单点故障
- 局域网
- 网络适配器
- 实现数据并行传输以及串行传输的转换
- 实现局域网数据链路层和物理层的协议
- MAC地址
- 为了实现站点的通信,需要知道每个站点的唯一标识,既数据链路层地址。数据的帧中需要知道接收站以及发送站的地址用于媒体接入,因此被称为MAC地址。
- IEEE规定地址字段的第一个字节的最低位为I/G位
- I/G位为0时:地址字段表示单个站地址
- I/G位为1时:表示组地址,用来多播
- IEEE规定地址字段的第一个字节的次低位为G/I位
- G/I位为0是全球管理
- G/I位为1是本地管理
- CSMA/CD协议(载波监听多址接入/碰撞检测)
- 多址接入:许多站点以多址接入的方式链接在一根总线上。
- 载波监听:(先监听后发送)每一个站点发送数据前需要检测总线上是否存在数据发送,如果有,则不要发送数据。
- 碰撞检测:(边发送边监听)当适配器检测到电压变化超过某个上限值时,就认为总线上至少存在两个站点的数据,表明信号发生了碰撞。一旦检测到碰撞,则停止发送。
- 既然有了载波监听,为何需要碰撞检测?信号的传播时延,B若在A发送的信号到达B之前发送自己的帧,则必然在某个时间发送碰撞。
- CSMA/CS协议:半双工通信
- 设单程端到端的传播时延为R,则2R为一个碰撞窗口期,也称为争用期。若2R时间内未发生碰撞,则不会发送、碰撞
- 以太网使用截断二进制指数退避算法来解决重传问题。重传应推后R倍的争用期。设n={0,1......,(2^k)-1},则重传次数为Min((2^k)-1,10);最多重传16次
- 为了保证所有站点在发送完一个帧之前能够检测出能否发生碰撞,帧的发送时延不能小于一个争用期,以太网规定帧的最短有效帧长为64字节。帧间最小间隔为96比特时间
- 共享式以太网信道利用率
- 设r单程端到端的时延,T为发送时延。设a=r/T。a应当尽量小,以太网连线长度受限制(否则r过大),以太网的帧长不能太短(T会太小)
- 信道利用率为Smax=T/T+r=1/1+a
- 集线器工作在物理层
- 以太网的帧格式
- 以太网V2的MAC帧格式
- 前同步码+帧开始定界符=8字节
- MAC帧为包括
- 目的地址:6字节
- 源地址:6字节
- 类型:2字节
- 数据:46-1500字节
- FCS:4字节
- MAC帧的FCS的检测序列不包括前同步码+帧开始定界符
- 帧之间存在一定的时隙,接收端只要接收到帧开始定界符,以时隙判断是否结束,可见不需要帧结束符。
- IEEE802.3规定为下列情况为无效帧
- 帧长度非整数
- 帧的数据部分不为46-1500之间
- FCS查出存在数据差错
- 网桥和以太网交换机
- 物理扩展:(集线器)物理层扩展以太网仍是一个碰撞域,不能连接多站点,否则平均吞吐量低,存在大量冲突。(不进行媒体监测)
- 网桥工作在数据链路层,采用存储转发的形式(CSMD/CD协议)
- 网桥的优点
- 过滤通信,增大吞吐量
- 扩大物理范围
- 提高可靠性
- 可连接不同物理层、不同MAC子层和不同速率
- 网桥的不足
- 储存转发,增加时延
- MAC子层不存在流控
- 由于网桥会转发所有广播帧,适合用户数量少的以太网,否则可能产生网络风暴
- 网桥的自学习
- 收到X站的无差错帧,在转发表中找到目的地的MAC帧
- 如果查找出该站要去d,如果d=x,则丢弃该帧,否则从d转发出去
- 如果没找到该帧的地址,则向除了X站的所有接口转发该帧,如果源站不在转发表中,则将源站的MAC地址加入转发表
- 网桥需要登记站地址、端口、时间三个信息。
- 生成树协议
- 网桥在转发时,可能存在闭环链路使得帧不停的兜圈子。透明网桥使用了生成树协议。保证了两个站点之间逻辑上只存在一条互通的链路
- 透明网桥通过增加冗余链路来增强网络的可靠性,生成树算法花费时间很多,因此透明网桥的网络规模不宜过大。
- 以太网交换机:
- 交换机实质上是一个多接口的网桥