概述
数据链路层(一)
3.1 数据链路层概述
概述
链路是从一个结点到相邻结点的一段物理线路,数据链路则是在链路的基础上增加了一些必要的硬件(如网络适配器)和软件(如协议的实现)
网络中的主机、路由器等都必须实现数据链路层
局域网中的主机、交换机等都必须实现数据链路层
从层次上来看数据的流动
仅从数据链路层观察帧的流动
主机H1 到主机H2 所经过的网络可以是多种不同类型的
注意:不同的链路层可能采用不同的数据链路层协议
数据链路层使用的信道
数据链路层属于计算机网路的低层。数据链路层使用的信道主要有以下两种类型:
- 点对点信道
- 广播信道
局域网属于数据链路层
局域网虽然是个网络。但我们并不把局域网放在网络层中讨论。这是因为在网络层要讨论的是多个网络互连的问题,是讨论分组怎么从一个网络,通过路由器,转发到另一个网络。
而在同一个局域网中,分组怎么从一台主机传送到另一台主机,但并不经过路由器转发。从整个互联网来看,局域网仍属于数据链路层的范围
三个重要问题
数据链路层传送的协议数据单元是帧
封装成帧
- 封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧
- 首部和尾部的一个重要作用就是进行帧定界
差错检测
- 在传输过程中可能会产生误码:1 可能会变成 0, 而 0 也可能会变成 1
可靠传输
- 接收方主机收到有误码的帧后,是不会接受该帧的,会将其丢弃
- 如果数据链路层向其上层提供的是不可靠服务,那么丢弃就丢弃了,不会再有更多措施
- 如果数据链路层向其上层提供的是可靠服务,那就还需要其他措施,来确保接收方主机还可以重新收到被丢弃的这个帧的正确副本
以上三个问题都是使用点对点信道的数据链路层来举例的
- 如果使用广播信道的数据链路层,除了包含上面三个问题外,还有一些其他需要解决的问题
- 如图所示,主机 A,B,C,D,E 通过一根总线进行互连,主机A要给主机C发送帧,代表帧的信号会通过总线传输到总线上的其他各主机,那么主机B,D,E如何知道所收到的帧不是发送给她们的,而主机C又如何知道所发送的帧是发送给自己的呢 ?
- 可以用编址(地址)的方式来解决,也就是将帧的目的地址添加在帧中一起传输
还有数据碰撞问题
- 随着技术的发展,交换技术的成熟,成本的降低
- 使用 点对点链路 和 链路层交换机 的**交换式局域网,**在有线(局域网)领域 已完全取代了共享式局域网
- 在无线局域网中仍然使用的是共享信道技术
交换式局域网
无线局域网
3.2 封装成帧
介绍
- 封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧
- 帧头和帧尾中包含有重要的控制信息
发送方的数据链路层将上层交付下来的协议数据单元封装成帧后,还要通过物理层,将构成帧的各比特,转换成电信号发送给传输媒体,那么接收方的数据链路层如何从物理层交付的比特流中提取出一个个的帧呢 ?
答:需要帧头和帧尾来做帧定界
但并不是每一种数据链路层协议的帧都包含有帧定界标志,例如下面例子
前导码
- 前同步码:作用是使接收方的时钟同步
- 帧开始定界符:表明其后面紧跟着的就是MAC帧
另外以太网还规定了帧间间隔为96比特的发送时间,因此,MAC帧并不需要帧结束定界符
透明传输
透明
指某一个实际存在的事物看起来却好像不存在一样。
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
帧界定标志也就是个特定数据值,如果在上层交付的协议数据单元中, 恰好也包含这个特定数值,接收方就不能正确接收
所以数据链路层应该对上层交付的数据有限制,其内容不能包含帧定界符的值
解决透明传输问题
解决方法:
- 面向字节的物理链路使用字节填充 (byte stuffing) 或字符填充 (character stuffing)的方法来实现透明传输
- 面向比特的物理链路使用比特填充的方法实现透明传输
- 发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B)。
- 接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
- 如果转义字符也出现在数据当中,那么也应该在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。说到底就和C语言的转义字符的使用差不多
练习
帧的数据部分长度
总结
3.3 差错检测
介绍
FCS字段的作用就是为了让接收方的数据链路层检查帧在传输过程中是否产生了误码
奇偶校验
由于奇偶检验的漏检率较高,所以计算机网络的数据链路层一般不采用这种方法
循环冗余校验CRC(Cyclic Redundancy Check)
练习
总结
循环冗余校验 CRC 是一种检错方法,而帧校验序列 FCS 是添加在数据后面的冗余码
最后
以上就是悦耳导师为你收集整理的数据链路层(一)数据链路层(一)3.1 数据链路层概述3.2 封装成帧3.3 差错检测的全部内容,希望文章能够帮你解决数据链路层(一)数据链路层(一)3.1 数据链路层概述3.2 封装成帧3.3 差错检测所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复