首页 > 技术文章 > 数据链路层

lgh544 2020-05-19 15:00 原文

数据链路层使用的信道主要有以下两种类型:
  点对点信道。这种信道使用一对一的点对点通信方式。
  广播信道。这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。

1、使用点对点信道的数据链路层:

 1.1 三个基本问题:

  (1) 封装成帧、(2) 透明传输、(3) 差错控制

封装成帧:

  封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。确定帧的界限。
首部和尾部的一个重要作用就是进行帧定界。

用控制字符进行帧定界的方法举例

 

透明传输

 

解决透明传输问题

   发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是 1B)。
   字节填充(byte stuffing)或字符填充(character stuffing)——接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
      如果转义字符也出现数据当中,那么应在转义字符前面插入一个转义字符。当接收端收到连续的两个转义字符时,就删除其中前面的一个

差错检测

   在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate)。误码率与信噪比有很大的关系。为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。

循环冗余检验的原理:

  在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术,在发送端,先把数据划分为组。假定每组 k 个比特,假设待传送的一组数据 M = 101001(现在 k = 6)。我们在 M 的后面再添加供差错检测用的 n 位冗余码一起发送。

冗余码的计算:

  用二进制的模 2 运算进行 2n 乘 M 的运算,这相当于在 M 后面添加 n 个 0。得到的 (k + n) 位的数除以事先选定好的长度为 (n + 1) 位的除数 P,得出商是 Q 而余数是 R,余数 R 比除数 P 少1 位,即 R 是 n 位。

冗余码的计算举例

  现在 k = 6, M = 101001。
  设 n = 3, 除数 P = 1101,
  被除数是 2^n*M = 101001000。
  模 2 运算的结果是:商 Q = 110101,
           余数 R = 001。
  把余数 R 作为冗余码添加在数据 M 的后面发送出去。发送的数据是:2nM + R
    即:101001001,共 (k + n) 位。

帧检验序列 FCS

   在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)。
   循环冗余检验 CRC 和帧检验序列 FCS并不等同。
  CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。
  FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法。

CRC 检验特点:

  (1) 若得出的余数 R = 0,则判定这个帧没有差错,就接受(accept)。
  (2) 若余数 R 不等于 0,则判定这个帧有差错,就丢弃。但这种检测方法并不能确定究竟是哪一个或哪几个比特出现了差错。
只要经过严格的挑选,并使用位数足够多的除数 P,那么出现检测不到的差错的概率就很小很小。仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受(accept)。“无差错接受”是指:“凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错”。也就是说:“凡是接收端数据链路层接受的帧都没有传输差错”(有差错的帧就丢弃而不接受)。要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制。 

1.2 点对点协议 PPP

  

PPP 协议有三个组成部分
  一个将 IP 数据报封装到串行链路的方法。
  链路控制协议 LCP (Link Control Protocol)。
  网络控制协议 NCP (Network Control Protocol)。  

 PPP协议的帧格式

透明传输问题

   当 PPP 用在同步传输链路时,协议规定采用硬件来完成比特填充(和 HDLC 的做法一样)。
  当 PPP 用在异步传输时,就使用一种特殊的字符填充法。

字符填充

  将信息字段中出现的每一个 0x7E 字节转变成为 2 字节序列(0x7D, 0x5E)。
  若信息字段中出现一个 0x7D 的字节, 则将其转变成为 2 字节序列(0x7D, 0x5D)。
  若信息字段中出现 ASCII 码的控制字符(即数值小于 0x20 的字符),则在该字符前面要加入一个 0x7D 字节,同时将该字符的编码加以改变。 

零比特填充

  PPP 协议用在 SONET/SDH 链路时,是使用同步传输(一连串的比特连续传送)。这时 PPP 协议采用零比特填充方法来实现透明传输。在发送端,只要发现有 5 个连续 1,则立即填入一个 0。接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除。

2、使用广播信道的数据链路层

局域网的数据链路层

局域网最主要的特点是:网络为一个单位所拥有,且地理范围和站点数目均有限。

 

以太网的两个标准

   DIX Ethernet V2 是世界上第一个局域网产品(以太网)的规约。
   IEEE 的 802.3 标准。
   DIX Ethernet V2 标准与 IEEE 的 802.3 标准只有很小的差别,因此可以将 802.3 局域网简称为“以太网”。严格说来,“以太网”应当是指符合 DIX Ethernet V2 标准的局域网 

载波监听多点接入/碰撞检测  CSMA/CD 协议

“多点接入”表示许多计算机以多点接入的方式连接在一根总线上。
“载波监听”是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。

“碰撞检测”就是计算机边发送数据边检测信道上的信号电压大小。当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。所谓“碰撞”就是发生了冲突。因此“碰撞检测”也称为“冲突检测”。

 使用 CSMA/CD 协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)。每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。 这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率。

二进制指数类型退避算法

  发生碰撞的站在停止发送数据后,要推迟(退避)一个随机时间才能再发送数据。
  确定基本退避时间,一般是取为争用期 2t。
  定义重传次数 k ,k小于等于10,即
                 k = Min[重传次数, 10]
  从整数集合[0,1,…, (2^k-1)]中随机地取出一个数,记为 r。重传所需的时延就是 r 倍的基本退避时间。
  当重传达 16 次仍不能成功时即丢弃该帧,并向高层报告

以太网取 51.2 s 为争用期的长度。对于 10 Mb/s 以太网,在争用期内可发送512 bit,即 64 字节。以太网在发送数据时,若前 64 字节没有发生冲突,则后续的数据就不会发生冲突

最短有效帧长

如果发生冲突,就一定是在发送的前 64 字节之内。 由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于 64 字节。
以太网规定了最短有效帧长为 64 字节,凡长度小于 64 字节的帧都是由于冲突而异常中止的无效帧。

3、使用广播信道的以太网

以太网的Mac层

在局域网中,硬件地址又称为物理地址,或 MAC 地址。IEEE 的注册管理机构 RA 负责向厂家分配地址字段的前三个字节(即高位 24 位)。地址字段中的后三个字节(即低位 24 位)由厂家自行指派,称为扩展标识符,必须保证生产出的适配器没有重复地址。

常用的以太网MAC帧格式有两种标准 :
  DIX Ethernet V2 标准
  IEEE 的 802.3 标准
最常用的 MAC 帧是以太网 V2 的格式

以太网的MAC帧格式:

 无效的 MAC 帧

  数据字段的长度与长度字段的值不一致;
  帧的长度不是整数个字节;
  用收到的帧检验序列 FCS 查出有差错;
  数据字段的长度不在 46 ~ 1500 字节之间。
  有效的 MAC 帧长度为 64 ~ 1518 字节之间。
  对于检查出的无效 MAC 帧就简单地丢弃。以太网不负责重传丢弃的帧。

 

最短有效帧长
[Zuìduǎn yǒuxiào zhèng zhǎng]
The shortest valid frame length

推荐阅读