数据链路层
数据链路层使用信道主要有两种类型:点对点信道、广播信道。
数据链路的概念:物理线路+通信协议,以及实现这些的硬件和软件
点对点信道的数据链路层通信步骤:
(1)结点A把网络层发下来的IP包加上首部和尾部封装成帧;
(2)A把帧发送到B的数据链路层
(3)若结点B收到帧无差错,则从帧中提取出IP包,发送到网络层,否则丢弃这个帧
无论数据链路层用什么协议,有三个基本问题:封装成帧、透明传输、差错检测
1 封装成帧
MTU最大传送单元,帧的数据部分的长度上限
使用SOH(十六进制0x01)和EOT(0x04)作为帧的起始和结束。
2 透明传输
如果帧的数据中出现EOT或SOH,那么会导致帧检测的错误,无法进行透明传输,解决这个问题的方法就是遇到SOH或EOT时就在前面加ESC转义字符,遇到ESC就前面再加,这样在接收时会检测ESC来保证正确的接收数据。
3 差错检测
传输过程中bit1变成了0,0变成了1,就是bit差错,这就有了误码率的概念,误码率与信噪比相关,信噪比越高误码率越低。
实际通信链路,误码率不可能为0,所以传输时必须采用各种差错检测措施。
目前广泛使用的就是CRC校验。
经过CRC校验后的数据可以认为接收无差错,但是并没有向网络层提供“可靠传输“服务,所谓“可靠传输“就是,数据链路层发送端发什么,接收端就接收到什么,现在解决了bit错误,但还有可能出现传输错误,例如帧丢失、帧重复、帧失序,这些事CRC无法校验的。
OSI的观点是必须保证数据链路层是可靠传输的,这就在CRC的基础上加上帧编号、确认、重传机制,但是现在因特网不使用确认和重传机制,不要求链路层为上层提供可靠传输,因为这样开销太大,改正错误的任务由上层协议(例如TCP)来完成。