计算机网络笔记——数据链路层(1)
3.1 使用点对点的信道的数据链路层
3.1.1 数据链路和帧
概念以及定义
链路:是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。
数据链路:除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
而数据链路层的基本单位就是:帧。
3.1.2 几个基本问题
1.封装成帧
封装成帧:就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。确定帧的界限。首部和尾部的一个重要作用就是进行帧定界。
除此之外他们还会加入特殊的帧定界符(或者说控制字符),其中帧开始字符SOH,帧结束字符EOT。
2.透明传输
问题:
解决方法:字节填充 (或字符填充)。即在数据报中出现控制符“SOH”或“EOT”的前面插入一个转义字符“ESC”。
有了ESC,在遇见EOT和SOH时,就不用担心出错的问题。
3. 差错检测
存在问题:在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。
解决方法:循环冗余检验 CRC 的检错技术来进行。
(设有k位数据,循环冗余检验即是在k位数据后面添加n位冗余,让(k+n)位一起发出。)
循环冗余检测码得出方法:用模2运算来求余数。
例子:
现在 k = 6, M = 101001。
设 n = 3, 除数 P = 1101,
被除数是 2nM = 101001000。
模 2 运算的结果是:商 Q = 110101,
余数 R = 001。
把余数 R 作为冗余码添加在数据 M 的后面发送出去。发送的数据是:2nM + R
即:101001001,共 (k + n) 位。
插曲:关于模2运算的简介:
(摘自:https://baike.baidu.com/item/%E6%A8%A12%E8%BF%90%E7%AE%97/18556715?fr=aladdin)
模二除法
多位二进制模2除法也类似于普通意义上的多位二进制除法,但是在如何确定商的问题上两者采用不同的规则。后者按带借位的二进制减法,根据余数减除数够减与否确定商1还是商0,若够减则商1,否则商0。多位模2除法采用模2减法,不带借位的二进制减法,因此考虑余数够减除数与否是没有意义 的。实际上,在CRC运算中,总能保证除数的首位为1,则模2除法运算的商是由余数首位与除数首位的模2除法运算结果确定。因为除数首位总是1,按照模2 除法运算法则,那么余数首位是1就商1,是0就商0。
完成之后。接收端收到每一帧经过CRC检验后,会有这两种情况:
(1) 若得出的余数 R = 0,则判定这个帧没有差错,就接受 (accept)。
(2) 若余数 R ¹ 0,则判定这个帧有差错,就丢弃。
但这种检测方法并不能确定究竟是哪一个或哪几个比特出现了差错。
只要经过严格的挑选,并使用位数足够多的除数 P,那么出现检测不到的差错的概率就很小很小。
另一种更方便的方法就是用多项式来表示循环冗余检测检验过程。具体见教材P75。