一、封装成帧
封装成帧是数据链路层的一个基本问题。数据链路层把网络层交下来的数据构成帧发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。封装成帧就是在一段数据的前后分别添加首部和尾部,构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。这样的帧就是数据链路层的数据传输单元。一个帧的帧长等于帧的数据部分加上帧首部和帧尾部的长度。首部和尾部的一个重要作用就是进行帧定界(确定帧的界限),同时它们还包括许多必要的控制信息。
二、透明传输
透明传输也是数据链路层的一个重要问题。当传送的帧是用文本文件组成的帧时(文本文件中的字符都是从键盘上输入的),其数据部分显然不会出现像SOH(帧起始符)或EOT(帧结束符)这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,因此这样的传输就是透明传输。
然而,如果数据中的某个字节的二进制代码恰好和SOH或EOT这种控制字符一样,数据链路层就会错误地"找到帧的边界",把部分帧收下(误以为是个完整的帧),而把剩下的那部分数据丢弃(这部分找不到帧定界控制字符SOH)。为了解决透明传输问题,就必须设法使数据中可能出现的控制字符在接收端不被解释为控制字符。具体的方法是:发送端的数据链路层在数据中出现控制字符的前面插入一个转义字符,而在接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充或字符填充。
三、差错控制
比特在传输过程中可能会产生差错,1可能会变成0,而0也可能会变成1,这就叫做比特差错。比特差错是传输差错中的一种。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)。
实际的通信链路并非是理想的,它不可能使误码率下降到零。为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用差错检测措施。目前在数据链路层广泛使用了循环冗余检验CRC(Cyclic Redundancy Check)的检错技术。CRC运算就是在数据M的后面添加供差错检测用的n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。在接收端把接收到的数据以帧为单位进行CRC检验:把收到的每一个帧都除以同样的除数P(模2运算),然后检查得到的余数R。若得出的余数R=0,则判定这个帧没有差错,就接受。若得出的余数R≠0,则判定这个帧有差错,就丢弃。
然而,仅用循环冗余检验CRC差错检测技术只能做到无差错接受,即凡是接收端数据链路层接受的帧,都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错。接收端丢弃的帧虽然曾收到了,但最终还是因为有差错被丢弃,即没有被接收。单纯使用CRC差错检测技术不能实现"无差错传输"或"可靠传输"。要实现"无差错传输",就必须再加上确认和重传机制。
总结
综上所述,封装成帧、透明传输和差错控制是计算机网络数据链路层的几个共同问题。在设计和实现数据链路层协议时,需要充分考虑这些问题,以确保数据传输的可靠性和高效性。
结语
性格决定命运
气度影响格局
!!!