一.数据链路层概述
数据链路层还没有牵扯到多个网络互连的问题,第三章主要研究的是在同一个局域网中,分组怎样从一个主机传送到另一个主机,中间并没有路由器的转发。
1.信道分类
点对点信道:
即一对一的通信方式。
广播信道:
即一对多的广播方式。
2.链路和数据链路
链路:
从一个节点到相邻节点的一段物理线路。中间没有任何的交换节点。
数据链路:
在链路上加上实现通信协议的硬件和软件就叫数据链路。
3.数据链路层的基本问题
(1)封装成帧:
发送方发送一段数据时,数据从应用层开始往下传输,每层对该段数据都会执行不同的操作,然后交付给下一层。
而数据链路层就是给网络层交付下来的数据单元添加帧首部和帧尾部将其封装成帧。如图:
这里有一个小概念:帧的数据部分长度上限,即最大传送单元MTU,这个MTU实际就是帧去掉帧头和帧尾的数据部分。也就是整个IP数据报(就是网络层协议数据单元)。
所以在后面进行网络层计算有关分片的问题时,要切记如果题目告诉的是MTU,要想获取IP数据包中的数据部分就需要减去固定首部。
(2)差错检测:
传输过程中可能会出现误码,比如比特0变成比特1。
发送方在发送之前,基于待发送的数据和检错算法计算出检错码。并封装在帧尾。接收方主机收到后,利用检错码和检错算法判断是否出现误码,此为差错检测。
目前数据链路层广泛使用了循环冗余检验CRC检错技术;除了CRC检验技术,奇偶校验也需要了解一下。
在此提醒两个检错技术的一些小细节:
首先是关于CRC检错技术,其中FCS指的是帧检验序列即添加在数据后面的冗余码,不要把它和CRC搞混。其次如果计算时告诉了接收到的数据,那么冗余码已经算出来了,冗余码的位数取决于除数P,从个数上来说即比P少一位,从二进制角度来说(二进制最低位是0),位数即是最高位。对除数P取余,余数为0就没有差错,反之则有,但无法精准判断错误。 最后就是除数P,一般除数P用多项式来表示,位置对应的是二进制位,1表示多项式中有X的对应该位的次方,0表示没有,在多项式中不写,最低位的1就表示1(因为在二进制中最低位就是0,x的0次方就是1)。比如1101,转换为多项式应该为。
其次是奇偶校验,奇偶校验无法检验偶数个错位。原因很简单,这种检错技术本来就是靠观察初始的比特和结果的比特的奇偶性是否一致来判断是否出错。如果有奇数个比特1,出现偶数个错误(即比特0变成比特1)时,那么结果还是奇数(因为奇数加偶数还是奇数)。同样地,如果有偶数个比特1,出现偶数个错误,结果还是偶数(因为偶数加偶数还是偶数)。简单来说,就是偶数个错位不会使奇偶性发生变化。由此可知,奇偶校验无法检验偶数个错位。
这两个检错技术都只能检错,但是无法纠错。
(3)透明传输/可靠传输(取决于所用教材和资料,谢希仁老师的教材是透明传输):
透明传输:
指数据链路层应该对上层传输的数据不加任何修改或解释,即上层发送的数据在传输过程中应该原封不动地传输到接收方,不添加额外的控制字符或其他转义机制。这样可以确保上层协议对传输的数据不受影响,使数据链路层的传输对上层来说是透明的。
可靠传输:
指数据链路层上的数据传输应该是可靠的,即保证数据能够正确无误地传送到接收方。为了实现可靠传输,数据链路层使用了各种差错检测和纠正技术,如循环冗余检验(CRC)、帧序列号和确认应答机制等。这些技术可以检测和纠正传输过程中出现的错误,以确保数据的完整性和准确性。