![17c087ae2a6893e4956a074bd3af9820.png](https://i-blog.csdnimg.cn/blog_migrate/b9b0c5d4c64e644c106d39d979033533.jpeg)
3.1 数据链路层功能概述
数据链路层基本概念
结点:主机、路由器
链路:网络中两个节点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。
数据链路:网络中两个节点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构成数据链路。
帧:链路层的协议数据单元,封装网络层数据报。
数据链路层负责通过一条链路从一个结点向另一个物理链路直接相连的相邻结点传送数据报。
数据链路层功能概述
数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻结点的目标机网络层,其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。
功能一:为网络层提供服务。无确认无连接服务;有确认无连接服务;有确认面向连接服务。(注意:有连接一定有确认)
功能二:链路管理,即连接的建立、维持、释放(用于面向连接的服务)
功能三:组帧
功能四:流量控制
功能五:差错控制(帧错/位错)
3.2封装成帧和透明传输
![28f951839eae3f8a888a8319fdce9904.png](https://i-blog.csdnimg.cn/blog_migrate/f78713d8038add6d4c93ecb41e08f5e2.jpeg)
封装成帧
封装成帧:就是在一段数据的前后部分添加首部和尾部,这样就构成了一个帧,接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束
首部和尾部包含许多的控制信息,他们的一个重要作用:帧定界(确定帧的界限)
帧同步:接收方应当能从接收到的二进制比特流中区分出帧的起始和终止
组帧的四种方法:1、字符计数法,2字符填充法,3、零比特填充法,4、违规编码法。
帧的数据部分不超过规定的 最大传送单元MTU
帧首部+帧的数据部分+帧尾部=数据链路层的帧长
![1c83a126cbfe0f8b379e443c04260386.png](https://i-blog.csdnimg.cn/blog_migrate/8fb713345ec84f4e7f555206992d1a06.png)
透明传输
透明传输是指不管所传数据是什么样的比特组合,都应当能够在链路上传送。因此,链路层就“看不见”有什么妨碍数据传输的东西。
当所传输剧中的比特组合恰巧与某一控制信息完全一样时,就必须采取适当的措施,使接收方不会将这样的数据错误认为是某种控制信息。这样才能保证数据链路的传输是透明的。
1、字符计数法
![b958b576ba9d3c843f0e7198a1e3faff.png](https://i-blog.csdnimg.cn/blog_migrate/08037968745cda69bfcfe8c7ca0b8900.png)
缺点:如果某一个帧的帧首部数值计错,则会连环影响后续所有的帧,导致全部出错。
2、字符填充法
![1731adb11bc27988d15f9d62ee89ce5f.png](https://i-blog.csdnimg.cn/blog_migrate/735d5346ec103005d014c9ba3257f023.png)
SOH和EOT分别作为帧首部和帧尾部
但是当帧的数据部分中,恰好有一部分与EOT的内容完全相同时,就会出现识别错误。
![5f5f3eb7086200da02cb8c94e734079e.png](https://i-blog.csdnimg.cn/blog_migrate/e20d14003d8380d491fa1b3ca9e07a70.png)
因此我们需要用字符填充法来实现透明传输。
![a901901511ec4421adf43013b3926237.png](https://i-blog.csdnimg.cn/blog_migrate/18bc70054d987038432fbc6b24bb876a.png)
![dfcb9f8618d6b1f4986d72a3319cf854.png](https://i-blog.csdnimg.cn/blog_migrate/ada5fe977a530185ea4449e06be566e2.png)
在发送端当帧的数据部分出现与EOT相同的内容时,我们需要在EOT的前面加上转义字符ESC,如果帧的数据部分出现与转义字符ESC相同的内容时,我们也需要在ESC的前面加上转义字符ESC
![f793e7a76b2c7971bc5ee05c496e5b91.png](https://i-blog.csdnimg.cn/blog_migrate/045312f727aa3204a602c7967fd51e4b.png)
接收端识别到图中第一个ESC时,会明白这个EOT不是最终的帧尾部,然后接收端将删除当前的ESC,无视它相邻的EOT继续向后识别分析,后面遇到同样的ESC时同理,直到最后遇到真的EOT。最终接收端将得到一个完整的帧。
3、零比特填充法
![20fc43402ea10186e31a6e4fc129f8d5.png](https://i-blog.csdnimg.cn/blog_migrate/827675e55101f119928aa510f52bc330.png)
假设现在帧首部和尾部有6个“1”,则需要执行以下操作
操作:1、在发送端,扫描整个信息字段,只要连续5个1,就立即填入1个0
2、在接受端收到一个帧时,先找到标志字段确定边界,再用硬件对比特流进行扫描。发现连续5个1时,就把后面的0删除
保证了透明传输:在传送的比特流中可以传送任意比特组合,而不会引起对帧边界的判断错误。
思考:如果现在帧首部和尾部有5个“1”,则需要执行什么操作?
4、违规编码法
![0f756134e80ac98fd654393d79451c11.png](https://i-blog.csdnimg.cn/blog_migrate/b521c716b27ed9b3f4cd7094c51daf4a.png)
例如在曼彻斯特编码中,我们只有 高-低、低-高两种方式分别表示1和0,如果在该编码方式中出现 高-高 和 低-低 那么是违规的,不能出现的,所以我们可以用 高-高 和 低-低 来定界帧的起始和终止。
简而言之,就是用一种编码方式中不会用的方式来界定帧的起始和终止。
4种编码比较
由于字节计数法中Count字段的脆弱性(其值若有差错将导致灾难性后果)及字符填充实现上的复杂性和不兼容性,目前较普遍使用的帧同步法是比特填充和违规编码法
3.3.1 差错控制
差错从何而来?
概括来说,传输中的差错都是由于噪声引起的。
全局性 1、由于线路本身电气特性所产生的随机噪声(热噪声),是信道固有的,随即存在的。
解决办法:提高信噪比来减少或避免干扰
局部性 2、外界特定的短暂原因所造成的冲击噪声,是产生差错的主要原因。
解决办法:通常利用编码技术来解决。
![2152cb9f1eb2bef24df32fddb42fd6e6.png](https://i-blog.csdnimg.cn/blog_migrate/6f0785a9c69018158985f9f1c931a809.png)
链路层为网络层提供服务:无确认无连接服务,有确认无连接服务,有确认面向连接服务。
数据链路层的差错控制
![ac9743b4979c9130c7ef12e6595254f7.png](https://i-blog.csdnimg.cn/blog_migrate/d60cc5ab13aae3f4e1feb4c97b1ba768.png)
![d4519299dcc9309aa2badc8db2fe1626.png](https://i-blog.csdnimg.cn/blog_migrate/fc3240847ec4e2e00c3a983bb30b91a7.png)
编码VS编码
数据链路层编码和物理层的数据编码与调制不同。物理层编码针对的是单个比特,解决传输过程中比特的同步等问题,如曼彻斯特编码。而数据链路层的编码针对的是一组比特,它通过冗余码的技术实现一组二进制比特串在传输过程是否出现了差错。
冗余编码
在数据发送之前,先按某种关系附加上一定的冗余位,构成一个符合某一规则的码字后再发送。当要发送的有效数据变化时,相应的冗余位也随之变化,使码字遵从不变的规则。接收端根据收到码字是否符合原规则,从而判断是否出错
检错编码——奇偶校验码
![a6f995df831317281b12e06e0c767775.png](https://i-blog.csdnimg.cn/blog_migrate/ad31beaa531160c0e37166726ead60c0.png)
奇偶校验码的特点:
只能检查出奇数个比特错误,检错能力为50%
检错编码——CRC循环冗余码
![67958ff0c0886a4815d385568041cca5.png](https://i-blog.csdnimg.cn/blog_migrate/33a2c5b4fe669cb4d7e71c44af12af68.png)
![a92635a676a9c27895f4508a90b139a0.png](https://i-blog.csdnimg.cn/blog_migrate/0157ad706d02d4539e305b6f86aff6cb.jpeg)
![6422dd62d15fa00fadc38d86ac34c94b.png](https://i-blog.csdnimg.cn/blog_migrate/fdfb840d85252ab8d292a161c7386b22.png)
3.3.2 差错控制(检错编码)
纠错编码——海明码
海明码:发现双比特错,纠正单比特错
工作原理:牵一发而动全身
![bf9770c6800054640b84f84b7c588cf4.png](https://i-blog.csdnimg.cn/blog_migrate/bb1d17434398c4fa257b33bb442adc2d.png)
1.确定校验码位数r
![c6e283ff3c4f3277e710e8e9da14b3bb.png](https://i-blog.csdnimg.cn/blog_migrate/d4ea1ee7e95418c4cb27731a09131a52.png)
2.确定校验码和数据的位置
![1bb5c39b66114194dfb7df11f1a67e29.png](https://i-blog.csdnimg.cn/blog_migrate/4335ff892f5343f81ee9c24661b3c832.png)
3.求出校验码的值
![df34ba5879737476f7b2cfe46f17da2b.png](https://i-blog.csdnimg.cn/blog_migrate/517dd7e42e0fa36eae26ac9667306767.png)
![54ca539a8450732df3c0de2231d87d73.png](https://i-blog.csdnimg.cn/blog_migrate/9364c60fe73f12b6d0149ed0b89950b3.png)
4.检错并纠错
![59b6b49381376c85eea938abd7ffa71a.png](https://i-blog.csdnimg.cn/blog_migrate/04f00c669aca6037ae3a532631eed55a.png)
![8d2a39c9d1293b03756d27710fe0bfbb.png](https://i-blog.csdnimg.cn/blog_migrate/9a3ecf2984406c6683f657ab04efbb36.png)
脑图总结
![73dba651edb592f44d7cd8becd56d9d1.png](https://i-blog.csdnimg.cn/blog_migrate/1eee3dd7fd31aaa67e105180162f3c46.png)
![5d258a4bf055ec60ea30135181bab795.png](https://i-blog.csdnimg.cn/blog_migrate/fa7edfbcca6b5ca7a61f3963982b3172.jpeg)