一、区分“链路”与“数据链”
首先明确一下“链路”和“数据链路”并不是一回事。
所谓链路,指的是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。
数据链路除了必须有一条物理线路以外,还必须有一些必要的通信协议来控制这些数据的传输。若把这些协议的硬件和软件加到链路上,就构成了数据链路。
二、数据链路层使用的信道主要有以下两种类型:
(1)点对点信道
(2)广播信道
三、单位
点对点信道的数据链路层的协议数据单元为帧。
四、点对点信道的数据链路层在进行通信时的主要步骤:
(1)结点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧。
(2)结点A把封装好的帧发送给结点B的数据链路层。
(3)若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报上交给上面的网络层;否则丢弃这个帧。
五、三个基本问题
封装成帧
封装成帧就是在一段数据的前后分别添加首部和尾部。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
一个帧的长度等于帧的数据部分长度加上帧首部和帧尾部的长度。
每一种链路层协议都规定了所能传送的帧的数据部分长度上限——最大传送单元MTU。
透明传输
由于帧的开始和结束标记是使用专门指明的控制字符( SOT和EOT),因此,所传输的数据中的任何8比特的组合一定不允许使用用作帧定界的控制字符,否则就会出现帧定界的错误。
为了解决透明传输的问题,就必须设法使数据中可能出现的控制字符在接收端不被解释为控制字符。具体方法是:发送端的数据链路层在数据中出现控制字符的前面插入一个转义字符(ESC)。而在接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符。
差错检测
比特在传输过程中可能会产生差错。
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER。为保证数据的可靠性,在计算机传输数据时,必须采用各种差错检测措施。目前数据链路层广泛使用了循环冗余检测CRC。
M长数据,n位冗余码计算:
用二进制的模2(不进位加法)运算进行2^n乘M的运算,这相当于在M后面添加n个0。得到的(k+n)位的数除以收发双方事先商定的长度为(n+1)的除数P,得出商是Q而余数是R。这个余数R就作为冗余码拼接在数据M的后面发送出去。
接收端把接收到的数据以帧为单位进行CRC检验:把收到的每个帧都除以同样的除数P(模2运算),然后检查得到余数P。
如果传输无差错,则CRC检验后得出的余数R一定是0.
注意:现在并没有要求数据链路层向网络层提供可靠传输服务。