1.封装成帧
封装成帧:就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。分组交换的一个重要概念:就是所有在因特网上传送的数据都是以分组(即ip数据报)为传送单位。网络层的ip数据报传送到数据链路层就成为帧的数据部分。在帧的数据部分的前面和后面分别添加上首部和尾部,就构成了一个完整的帧。帧长等于数据部分长度加上帧首部和帧尾部的长度,而首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限)。首部和尾部还包含许多必要的控制信息,在发送帧时,是从帧首部开始发送。各种数据链路层协议都要对帧首部和帧尾部的格式有明确的规定。为了提高帧的传输效率,应当使帧的数据部分长度尽可能大于首部和尾部的长度。但是,每一种链路层协议都规定了帧的数据部分的长度上限▁最大传送单元MTU(Maximum Transfer Unit)。
当数据是由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符。
控制字符SOH(start of header)放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT(end of transmission)表示帧的结束。他们的十六进制编码分别是01(二进制是00000001)和04(00000100)。
当数据在传输中出现差错时,帧定界符的作用更加明显。假定发送端在尚未发完一个帧时突然出现故障,中断了发送。但随后很快又恢复正常,于是重新从头开始发送刚才未发送完的帧,由于使用了帧定界符,在接收端就知道前面收到的数据是个不完整的帧(只有首部SOH,没有传输结束符EOT),必须丢弃。而后面收到的数据有明显的帧定界符(SOH和EOT),因此这是一个完整的帧,应当收下。
2.透明传输,用字节填充法解决透明传输的问题(ESC转义字符)。
3,差错检测
差错检测:可分为两大类,一类就是最基本的比特差错,另一类就是收到的帧并没有出现比特错误,但却出现了帧丢失、帧重复或帧失序。
比特差错:就是比特在传输过程中可能会产生差错,即1可能会变成0,0可能会变成1。比特差错是传输差错中的一种。
误码率BER(Bit Error Rate):就是在一段时间内,传输错误的比特占传输比特总数的比率。例如,误码率为10^(-10)时,表示平均每传送10^10个比特就会出现一个比特的差错。误码率与信噪比有很大的关系,如果提高信噪比,就可以使误码率减小。
问题:实际的通信链路并非理想的,它不可能是误码率下降到零。
问题分析:为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用葛总检测措施。
解决方法:目前在数据链路层广泛使用了循环冗余检验CRC(Cyclic Redundancy Check)的检测技术。
注:在数据链路层使用CRC检验,能够实现无比特差错的传输,但这还不是可靠传输。
补充:OSI的观点是必须把数据链路层做成是可靠传输的,因此在CRC检测基础上,增加了帧编号、确认和重传机制。收到正确的帧就要向发送端发送确认。发送端在一定的期限内若没有收到对方的确认,就认为出现了差错,因而就进行重传,知道收到对方的确认为止。
这种方法在历史曾经祈祷很好的作用,但现在的通信线路的质量已经大大提高了,由通信链路质量不好引起差错的概率已经大大降低。
英特网广泛使用的数据链路层协议都不适用确认和重传机制,即不要求数据链路层向上层提供可靠传输的服务(因为这要付出的代价太高,不合算)。如果在数据链路层传输数据时除了差错并且需要进行改正,那么改正差错的任务就由上层协议(如,运输层tcp协议)来完成。实验证明,这样可以提高通信效率。