数据链路层是用来实现相邻节点之间的数据传输,其中要用到物理层的0-1比特流传输能力
什么叫相邻?就是不需要经过第三方
什么叫第三方?就是数据链路层以下的东西
下面首先介绍数据链路层的几个基本问题
因为技术差异比较大所以从3.1.2分出来讲
通信的主体都有自己的标识,人们都可以通过这个找到他,称作地址
随机分配——管理员分配配置
固化设置——将地址固化到物理器械中——以太网卡
要把01比特数据流变成一个个小块分出去
为什么呢?因为一个个小块作为基本单位比较好控制
那么怎么封装呢?我们要给帧加上帧头和帧尾
使用非数据编码信号来表示帧的边界
如以太网用曼彻斯特编码方式传输数据
我们可以使用其他编码方式用作帧的边界,比如高电平或者低电平
在头部中的一个域指定该帧中的字符数
可是出错了就惨兮兮了
使用特殊的字符作为帧的开始和结束标志
新的问题来了,如果我们要传的数据出现了flag怎么办?
这么牛B了还有什么缺陷呢?
必须紧紧依赖于8位字符模式
帧开始和结束都有一个特殊的位模式01111110
当传输数据中有01111110如何处理?
碰到连续5连续的位“1”的时候,自动填充一位0
发送方疯狂输出,速度超过了接受方能够接受这些帧的速度,what should I do?
定义规则,规范发送者什么时候可以发送帧,我告诉你什么时候你可以发你再发
限制发送方的速率,我能受得了多少我提前告诉你
犯错了?!?!?!什么是错误?
凡是接收到的数据和发送的数据不一致就是错误
怎么会不一致呢?
编码本身存在的缺陷,噪音的影响会导致——错误数据、丢失数据、数据乱序
那怎么应对犯错呢?
使用纠错码——包含m个数据位和r个校验位的n-位单元,通常称为n位码字(n=m+r)
纠正d位错误——假设传输过程中,最多d位出错
扩大表示原数据的01比特数
保证每两个n位码间的海明距离至少为2d+1
何谓海明距离?两个长度相等的字符串的海明距离是在相同位置上不同的字符的个数
接收到数据A时,与所有的n位合法码字求解海明距离,海明距离小于d的,就是传输的数据
例如:
接收到数据00000 00111,与上面的码字计算海明距离,和码字2距离最小,为2,因此该数据有两位出错了,原始数据应该是00000 11111
好笨的方法,好费事
老子能看出来就行了
在数据后面加上一个奇偶位,如果码字中的“1”的位为偶数,则填0,如果是奇数,则填1
针对突发性长错误
TCP/IP协议中使用的一种校验方法
是不是看不懂,咱来解释一下
什么是生成多项式?
发送和接收方协商好的多项式 最高位和最低位必须为 1
将多项式的系数罗列拼接而成的一个二进制0/1串,也就是未来的除数
检错能力很牛
但仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受(accept)
换句话说就是凡是接收端数据链路层接收的帧都没有传输差错”(有差错的帧就丢弃而不接受)
要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制
原文:https://www.cnblogs.com/yuxiaohan1236/p/14815604.html