Skip to content

Latest commit

 

History

History
78 lines (38 loc) · 2.87 KB

白话计算机网络--自底向上--数据链路层[1].md

File metadata and controls

78 lines (38 loc) · 2.87 KB

数据链路层与物理层的联系

(Data Link Layer) 上一篇我讲到了物理层是传输比特流的,我们也都知道比特的英文是bit,称为位,我们也都知道8位是一字节(Byte)。 所以联系就是传输的比特流来自什么呢?

就是来自数据链路层的“帧”。

这里引出一个概念,类比物理层传输的基本单位是bit, 而数据链路层传输的基本单位为“帧”。

数据链路层要解决的问题

首先我们宏观上知道这层的主要作用,有三点:

  1. 封装成帧
  2. 透明传输
  3. 差错检测

封装成帧

既然这一层传输的基本单位是帧我们就要知道帧长什么样 帧的结构:

帧首部(SOH) 网络层传下来的数据报(帧数据报) 帧尾部(EOT)

就是这么简单

透明传输

来说一说计算机领域对于透明的理解,拿编程语言来举例,只要你打一串字符串在哪儿加上\n,那么你会输出这两个字符吗?肯定不会,这个意思是换行,计算机遇到这俩字就会换行。 所以总结一下,计算机中“透明”的概念: ==这个东西看着存在,却又实际不存在。== 类比转义字符的机制,就深刻体现了这个概念。

用数据链路层的帧来举例子

首先我们确定分析的传播方向,是往下传还是往上传。

先分析往下传递的情况,物理层是不管差错的,上层给他啥他原样传播比特流, 但是数据链路层会做一件事,就是在往层传递的时候会加入转义字符ESC,什么是ESC?往下看。

然后分析往上传的情况,往上传是物理层传播到数据链路层,那么数据链路层要区分传上来的比特流哪里是一个帧的开头,哪里是一个帧的结尾。 比如出现这样的情况:

网络层传下来的数据中正好有一个EOT,那么该怎么区分真正的帧尾部呢?

帧首部(SOH) 网络层传下来的数据报 EOT 网络层传下来的数据报 帧尾部(EOT)

这时候SOH到数据报中的EOT是错误的帧; SOH到结尾的EOT是正确的帧。

==数据链路层也是用转义字符解决这个问题的,这个转义字符为ESC。==

比如在这个帧往物理层传输时往数据报中出现的EOT前面加上ESC,那么等到这个帧到达接收方的数据链路层还原回帧的时候就会知道,哦这个EOT前面有ESC,那它不是帧尾部,我还要继续往后识别找到真正的帧尾部。

那么你可能自然而然提出这样一个问题:如果帧数据报中出现了ESC怎么办?

很简单啊,在ESC前再加一个ESC告诉接收方,我这个ESC是数据中的一部分,不是转义字符。这个我们可以类比编程中,我们想输出“\”这个字符,那我们就要输入“\”。

以上就是在数据链路层透明传输的思想。