五层协议之数据链路层

五层协议之数据链路层

一、数据链路层的基本概念

信道类型有以下两种:

  • 点对点信道:使用一对一的通信方式。
  • 广播信道:使用一对多的广播通信方式,过程比较复杂,需要专门的共享协议来管理。

链路(link):是一条点到点的物理线路段,中间没有任何其他的交换结点。

数据链路(data link):除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。

现最常用的方法是使用适配器(网卡)来实现这些协议的硬件和软件。

一般的适配器(网卡)都包含物理层和数据链路层这两层的功能。

:常常在两个对等的数据链路层之间画出一个数字管道,而在这条数字管道上传输的数据单位是帧。

在这里插入图片描述

二、数据链路层的三个基本问题

1. 封装成帧

在一段数据的前后分别添加首部尾部,然后就构成了一个,确定帧的界限。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-szxDdveD-1589780388785)(C:\Users\Erekilu\AppData\Roaming\Typora\typora-user-images\image-20200517121635128.png)]

例如:帧首部为0000 0001,帧尾部为0000 0100。那么接收方识别帧首后,就知道要开始读取数据了,一直到帧尾,就知道读取完成了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YdU4Fov6-1589780388788)(C:\Users\Erekilu\AppData\Roaming\Typora\typora-user-images\image-20200517121835503.png)]

2. 透明传输

在上个例子中,可能有人会想到,如果数据中有些片段和帧首或帧尾相同咋办,那样不会提前结束吗?这就是所谓的透明传输问题了。

在这里插入图片描述

所以解决透明传输的方法就是字节填充法(或字符填充法):当数据部分出现与EOTSOH相同的比特时,前面统一加上一个转义字符,来表示下面一段不被视为首尾标识。如果转义字符也出现数据当中,那么应在转义字符前再插入一个转义字符
在这里插入图片描述

3. 差错检测

传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。

为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。

在数据链路层传送的帧中,广泛使用了循环冗余检验(CRC)的检错技术。

下面我简单概述下CRC的处理逻辑:

  1. 确定要传输的数据,比如101001

  2. 给这个数据后面加上m0,比如加上3个0,就是101001000

  3. 让这个数据跟一个m + 1位的数相除,随便选,比如11011011

    在这里插入图片描述

  4. 除得的余数001,就是帧检验序列(FCS)

  5. 得到FCS后,FCS作为冗余码拼接在原数据后面,变成101001001,再发送出去。

  6. 接收端接收到101001001后,再进行一次除法,被除数为101001001,除数还是1101,如果余数0,代表数据未出错,否则丢弃数据。
    101001001 1101 = 110101 ⋯ ⋯ 0 \dfrac {101001001}{1101} = 110101\cdots\cdots0 1101101001001=1101010

要注意几个点:

  • 这个方法不能检测出是哪个比特或哪几个比特出了差错。

  • 只要用位数足够多的除数P,就能很大程度提高差错检测率。

    换句话来说,就是CRC检测可能出现失误的。比如数据是500,除数是10,当数据出错了后,如果刚好是10的倍数(比如510、530),那余数依然为0。但增加除数大小,比如除数变成了250,那只有数据刚好出错变成了250的倍数时,余数才为0,检测成功率就提高了许多。

  • CRC只能保证无差错接收,要做到可靠传输,还要加上确认重传机制。

三、两种情况下的数据链路层

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

现在全世界使用得最多的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。

PPP协议的帧格式,标志字段为0x7E,转为二进制也就是01111110


当 PPP 用在异步传输时,就使用一种特殊的字符填充法(我不太理解这个方法(lll¬ω¬)):

  • 将信息字段中出现的每一个0x7E字节转变成为2字节序列(0x7D, 0x5E)
  • 若信息字段中出现一个0x7D的字节, 则将其转变成为2字节序列(0x7D, 0x5D)
  • 若信息字段中出现 ASCII 码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个0
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值