计算机网络 --- 数据链路层的功能

数据链路层在物理层提供服务的基础上向网络层提供服务, 其最基本的服务是将源自网络层来的数据可靠地传输到相邻结点的目标机网络层, 其主要作用是加强物理层传输原始比特流的功能, 将物理层提供的可能出错的物理链接改造成为逻辑上无差错的数据链路, 使之对网络层表现出一条无差错的链路, 具体如下:

  • 为网络层提供服务. 包括无确认无连接服务, 有确认无连接服务, 有确认面向连接服务.
  • 链路管理, 即连接的建立, 维持, 释放(用于面向连接的服务).
  • 组帧
  • 流量控制, 限制发送方
  • 差错控制(帧错/位错)

封装成帧

概念:

封装成帧就是在一段数据(数据报)的前后部分添加首部和尾部, 这样就构成了一个帧. 接收端在收到物理层上交的比特流后, 就能根据首部和尾部的标记, 从收到的比特流中识别帧的开始和结束.

首部和尾部包含许多的控制信息, 他们的一个重要作用: 帧定界(确定帧的界限).

帧同步:

接收方应当能从接收到的二进制比特流中区分出帧的起始和终止.

在了解组帧方法之前, 需要先了解透明传输.

透明传输:

透明传输是指不管所传数据是什么样的比特组合, 都应当能够在链路上传送. 因此, 链路层就"看不见"有什么妨碍数据传输的东西.

当所传数据中的比特组合恰巧与某一个控制信息完全一样时, 就必须采取适当的措施, 使接收方不会将这样的数据误认为是某种控制信息. 这样才能保证数据链路层的传输是透明的.

组帧的四种方法:

字符计数法

帧首部使用一个计数字段(第一个字节, 八位)来标明帧内字符数.

缺点:

如果一个计数字段发生错误, 那么后面的字段就会全错.

字符(节)填充法

控制字符:

  • SOH(start of header): 帧的传送开始
  • EOT(end of transmission): 帧的传送终止
  • ESC: 转意字符

当传送的帧是由文本文件组成时(文本文件的字符都是从键盘上输入的, 都是ASCII码), 不管从键盘上输入什么字符都可以放在帧里传过去, 即透明传输.

当传送的帧是由非ASCII码的文本文件组成时(二进制代码的程序或图像等), 就要采用字符填充方法实现透明传输.

具体实现过程:

假如原始数据的数据部分出现了很多控制字符(SOH, EOT), 就会在数据部分的控制字符前面加上转意字符, 然后就可以放到数据链路上传送.

零比特填充法

允许数据帧中包含任意个数的比特, 同样是在帧的头尾添加首部标识符, 尾部标识符, 同字节填充法的区别是首尾标识符是相同的.

当帧的数据部分出现了与收尾标识符相同的比特组合时, 方法归纳起来可以用5"1"1"0"来总结.

具体操作为(假设首尾标识符的字节为01111110):

  1. 在发送端, 扫描整个信息字段, 只要连续5个1, 就立即填入一个0.
  2. 在接收端收到一个帧时, 先找到标志字段确定边界, 再用硬件对比特流进行扫描, 发现连续的5个1时, 就把后面的0删除.

优点:

保证了透明传输: 在传送的比特流中可以任意传输任意比特组合, 而不是引起对帧边界的判断错误.

违规编码法

举例:

回顾曼彻斯特编码法, 当数据链路层把一个帧的比特流传给物理层时, 物理层会对0/1进行如下编码:

"高-低"代表1, "低-高"代表0.

所以可以用"高-高", "低-低"来界定帧的起始和终止, 这就是违规编码法.

四种组帧方法的总结

由于字符计数法中Count字段的脆弱性(其值若有差错将导致灾难性后果)及字符填充实现上的复杂性和不兼容性, 目前较普遍使用的帧同步法是比特填充违规编码法

差错控制

差错来源:

数据链路层传输的差错都是由于噪声引起的.

噪声分类:

  • 全局性噪声

由于线路本身电气特性所产生的随机噪声(热噪声), 是信道固有的, 随机存在的. 

解决办法:

提高信噪比来减少或避免干扰(对传感器下手).

  • 局部性噪声

