1.功能
数据链路层:把网络层交下来的数据构成帧发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。数据链路层的三个基本问题:
1.1 封装成帧¶
在一段数据的前后分别添加头部和尾部,这样就构成了一个帧。首部和尾部一个最重要的作用就是**帧定界**。帧定界使用特殊的帧定界符SOH(Start of Header,ASCII码0x01)、EOT(End of Transmission,ASCII码0x04)。当数据在传输中出现差错时,帧定界符的作用更加明显。假定发送端在尚未发送完成一个帧时突然出故障,终止发送,但随后又恢复正常,于是重新从头开始发送刚才未发送完的帧。由于使用了帧定界符,在接收端就知道前面收到的数据是个不完整的帧,必须丢弃,而后面收到的数据有明确的帧定界符,因此是一个完整的帧,应当收下。
1.2 透明传输¶
表示对于上层交付的数据,无论出现什么样的比特组合,都能够被正确传输,解决透明传输问题可以防止数据中的字节与帧定界符混淆。采用的方法是字符填充/字节填充方法,发送端的数据链路层在数据中出现控制字符的前面插入一个转义字符ESC(0x1B),而在接收端的数据链路层在数据送往网络层之前删除插入的转义字符,如果转义字符也出现在数据中,那么就在转义字符前面插入一个转义字符。
1.3 差错控制¶
在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate)。为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。
- 自动重传请求(Automatic Retransmission Request,ARQ):
接收端检测出差错时,就设法通知发送端重发,请求发送方重传出错的数据帧来恢复出错的帧,直到收到正确的码字为止。
- 前向纠错(Forward Error Correction,FEC):
接收端不但能发现差错,而且能确定二进制数码的差错位置,从而加以纠正。