1 数据链路层的基本概念
链路是一条点到点的物理线路段,中间没有其他任何的交换节点。数据链路即除了物理线路外,必须还有通信协议来控制数据的传输,若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。现在最常用的方法是使用适配器(网卡)来实现这些协议的硬件和软件,而一般的适配器都包含了数据链路层和物理层这两层的功能。
2 数据链路层的信道类型
数据链路层的信道主要有以下两种类型:
- 点对点信道:采用一对一的点对点通信方式。
- 广播信道:使用一对多的广播通信方式,其连接的主机很多,必须采用专用的共享信道协议来协调这些主机的数据发送。
3 帧
帧是数据链路层的协议数据单元,点对点信道的数据链路层进行通信的步骤如下:
- 节点A的数据链路层把网络层交下来的 IP 数据报添加首部和尾部封装成帧。
- 节点A把封装好的帧发送给节点B的数据链路层。
- 若节点B的数据链路层收到的帧无差错,则从收到的帧中提取出 IP 数据报上交给上面的网络层;否则丢弃这个帧。
4 数据链路层的三个基本问题(1) – 封装成帧
网络层的 IP 数据报传送到数据链路层就成为帧的数据部分,在帧的数据部分的前面和后面分别添加上首部和尾部,就构成了一个完整的帧。而当接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
5 数据链路层的三个基本问题(2) – 透明传输
由于帧的开始和结束的标记是使用专门指明的控制字符,因此,所传输的数据中的任何八比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现错误。
当传送的帧是用文本文件组成的帧时,由于文本文件的字符都是从键盘上输入的,其数据部分显然不会出现像 SOH 或 EOT 这样的帧定界控制字符。透明传输是不管从键盘上输入什么字符都可以放在这样的帧中传输过去。
但是当数据部分是非 ASCII 的文本文件时(如计算机程序或图像),数据中就可能出现某个字节的二进制代码恰好和 SOH 或 EOT 一样,因此可能数据链路层会错误的找到帧的边界,然后把剩下的那部分数据丢弃。
至于解决方法,我们可以采用字节填充,如果发送端的数据链路层在数据中出现控制字符 SOH 或 EOT,那么我们可以在控制字符的前面插入一个转义字符 ESC,同时我们需要在接收端的数据链路层把数据送往网络层之前删除这个插入的转义字符。
6 数据链路层的三个基本问题(3) – 差错检测
差错检测可以分为两类,一类是比特差错(0可能变1,1可能变0),一类是没有比特错误但发生了帧丢失、帧重复或帧失序。
为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种检测措施,目前在数据链路层广泛使用了循环冗余检验 CRC(Cyclic Redundancy Check) 的检测技术。需要注意的是,在数据链路层使用 CRC 检验,能够实现无比特差错的传输,但这还不是可靠传输。
7 PPP 协议
PPP 协议是一个点对点链路控制协议,是为了在点对点物理链路上传输 OSI 模型中的网络层报文而设计的,在广域网中使用。其提供了同时的双向的全双工操作,并且假定数据包是按顺序投递的。
PPP 协议的帧格式如下:
下面是部分字段:
- 协议字段:协议字段不同,后面信息部分表示的数据类型不同。例如 0x0021 代表信息字段是 IP 数据报。
- 信息部分:注意长度不能超过1500字节 。
- FCS:使用 CRC 的帧校验序列
8 载波监听多点接入/碰撞检测 CSMA/CD
CSMA /CD 工作在数据链路层的广播信道,采用半双工通信,用于局域网。原理为在发送数据前先侦听信道是否空闲,若空闲,则立即发送数据。若信道忙碌,则等待一段时间至信道中的信息传输结束后再发送数据;若在上一段信息发送结束后,同时有两个或两个以上的节点都提出发送请求,则判定为冲突。若侦听到冲突,则立即停止发送数据,等待一段随机时间,再重新尝试。
如何理解载波监听多点接入/碰撞检测这个协议名称?
- 载波监听:表示检测信道。在发送数据前,发送数据中,每个站都要不断检测信道。
- 多点接入:因为是总线型的网络,许多计算机以多点接入的方式连接在一根总线上。
- 碰撞检测:边发送边监听,该协议在物理上是通过电压的变化来检测碰撞是否发生。
最早的以太网是将许多计算机都连接到一根总线上。在一条总线上,当其中一台计算机发送数据的时候,总线上的所有计算机都能检测到这个数据,这就是广播通信方式。
当我们需要在总线上进行一对一通信的时候,就需要使每一台计算机的网卡拥有一个与其他网卡都不同的地址。这个时候,我们在发送数据帧时,就需要表明数据帧接收站的地址。只有网卡地址与其相同时,才接受数据帧,否则丢弃帧。
CSMA/CD 协议的工作过程如下:
- 准备发送:适配器从网络层获得一个分组,加上以太网的首部和尾部,组成以太网帧,放入网卡的缓存中,但在发送之前,必须先检测信道。
- 检测信道:不停地检测信道,一直等待信道空闲,并在96比特时间内信道保持空闲(保证了帧间最小时间间隔),就发送这个帧。在发送过程中仍不停地检测信道,即网络适配器要边发送边监听。这里只有两种可能性:
2.1 发送成功:在争用期内一直未检测到碰撞,这个帧发送成功,回到步骤一。
2.2 发送失败:在争用期内检测到碰撞,这是立即停止发送数据,并按规定发送认为干扰信号。适配器接着就执行指数退避算法,等待r倍512比特时间后,返回到步骤二,继续检测信道。若重传16次仍不能成功,则停止重传向上报错。
9 MAC 地址
MAC 地址专于数据链路层,而 IP 地址工作在网络层。一般来说,通常 IP 地址是不断变化的,而MAC 地址是计算机的物理网卡唯一对应的地址,好比每个人都有唯一对应的身份证号码一样具有唯一性。
MAC 地址长度为48比特,分为前24位和后24位,其中前24位用于区分不同厂家,后24位则是厂家自己分配的。
那么 MAC 地址在网络通信过程中扮演了一个什么样的角色呢?事实上,我们经常使用 IP 地址和 MAC 地址相互搭配,将客户端的数据帧进行层层转发直到服务器接收此数据帧。在发起网络请求的时候,客户端向服务器发送请求数据帧,在数据帧中含有客户端 IP 地址与服务器 IP 地址等信息。那这个数据帧是如何一步步传递到服务器的呢?
其实是通过 MAC 地址将数据帧层层转发的,数据帧中除了 IP 地址以外,事实上还携带了客户端和将要转发到的交换机的 MAC 地址,通过 MAC 地址将数据帧从客户端传递到了交换机。类似的,交换机通过自己的 MAC 地址和下一个路由器的 MAC 地址,将数据帧发送到下一个路由器,以此类推,一直将数据帧传递到服务器上。
10 介质访问控制子层 MAC
MAC 即介质访问控制子层,是数据链路层的一个子层,在广播型网络中(以太网、WLAN),负责解决局域网内寻址和介质争用的问题。而在非广播型的网络,例如广域网中,其实是不存在这个问题的,因为点对点信道意味着节点是唯一的,不需要寻址,不需要争用。
MAC 主要负责 MAC 帧的装卸,维护 MAC 协议,比特流差错检测,MAC 寻址等功能。
11 MAC 帧
MAC 地址的帧格式如下:
对于物理层而言,数据链路层最终的结果就是 MAC 帧。
12 以太网
以太网可以看成是一种实现局域网通信的技术标准,是目前最广泛的局域网技术。为了通信的简便,以太网采用了无连接的工作方式,不必先建立连接就可以直接发送数据。因此,以太网提供的服务是不可靠的交付,而是尽最大努力的交付。
13 集线器
使用集线器可以在物理层扩展局域网。
优点如下:
- 使原来属于不同碰撞域的局域网上的计算机能够进行跨碰撞域的通信。
- 扩大了局域网覆盖的地理范围。
缺点如下:
- 碰撞域增大了,但总的吞吐量并未提高。
- 如果不同的碰撞域使用不同的数据率,那么就不能用集线器将它们互连起来。
14 网桥
网桥可以在数据链路层扩展局域网,它可以根据 MAC 帧的目的地址对收到的帧进行转发。网桥具有过滤帧的功能,当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的 MAC 地址,然后再确定将该帧转发到哪一个接口。
优点:
- 过滤通信量
- 扩大了物理范围
- 提高了可靠性
- 可互连不同物理层、不同 MAC 子层和不同速率(如10Mb/s 和 100 Mb/s 以太网)的局域网
缺点:
- 存储转发增加了时延
- 在 MAC 子层并没有流量控制功能
- 具有不同 MAC 子层的网段桥接在一起时时延更大
- 网桥只适合于用户数不太多(不超过几百个)和通信量不太大的局域网,否则有时还会因传播过多的广播信息而产生网络拥塞。这就是所谓的广播风暴。
15 交换机
交换机工作在数据链路层,实际上以太网交换机实质上就是一个多接口的网桥。
交换机可以存储数据帧,先接收的数据帧,先对其进行存储转发,可以全双工通信,带宽独享而不是共享。由于两台计算机之间的通信只需要经过交换机而不需要经过别的计算机,所以比较安全。而且,交换机可以学习 MAC 地址表,基于 MAC 地址转发数据。