我们在前面计算机体系结构那里学过了数据链路层可以将网络层传下来的ip数据报封装成帧,提到了数据链路层的差错控制任务。前面学习了计算机网络中的物理层,现在我们开始数据链路层深入的学习。
网络的传输方式
- 广播式网络
- 点对点式网络
广播式网络——使用广播信道(一对多)
特点:
- 所有计算机共享同一条信道
- 同一台计算机发出的信息可以被其他所有计算机接收
- 两台计算机同时发送会产生冲突
点对点式网络——使用点对点信道(一对一)
特点:
- 一条线路连接两个网络设备(点——点)
- 两台计算机传输经过多台网络连接设备
- 两台计算机传输有多条路径可以选择
数据链路层的主要任务:在物理层提供比特流服务的基础上,建立相邻节点之间的数据链路,通过差错控制提供数据帧在信道上的透明传输。
一些概念
链路:一条无源的点到点的物理线路段,没有其他的中间交换节点(一条线路有很多的链路所组成)
数据链路:简单理解就是物理链路+协议,将实现这些协议的硬件和软件加载到链路上就构成了数据链路。
网络适配器(网卡):实现通信协议,包括了硬件与软件
帧:在前面的博客中已经说过帧是数据链路层的协议数据单元
数据链路层传输的几个问题:
封装成帧
将网络层传输下来的ip数据报前后分别添加首部和尾部,确定帧的界限,将数据报封装成帧。
添加首部与尾部的作用:进行帧界定,包含必要的控制信息。
帧长:ip数据报和帧首部和尾部整体的长度。
最大传送单元:所能传输的ip数据报的长度上限(帧中数据部分的长度上限)
帧定界:SOH放在最前面表示一帧的开始,EOT表示帧的结束。
帧定界的作用:在没有找到一帧的EOT结束时又发现了新的SOT,那么就会丢弃该帧。
字节计数法
帧的首部使用一个计数字段,代表这个帧内的字符数。当字符数到达首部所告知的长度后即进入了下一帧。
使用这种传输方式有很大的问题,帧首部的计数字段如果发生了跳变,例如
上图中的第一帧首5跳变成其他数,例如4,会导致整个后续的帧信息都发生变化——5跳变成4会错误的导致将第一帧的帧尾认为下一帧的帧首部,从而导致所有的帧都发生错位的变化,影响是非常大的
字符计数法——传送的帧是文本文件时
在网络层传入ip数据报之后作为帧的数据信息,数据链路层在前面与后面加上帧首部与帧尾部用于帧界定。如果看到帧首部即知道新的一帧开始,看到帧尾部即知道此帧结束。
这里就有了一个新的问题:
如果帧的数据部分中有帧首部和尾部的控制信息,会错误的结束一个帧的传输。在下图中数据部分的EOT会被错误的认为帧尾而抛弃一些信息。同样,若没有见到帧尾部而又见到了帧首SOH会错误的将此帧抛弃
解决办法:转义
将帧数据部分中与控制信息相同的那部分信息进行转义,这和最开始学习C的时候有些有含义的字符需要进行转义是很像的。
经过转义符的修饰,就可以正确的传输帧的数据部分与控制信息相同的那一部分。接收端在接收到发送端发送的帧后,取出数据部分,在去除转义字符后,得到原始信息。
零比特传输法
零比特传输法的控制信息帧首部和尾部是相同的——01111110(八位一字节)
因为控制信息中有六个连续的1,为了防止数据部分中的信息与控制信息相同,我们在遇到连续的五个1时候(即011111xx时,这里不管第五个1后面是0还是1)我们在第五个一后面插入一个0,即变成0111110XX。
接收端在接收到发送端发送的帧后,去掉帧首与尾部后,检查数据部分,若遇到连续的5个1,即将1后面的一个0删掉,就恢复了最初的数据信息。
违规编码
在看到编码这两个字时, 不知道有没有想起来曼彻斯特编码和差分曼彻斯特编码。这里用到的就是曼彻斯特编码。我们知道曼彻斯特编码由高向低跳变代表1,由低向高跳变代表0。
因为不会出现两种相同的电平,所以我们可以将高高与低低作为违规编码来作为帧定界的起始和终止。
透明传输 (上面的字符传输)
不管所传数据是什么样的比特组合,都应当能够在链路上传送。 当所传数据中的比特组合恰巧与某一个控制信息完全一样时,就必须采取适当的措施,使接收方不会将这样的数据误认为是某种控制信息。
差错控制
差错可以分为两种:位错与帧错。在这里我们主要强调的是比特错,帧错在未来的传输层中学习。
位错:比特位出错,0变1,1变0。
帧错:帧丢失,帧失序,帧重复
检错编码
我在这里另写了一篇博客进行复习奇偶校验与学习CRC校验
检错编码——奇偶校验与循环冗余码CRC校验_bubb1e ly的博客-优快云博客
检错编码
在这篇博客里相信的介绍了海明码