走进科学之计算机网络-数据链路层-硬核扫盲
继续硬核学习计算机网络系列!
本文承接:
本文的聚焦点主要在于数据链路层间数据的传输,事实上,在数据在两个节点间的传输,应该是发送端从应用层到物理层,中间以物理再到网络层,网络层到物理层,接收端从物理层到应用层这个过程的
数据链路层涉及的基本概念
数据链路层的信道类型
数据链路层使用的信道主要有以下两种类型:
- 点对点信道:这种信道使用一对一的点对点通信方式
- 广播信道:这种信道使用一对多的广播通信方式,因此过程比较复杂,广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送
链路与数据链路
链路(link):是一条点到点的物理线路段,中间没有任何其他的交换结点。
一条链路只是一条通路的一个组成部分。数据链路(data link) 除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
现最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件
帧
数据链路层传送单位的是帧
图中IP数据报是指经过网络层封装的数据。
三个基本问题
封装成帧
封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧,首部和尾部的一个重要作用就是进行帧定界
试想:帧还未发送完,发送端出了问题,只能重发该帧,接收端却收到了前面的“半截子帧”,它会抛弃吗?
答案当然是会的,在帧首位都会有开始符和结束符,如果接收端没有接收到结束符,自然会认定接收到的是一个无效帧
但是,如果数据段中有一段数据与结束符是一样的呢?接收端读取到的时候,判定是一个结束符,那这个帧一样是无效的,如何做?
解决方案-字节填充法
发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是 1B)
接收端的数据链路层在将数据送往网络层之前删除插入的转义字符
如果转义字符也出现数据当中,那么应在转义字符前插入一个转义字符。当接收端收到连续的两个转义字符时,就删除其中前面的一个
CRC差错检验
传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate),误码率与信噪比有很大的关系
为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施
循环冗余检验CRC
在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术
在发送端,先把数据划分为组。假定每组 k 个比特。假设待传送的一组数据 M = 101001(现在 k = 6)。我们在 M 的后面再添加供差错检测用的 n 位冗余码一起发送
收端对收到的每一帧进行 CRC 检验
若得出的余数 R = 0,则判定这