计算机网络学习笔记
笔记主要用于记录自己的学习经历,便于日后复习。
主要参考资源:《王道计算机网络》。
视频资源转至b站:
https://www.bilibili.com/video/BV19E411D78Q?from=search&seid=1517288630122778145
第三章数据链路层
1. 基本概念
2. 封装成帧与透明传输
封装成帧就是加将数据加头加尾,相当于将数据打包
透明传输就是为了防止特殊的数据无法正常传输的的情况的发生,比如说在封装成帧的过程中出现数据中的某些标记符与开始/结束标记符恰巧重复等等情况
2.1 透明传输的应用
2.1.1 字符计数法
就是在帧的首部做计数,看看数据是否错误
缺点:如果在某一个帧内,标记位后面的某个字节的数据丢失,那么会影响后面的帧
比如3 1 1 和 4 2 2 2,如果前面的帧丢失变成 3 1,那么后面的4就会被补到前面变成 3 1 4导致错误
2.1.2 字符填充法
就是加头加尾分别标记开始结束,和零比特填充法(见下)对比,开始和结束的对应的字符不一样
但有可能出现数据内某段比特流数据正好与标记字段重复,从而导致误判断的情况
解决方法:添加转义字符
2.1.3 零比特填充法
2.1.4 违规编码法
因为曼彻斯特编码不使用高-高,低-低来表示,所以如果使用高-高,低-低来表示帧起始和终止就不会与数据冲突
3. 差错控制
3.1 差错是什么,从哪来的
数据链路层的差错检测的是比特的错误
3.2 为什么要在数据链路层进行差错控制?
因为错误可以尽早发现,不会让一个错误的数据包发送了很长时间到达最终目的地之后才被发现,从而导致网络资源的浪费
3.3 检错编码(奇偶校验码,循环冗余码CRC)
3.3.1 奇偶校验码
缺点:只能检测出1,3,5,7…等等奇位数错误,检测成功率位50%
3.3.2 循环冗余码CRC
就是用传输数据除以生成多项式得到冗余码
实际例子
注释:
1.阶数就是最高位是哪位,然后位数-1,如10011就是5-1=4,1011就是4-1=3
2.异或运算就是相同得0,不同得1,比如100和101做异或,结果就是001
3.出书和最后的余数添加到要发送的数据后面,称为帧检验序列FCS
接收方收到数据后进行检测
需要注意的地方
3.4 纠错编码(海明码)
分为四步
第一步 确认校验码位数r
第二步 确定校验码和数据的位置
注释:
1.为什么是10为数据位?因为4位校验码+6位信息位=10位
2.校验码放到2的几次方的位置,其他的地方按顺序放已知的信息位
第三步 求出校验码的值
注释
1.先是通过二进制位确定有几位。本题中因为最大位10的二进制是1010,所以是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,然后填入表格
第四步 检测并纠错
就是和上面一样,将所有校验位进行运算,得出的结果的值就是错误的位