我是靠谱客的博主 奋斗茉莉,最近开发中收集的这篇文章主要介绍数据链路层 使用点对点(一对一)信道(图文详解)数据链路层,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

数据链路层

  • 数据链路层
    • 使用点对点(一对一)信道的数据链路层
      • 三个基本问题
      • 1.封装成帧
      • 2.透明传输问题
      • 3.差错控制(CRC循环冗余检验)
        • 无比特差错
        • 无传输差错
      • 点对点协议(PPP协议)
      • PPP协议的帧格式
        • 标志字段
        • 地址字段
        • 控制字段
        • 协议字段
        • 透明传输问题(同步传输)
        • 透明传输问题(异步传输)

数据链路层

在这里插入图片描述
数据链路层主要有两个功能 :帧编码和误差纠正控制
数据链路层使用的信道主要有一下两种类型:点对点信道(PPP协议)和广播信道。


使用点对点(一对一)信道的数据链路层

  • 数据链路层传送的是帧,那么就要考虑三个基本的问题。

三个基本问题

1.封装成帧

在这里插入图片描述

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

2.透明传输问题

  • 当数据是由可打印的ASCII码组成的文本文件时,帧的定界可以使用特殊的帧定界符
  • SOH表示帧的首部开始
  • EOT表示帧的结束
    在这里插入图片描述
  • 思考:但是如果数据中的某个字节的二进制代码恰好和 SOH 或EOT 一样,数据链路层会不会错误地“找到帧的边界”?
  • 答案:会的,这就是透明传输问题。
    在这里插入图片描述
  • 怎么解决透明传输问题?
  • 解决方法:字节填充 (byte stuffing)或字符填充(character stuffing)。
    在这里插入图片描述
    在这里插入图片描述
    发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是 1B)。接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。 如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。

3.差错控制(CRC循环冗余检验)

CRC循环冗余检验:将余数 R 作为冗余码拼接在数据 M 后面发送出去。到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。

  • 待传送的一组数据M = 101001(现在k =6)。我们在 M 的后面再添加供差错检测用的n位冗余码一起发送,这相当于在M后面添加n个。得到(k +n) 位的数除以事先选定好的长度为(n + 1) 位的除数P,得出商Q和余数R,余数 R 比除数P少1位,即 R是n位。将余数 R 作为冗余码拼接在数据 M 后面发送出去。
  • 现在假设k=6,M=101001, n=3,除数P=1101.
    在这里插入图片描述
    (在数据后面添加上的冗余码称为帧检验序列FCS (Frame Check Sequence))
  • 模2运算的结果是:商Q=110101,余数R=001。把余数R添加到M后边发出去即:101001001共k+n位

无比特差错

仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受 (accept)。“无差错接受”是指:“凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错”。

无传输差错

帧在传输过程中没有出现比特差错的基础上 未出现帧丢失、帧重复、帧失序的传输。按我的理解来说无传输差错就是可靠传输。

点对点协议(PPP协议)

PPP协议有三个组成部分

  • 一个将 IP 数据报封装到串行链路的方法。
  • 链路控制协议 LCP (Link Control Protocol)。
  • 网络控制协议 NCP (Network ControlProtocol)。

PPP协议的帧格式

在这里插入图片描述

标志字段

  • 标志字段 F = 0x7E (符号“0x”表示后面的字符是用十六进制表示。十六进制的 7E 的二进制表示是01111110)。

地址字段

  • 地址字段 A 只置为 0xFF。地址字段实际上并不起作用。

控制字段

  • 控制字段 C 通常置为 0x03。

协议字段

  • PPP 有一个 2 个字节的协议字段。其值若为 0x0021,则信息字段就是 IP 数据报。若为 0x8021,则信息字段是网络控制数据。若为 0xC021,则信息字段是链路控制数据。若为 0xC023,则信息字段是鉴别数据。

透明传输问题(同步传输)

比特填充,也就是上边点对点的解决方法。

透明传输问题(异步传输)

  1. 字符填充:
  • 将信息字段中出现的每一个 0x7E 字节转变成为2 字节序列 (0x7D, 0x5E)。
  • 若信息字段中出现一个 0x7D 的字节, 则将其转
    变成为 2 字节序列 (0x7D, 0x5D)。
  • 若信息字段中出现 ASCII 码的控制字符(即数值小于 0x20 的字符),则在该字符前面要加入一个 0x7D 字节,同时将该字符的编码加以改变。
  1. 零比特填充
  • 发送端,只要发现有 5 个连续 1,则立即填入一个 0。
  • 接收端对帧中的比特流进行扫描。每当发现 5个连续1时,就把这 5 个连续 1 后的一个 0 删除。
    在这里插入图片描述

  • 此系列文章传送门
  • 第二篇:使用广播信道(一对多)的数据链路层
  • 第三篇:数据链路层的子层MAC层(图文详解)
    卑微博主在线求赞,点个赞再走。
    在这里插入图片描述

最后

以上就是奋斗茉莉为你收集整理的数据链路层 使用点对点(一对一)信道(图文详解)数据链路层的全部内容,希望文章能够帮你解决数据链路层 使用点对点(一对一)信道(图文详解)数据链路层所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部