一、基本概念
节点:主机、路由器。
链路:网络中两个节点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。
数据链路:网络中两个节点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构成数据链路。
帧:链路层的协议数据单元,封装网络层数据报。
数据链路层:负责通过一条链路从一个节点向另一个物理链路直接相连的相邻节点传送数据报。
二、功能
1、为网络层提供服务:无确认无连接服务、有确认无连接服务、有确认面向连接服务。
2、链路管理,即连接的建立、维持、释放。
3、组帧。
4、流量控制。
5、差错控制。
三、封装成帧
封装成帧就是在一段数据的前后部分添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
首部和尾部包含许多的控制信息,它们的一个重要作用:帧定界(确定帧的界限)。
组帧的四种方法:字符计数法、字符填充法、零比特填充法、违规编码法。
四、透明传输
透明传输是指不管所传数据是什么样的比特组合,都应当能够在链路上传送(如:不管从键盘输入什么字符都可以放在这样的帧中传输过去)。因此,链路层就“看不见”有什么妨碍数据传输的东西。
控制字符:
SOH:放在帧的最前面,表示帧的首部开始。
EOT:表示帧的结束。
存在的问题:
如果数据中 的某个字节的二进制代码恰好和SOH或EOT这种控制字符一样,数据链路层会错误的找到帧的边界,而把剩下的数据丢弃。
1、问题解决方法:字符填充法。
为了解决这种问题,必须设法使数据中可能出现的假控制字符不被解释为控制字符。
字符填充法:在发送端的数据链路层在数据中出现假控制字符的前面插入一个转义字符“ESC”,
在接收端的数据链路层把数据送往网络层之前删除这个插入的转义字符。
五、差错检测
传输中的差错是由于噪声引起的。
全局性:1、由于线路本身电气特性所产生的随机噪声(热噪声),
解决办法:提高信噪比来减少或避免干扰(传感器方面)
局部性:2、外界特定的短暂原因所造成的冲击噪声,是产生差错的主要原因。
解决办法:通常利用编码技术解决。
差错:1、位错:比特在传输中可能1变成0,0变成1,为比特差错。
2、帧错:丢失、重复、失序。
1、差错检测方法:循环冗余检验CRC
CRC检验接收端收到的每一帧:
若得出的余数为0,则判定这个帧没有差错,就接收。
若得出的余数不为0,则判定这个帧有差错,就丢弃。
最终发送的数据 = 要发送的数据 + 帧检验序列FCS
计算冗余码:
1、加0:假设生成多项式G(X)的阶为r,则加r个0.
2、模2除法:数据加0后除以多项式,余数为冗余码(FCS、比特序列)
例1:
例2:
要发送的数据是1101 0110 11,采用CRC校验,生成多项式10011,那么最终发送的数据应该是?
答:
10011表示成多项式为X^4+X^1+1,阶为4。
(反过来也要会转换,1X^4+0X^3+0X^2+1X^1+1X^0 对应10011)
TIPS:多项式有n位,阶为n-1。
所以在数据后加4个0为:1101 0110 110000
1101 0110 110000模2除10011:同0异1
最后结果为11010110111110。
CRC能实现无比特差错的运输,但不是可靠性运输。
只能做到对帧的无差错接收:即凡是接收端数据链路层接受的帧,我们都能非常接近1的概率认为这些帧在传输过程中没有产生差错。