前言:本章作为《计算机网络》系列的第三篇文章,内容主要是向大家介绍数据链路层的内容,引入封装成帧、透明传输、差错控制、数据链路层的流量控制与是否能实现可靠传输、介质访问技术、局域网、广域网、链路层设备等内容(参考资料为b站上点击量最高的两个计网视频——王道&方老师,王道有的地方会讲的不够好,大家可以两个交替看)。
可以把数据链路层理解成“小秘书”,网络层理解成“大BOSS”,当网络层需要数据链路层帮忙传送数据给另一个网络层时,数据链路层会把数据进行编号发送给物理层,物理层特别“傻”,容易把数据弄丢!数据丢失就回来继续找数据链路层要丢失的数据。
数据链路层三个基本问题
就是加将数据加头加尾,相当于将数据打包
就是为了防止特殊的数据无法正常传输的的情况的发生,比如说在封装成帧的过程中出现数据中的某些标记符与开始/结束标记符恰巧重复等等情况。
解决方法如下:
前面一个字符传递出现错误,会导致后续全部错误。
在帧的首部做计数,看看数据是否错误
缺点:如果在某一个帧内,标记位后面的某个字节的数据丢失,那么会影响后面的帧
比如3 1 1 和 4 2 2 2,如果前面的帧丢失变成 3 1,那么后面的4就会被补到前面变成 3 1 4导致错误
加头加尾分别标记开始结束,和零比特填充法对比,开始和结束的对应的字符不一样
但有可能出现数据内某段比特流数据正好与标记字段重复,从而导致误判断的情况,所以会加转义字符。
练习题
答案:7E FE 27 7D 7D 65 7E
练习题
答案:两个,只要遇见连续的五个1,直接插入一个0.
因为曼彻斯特编码只使用高-低,低-高来表示,所以如果使用高-高,低-低来表示帧起始和终止就不会与数据冲突
数据链路层的差错检测的是比特的错误
缺点:只能检测出1,3,5,7…等等奇位数错误,检测成功率位50%
除数是随机生成的,得出的余数FCS最终再加到源数据M上,再除一次,除得尽就认为没问题。
冗余码计算举例
就是用传输数据除以生成多项式得到冗余码
这个除法有点类似于异或运算哦!
1.阶数就是最高位是哪位,然后位数-1,如10011就是5-1=4,1011就是4-1=3
2.异或运算就是相同得0,不同得1,比如100和101做异或,结果就是001
3.出书和最后的余数添加到要发送的数据后面,称为帧检验序列FCS
分为四步
第一步 确认校验码位数r
第二步 确定校验码和数据的位置
1.为什么是10为数据位?因为4位校验码+6位信息位=10位
2.校验码放到2的几次方的位置,其他的地方按顺序放已知的信息位
第三步 求出校验码的值
1.先是通过二进制位确定有几位。本题中因为最大位10的二进制是101 0,所以是4为,将其标注
2.然后从p1开始看,看p1的二进制位的数值和所有信息位的对应位置的数值是否相同,然后找出来这些位
这里有点难理解,这里以p1为例辅助理解,这里找出来的就是P1,D1,D2,D4,D5
然后计算异或值,比如说这里D1=1,D2=0,D4=1,D5=0,就是p1要同时和0,1,0,1进行异或之后得到0,为了标识我加粗原始计算数据
举例:0和1异或得1,1和0异或得1,1和1异或得0,那么p1和0异或得0,p1就是0了
3.其他同理,按顺序计算出P2,P3,P4,然后填入表格
第四步 检测并纠错
就是和上面一样,将所有校验位进行运算,得出的结果的值就是错误的位。
可靠传输是不重复、不丢失、不失序!
这里CRC可还差远啦!
流量控制是为了让传输过程中的发送速度和接受速度匹配,减少传输出错与资源浪费
可靠传输是发送端发送什么,接收端就要受到什么
因为一次就一个,所以用0和1标记ack就行
停止等待协议的有差错情况
1.数据帧丢失或接受端检测出错
2.ACK丢失
3.ACK迟到
停止等待协议的优缺点
1.简单
2.信道利用率低。大部分时间数据都在路上,发送方很 长时间闲置,资源浪费。
补充知识点信道利用率
因为停止等待协议太浪费时间了,所以尝试采用GBN,发送连续多个数据帧,以增大信道利用率。
累计确认:就是收到一个确认帧,那么它和它之前的所有帧都默认已收到,反之,如果某个确认帧没收到,那么它和它之后的所有帧都默认丢失(即使收到了也丢掉),进行重传。
实例
此图发送2帧时丢失,所以接收方几首收到后面的帧也是直接丢弃并且发送最晚收到的有效帧1的ACK,直至2帧的超时重传机制被触发进行重传并得到ACK之后,接收方才会接受2帧以及后面的帧。
为什么发送窗口不能无限大?
比如我们发送“01230123”,当前边的0123发送失败,接收方又接收到了0123时,这时候接收方是无法辨别此时这个0123是前边的还是后边的。
GBN的优缺点也显而易见,优点是提高了信道利用率,缺点是因为重传机制的原因导致已经收到数据却需要强行丢弃而造成浪费。
GBN重点总结
练习题
GBN协议的性能
思维导图
为了解决GBN的缺点,我们打算尝试只重传错误的帧,这样的话就不用浪费资源吧已经收到的帧再重传一次了。
和GBN相比,两者都有窗口了,和GBN的区别其实就是做了一个数据缓存,已经收到的帧不用扔了,等待之前因意外丢失的帧收到的时候确认即可,但是只能缓存窗口尺寸内的包含的帧(PS,缓存咋可能无限大)
SR运行过程
注释:2帧丢失之后仍然在发送,但是2帧丢失之后只是缓存,并没有移动窗口,直至最后2帧收到后一次性确认2-5帧
同样的,因为编号的问题,发送窗口不能无限大
发送窗口最后和接受窗口大小相同,这样利用率比较高新帧和旧帧计算机分不清!
SR重点总结
练习题
思维导图
就是让节点之间的通信不会进行相互干扰
这里稍微提一下总线型和星型(看见b站弹幕上有人认为这俩种一样),对于总线型,只要总线的某一处断开连接,后面所有节点的连接均会受到影响,而对于星型,某一处节点的连接断开并不会对其他路线产生影响。
介质访问控制
虽然使用一条共享信道,但是通过多路复用技术组合进行传输,提高了信道的利用率
可能造成资源浪费
统计时分复用STDM(TDM的改进版本)
TDM的缺点就是利用率低,所以又衍生出了STDM
STDM的原则是先到先走,满了就发,相对于TDM提高了利用率
实际就是光的频分复用,因为借助了光,所以叫波分复用。
CDM这块王道网课当中讲得很不清晰(建议大家去看方老师的讲解),这里放上教材里的内容以便读者理解。
补充方老师版本的内容:
码片
CDMA工作原理
简单来说就是“我”本身去和混合后的码片序列求内积,
得到规格化内积结果为1,说明混合码片序列中有“我”本身;
同理,规格化内积结果为-1,说明“我”发送了本站反码(相当于发送比特0);
规格化内积结果为0,则“我”没有发送;
单个比特分解的码片数越多,就能构成越多的正交码片,就能让更多的用户共享同一信道。
练习题
思路:直接把选项带入分别和码片序列求规格化内积。
答案: 1 、0、无、1
所有用户都可以随机发送信息,发送时可以占用全部带宽,理论上个人使用时比静态分配信道的速度更快
比较“无脑”,随性发送,错误就重发
纯ALOHA协议缺点:太随性,导致效率低
改进版本 时隙ALOHA协议
相对于纯ALOHA协议就是固定了发送的时间(只能在一个时间片的开始),提高了效率
1-坚持
非坚持
P坚持(P是人为设定的,无需纠结)
三种协议对比:
(b站上网课关于P坚持有错误,所以这里放2021版教材当中的最新修正内容)
引入:以太网采取的两个措施
CSMA/CD协议含义
就是因为链路实际有长短,发送数据需要时间,这个时间内可能就被其他节点当成空闲状态导致发生碰撞
知道自己发生碰撞的最长时间是2τ(两倍的传播时延),就是一去一回。
为什么要进行碰撞检测?
传播时延对载波监听的影响
如何确定碰撞后重传时机?
练习题
最小帧长问题
CSMA/CD协议要点
先听后发,边听边发,冲突停止,延迟重发.
协议工作原理
主要包括两大类,一个是轮询协议,另一个是令牌传递协议
就是选出一个代表,让他控制所有的传输。
轮询开销在随着服务的节点越多,需要用于查询是否发送数据发送的数据帧也就越多,会造成一定开销。
等待延迟就是因为这是轮流“邀请”,所以难免某个节点需要发送数据,但是主节点还在较远的需要里有需求的节点那边,导致需求得不到立即响应
单点故障很好理解,就是代表挂了。
在节点之间没有收发数据的需求时,令牌在节点之间循环。
发送数据的流程
1.当一个节点需要时就可以获得这个令牌。然后修改这个令牌的状态(空闲->占用)
再将令牌与数据帧结合,让其在节点构成的环之间流动。
2.不是目的地的节点收到令牌也不接受,直接略过,目标节点收到信息并复制一份到本地(传输完成),因为是个闭环,所以发送节点最后得到令牌。
3.最后,发送令牌的节点对令牌的内容进行检查,如果发现数据出错还要重新发一遍。
问题基本和轮询协议相同。
总结
概括:范围大小,速度快,延迟低,节点平等。
常用的是总线型拓扑
IEEE802标准(记住划线的四条就行)
MAC层更接近物理层,LLC更接近网络层。
那么在我们的网络当中什么样的设备用到了数据链路层、MAC子层、LLC子层或者物理层?
答案:适配器
从最早的总线形式,换成了星型结果(从同轴电缆到双绞线)。
1.这里的mac层指的是数据链路层
2.之前说过数据链路层将上一层ip数据包加头加尾
头就是目标地址(6字节),源地址(6字节),类型(2字节)
尾就是FCS(帧检验序列),(4字节)
3.前导码不是MAC帧的一部分?
目的是使时钟同步
4.为什么数据长度时46~1500?
因为有最小传输字节64字节,mac占用6+6+2+4=18,所以数据最小为64-18=46,1500则是规定的默认最大字节,记住就好。
前边是前导码
MTU最多是1500字节。
以太网MAC帧的帧头+帧尾=18字节,所以IP数据报的最短字节就是64B-18B=46B,64B来源于上文推导出的以太网最短帧长为64B。
5.无效的MAC帧
理想情况下不存在争用期,只有占用期。
练习题
我们之前以太网计算的最短帧长64B是根据数据率10Mbit/s,得出的,这里已经达到千兆,不要混淆啦!
这里的服务集可以简单当成路由器WiFi
PPP协议是目前使用最广泛的数据链路层协议,拨号基本都是PPP协议。
PPP协议仅支持全双工链路。
PPP协议为什么不需要使用序号和确认机制?
PPP协议的状态图
可以扩展以太网,但是集线器会无脑将一个设备的所有消息转发到集线器所连的所有设备,故会将所连接的所有设备变成一个大的冲突域,同时只能有两台设备进行通信,且设备越多,冲突越多。由此诞生了网桥。
如何在物理层扩展以太网?
用集线器
如何在数据链路层扩展以太网?
网桥或交换器
使用网桥时,由于网桥会根据mac地址进行过滤,所以不会形成冲突域
通过自学习来构建转发表。每一个通过网桥的数据包都会被记录下网桥收到数据时数据对应的地址和网桥自己的接口,通过许许多多的数据包的构造的缓存,网桥就可以知道哪个数据包在哪个接口,以后如果要穿数据包就知道要往哪个接口发送数据包了。
在发送时,直接将最佳路径放到帧首部。那么网桥如何获得最佳路径?通过广播方式想目标地址发送广播,此时可能会经过不同路由产生不同的路径,目标地址收到后再将每一条路径都发一个响应帧给网桥,网桥经过对比就知道哪个接口最快了。
MAC接口1收到A的信号,对应的MAC地址是A,交换机可以倒推出A是连在1接口上的。
同理B3,C2,D4。这样有了记录后续就不需要广播!
交换机的自学习和转发帧步骤归纳
每转一圈,“广播包”的总数量就增加一次,可能会发生“广播风暴”。
这么解决无限制循环的问题?
答案:把循环中某一逻辑接口截断,把环状结构变成树状即可。
物理位置上连在一个交换机上,就组成局域网;不是连在一个交换机下,也可以组成虚拟局域网。
如下构成三组虚拟局域网
A、B、C虽然连接在同一个交换机下,但是数据练链路层受限,他们不能直接通信。
练习题
广播域的判断很简单,只需要看下图中有没有路由器,如果有一个路由器,然后左边一个网络,右边一个网络,那就是两个广播域,但是咱们图中没有出现路由器,所以就是一个广播域。
与以太网交换机连接的链路层设备,每个都是冲突域,所以4个。
计算机网络的数据链路层部分到此介绍结束了,感谢您的阅读!!!如果内容对你有帮助的话,记得给我三连(点赞、收藏、关注)——做个手有余香的人。