

数据链路层功能及成帧
链路(link)是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。
一条链路只是一条通路的一个组成部分。
数据链路(data link) 除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
使用网卡来实现这些协议的硬件和软件。
网卡包括了数据链路层和物理层的功能。
成帧是将数据组合成数据块(帧);
差错控制是控制帧在物理信道上的传输,包括如何处理传输差错;
流量控制是调节发送速率使之与接收方相匹配;
链路管理是在两个网路实体之间提供数据链路通路的建立、维持和释放管理。
注意:物理层的传输单位是二进制位(bit),而数据链路层是以帧(Frame)为传输单位,而且是在LAN内节点之间的传输。(如果传输数据时经过中间节点,那就是广域网,存在路由选择问题,这是网络层考虑的问题)。
封装成帧

封装成帧就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。确定帧的界限。
(1)一旦数据在传输时出错,只需重传或纠正有错的帧,而不必重发全部数据,从而提高效率;
(2)报文不分割整个传输,出错概率较大;分成若干帧后,较小的帧出错概率也小;
(3)检查一个短帧的错误要比检查一个大的报文传输错误要容易,算法也要简单。
帧同步
帧同步是指为了能让接收方收到的比特流中明确区分出一帧,发送方必须要建立和区分出帧的边界(起始和终止),方法是在帧的开始和结束位置增加一些特殊的位组合来实现。
常用的帧同步方法有下面几种:

透明传输
透明传输:不管从键盘上输入什么字符都可以放在帧中传输过去。

字符填充法
控制字符“SOH”或“EOT”前面插入一个转义字符“ESC”(1B)。
接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。

零比特填充

差错控制编码
循环冗余校验码
基本思路:收发双方约定好,使用同一个生成多项式G(x)的系数做除法运算,得出的余数作为冗余位,然后将冗余位作为附加位放在二进制序列后传输,实现差错检查的目的。
在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术。
循环冗余校验码(CRC)是一种最常用的检错码。它通过在信息位的后面附加一串冗余比特实现。方法是将要发送的二进制比特序列当作一个多项式F(x)的系数,发送端用双方预先约定的G(x) 生成多项式对应的比特序列去除,(F(x)对应的比特序列后要加上n个0,n是一个比G(x) 生成多项式对应的比特序列的位数减1的数),求得一个余数多项式,它就是循环冗余校验码,然后将它附加在放在信息位的后面组成CRC码进行传输。在接收端,用同样的G(x)去除接收到的比特序列,若能被其整除,表示传输正确,否则表示有错。

运算时需要注意以下两点:
(1)运算都是模2运算,即“异或”运算
(00=0;11=0;01=1;10=1)。
(2)多项式F(x)比特序列后加了4个0,所以冗余位也要是4位。如果余数为“10”,那么冗余位是“0010”。
本例余数为1010,它就是冗余码。因此,发送方传输前需要将冗余码“1010”附加到信息“1011001”之后,因此实际传输的CRC码为“10110011010”。
(1) 若得出的余数 R = 0,则判定这个帧没有差错,就接受。
(2) 若余数 R 0,则判定这个帧有差错,就丢弃。
但这种检测方法并不能确定究竟是哪一个或哪几个比特出现了差错。
只要经过严格的挑选,并使用位数足够多的除数 P,那么出现检测不到的差错的概率就很小很小。
帧检验序列 FCS
在数据后面添加上的冗余码称为帧检验序列 FCS 。
循环冗余检验 CRC 和帧检验序列 FCS并不等同。
CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。
FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法。
应当注意
仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受。
凡是接受的帧(即不包括丢弃的帧),都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错
也就是说:“凡是接收端数据链路层接受的帧都没有传输差错”(有差错的帧就丢弃而不接受)。
要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制。