外界特定的短暂原因所造成的冲击噪声, 是产生差错的主要原因.

解决办法:

通常利用编码技术来解决.

差错分类:

  • 位错: 比特位出错: 1变成0, 0变成1.
  • 帧错:

下面举例来具体说明, 假设传送的三个帧为f1, f2, f3, 那么帧错就会存在以下三种情况:

  • 丢失: 收到了f1, f3, 丢掉了f2
  • 重复: 收到了f1, f2, f2, f3, f2重复收到了
  • 失序: 收到了f1, f3, f2, 其中f2, f3收到的顺序错了 

回顾链路层为网络层提供服务: 无确认无连接服务, 有确认无连接服务, 有确认面向连接服务, 对于通信质量好, 有线传输链路, 就会采用无确认无连接服务. 对于通信质量差的无线传输链路, 数据链路层就会采取有确认的服务(包括有确认无连接服务以及有确认面向连接服务).

针对位错的差错控制方法:

  • 检错编码

可分为:

  • 奇偶校验码
  • 循环冗余码CRC

只能检错

  • 纠错编码

海明码

不仅能够检错, 还能发现错误的码是哪一位

数据链路编码与物理层编码的对比:

数据链路层编码与物理层的数据编码与调制不同. 物理层编码针对的是单个比特, 解决传输过程中比特的同步问题, 如曼彻斯特编码. 而数据链路层的编码针对的是一组比特, 它通过冗余码的技术实现一组二进制比特串在传输过程是否出现了差错.

冗余编码:

在数据发送之前, 先按某种关系附加上一定的冗余位, 构成一个符合某一规则的码字后再发送. 当要发送的有效数据变化时, 相应的冗余位也随之变化, 使码字遵从不变的规则. 接收端根据收到的码字是否仍符合原规则, 从而判断是否出错.

有了以上概念之后, 接下来再具体看一下上面的两种针对位错的差错控制方法:

检错编码

1. 奇偶校验码

        构造: n-1位信息元和一位校验元

        分类: 

                奇校验码: 整个n位1的个数为奇数

                偶校验码: 整个n位1的个数为偶数

        特点:

                只能检查出奇数个比特错误, 检错能力为50%.

2. 循环冗余码CRC

  • 纠错编码

最常用: 海明码

流量控制与可靠传输机制

流量控制

较高的发送速度和较低的接收能力的不匹配, 会造成传输出错, 因此流量控制也是数据链路层的一项重要工作. 这里的传输出错指的就是, 如果发送方的传输速率过高而接收方接收的能力较差, 这样发送方发来的数据就有可能超出接收方的缓冲空间导致溢出, 从而导致发送方发来的数据接收方无法接收, 所以说流量控制是必须的.

流量控制在数据链路层中有, 在传输层中也有, 二者的区别是:

  • 数据链路层的流量控制是点对点的, 而传输层的流量控制是端到端的, 也就是说数据链路层的流量控制是两个相邻结点之间的, 而传输层的流量控制是通讯的两台主机之间的.
  • 数据链路层流量控制手段: 接收方收不下就不回复确认, 也就是不回复不包含数据的确认帧. 传输层的流量控制手段: 接收端给发送端一个窗口公告: 告诉发送端窗口还有多少, 缓冲区还有多大.

具体方法:

  • 停止 - 等待协议: 每发送完一个帧就停止发送, 等待对方的确认, 在收到确认后再发送下一个帧, 相对低效.
  • 滑动窗口协议: 滑动窗口协议相对高效, 发送端有一个窗口大小, 接收端有一个窗口大小, 窗口大小是固定的, 代表此时此刻正在有多少帧正在被发送, 发送端每收到接收端的收到确认帧之后, 窗口往后面滑动一格, 也就是说这队列里面退出已经收到的帧, 新加一帧新的, 也就是发送一帧新的.
  • 后退n帧协议(GBN)
  • 选择重传协议(SR)

三种协议对比:

  • 停止-等待协议    发送窗口大小:1,接收窗口大小:1
  • 后退n帧协议(GBN)  发送窗口大小 > 1,接收窗口大小:1
  • 选择重传协议(SR)  发送窗口大小 > 1,接收窗口大小 > 1

停止等待协议

后退n帧协议

选择重传协议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值