本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1. 数据链路层概述
链路是从一个结点到相邻结点的一段物理线路,数据链路则是在链路的基础上增加了一些必要的硬件(如网络适配器)和软件(如协议的实现)。
- 网络中的
主机、路由器等实现数据链路层。
-
局域网中的
主机、交换机等实现数据链路层。 -
从层次上来看
数据的流动
- 仅从
数据链路层观察帧的流动
- 数据链路层
以帧为单位进行数据传输
(1)、数据链路层的信道
- 点对点信道:使用的是
一对一的点对点方式。 - 广播信道:使用的是
一对多的通信方式,因此必须要使用共享信道协议来协助这些主机的数据发送。
(2)、封装成帧
封装成帧 (framing): 就是数据链路层对上一层传输下来的数据的前后分别添加首部和尾部,然后就构成了一个帧。
首部和尾部的一个重要作用就是进行帧定界。
(3)、差错检测
现象:在传输过程中可能会产生比特差错:1 可能会变成 0, 而 0 也可能变成 1。
(4)、可靠传输
不可靠传输:如果接收方发现接收到的数据有误码,就直接将其丢弃掉。
可靠传输:发送方发送什么,接受方就接受到什么。
(5)、广播信道
- 如图所示,主机A,B,C,D,E通过一根总线进行互连,主机A要给主机C发送数据,代表帧的信号会通过总线传输到总线上的其他各主机,那么主机B,D,E如何知道所收到的帧不是发送给她们的,主机C如何知道发送的帧是发送给自己的
解决方案:将
帧的目的地址添加在帧中一起传输。
- 下面是数据碰撞问题
在 有线(局域网)领域使用
点对点链路和链路层交换机的交换式局域网取代了共享式局域网。在无线局域网中仍然使用的是共享信道技术。
2. 封装成帧
(1)、封装成帧
1. 封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
2. 帧的发送过程
发送方的数据链路层将上层交付下来的协议数据单元封装成帧后,还要通过物理层,将构成帧的各比特,转换成电信号交给传输媒体,那么接收方的数据链路层如何从物理层交付的比特流中提取出一个个的帧?
需要
帧头和帧尾来做帧定界,帧头和帧尾中包含有重要的控制信息。
3. 但比不是每一种数据链路层协议的帧都包含有帧定界标志
前导码解释:
- 前同步码:作用是
使接收方的时钟同步。 - 帧开始定界符:表明其后面紧跟着的就是MAC帧
因为
帧之间的间隔时间为96比特时间,因此MAC帧不需要帧结束定界符。
(2)、透明传输
1. 基本概念
透明传输是指数据链路层对上层交付的传输数据没有任何限制,好像数据链路层不存在一样。
2. 存在的问题
帧界定标志也就是个特定数据值,如果在上层交付的协议数据单元中, 恰好也包含这个特定数值,接收方就不能正确接收。
如下图所示
解决方案
-
解决方法:
面向字节的物理链路使用字节填充 (byte stuffing)或字符填充 (character stuffing),面向比特的物理链路使用比特填充的方法实现透明传输。 -
发送端的数据链路层在数据中出现
控制字符的前面插入一个转义字符“ESC”(其十六进制编码是1B)。 -
接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。 -
如果
转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
字符填充
比特填充
(3)、帧的长度说明
- 为了提高帧的传输效率,我们应
适当增大帧的数据部分的长度。 - 考虑到差错控制等多种因素,每一种
数据链路层协议都规定了帧的数据部分的长度上限。即最大传送单元MTU。
3. 差错检测
现象:在传输过程中可能会产生比特差错:1 可能会变成 0, 而 0 也可能变成 1。
差错检测:使用差错检测码来检测数据在传输过程中是否产生了比特错误,是数据链路层所要解决的重要问题之一。
(1)、奇偶校验码
在待发送的数据添加一位奇偶检验位。使得数据部分的“1”的个数为奇数(奇校验)或者偶数(偶校验)。
如果奇数个位发生误码,则奇偶性发生改变,可以检测出误码。
如果偶数个位发生误码,则奇偶性未发生改变,不可以检测出误码。
(2)、CRC循环冗余校验码
- 收发双方
约定好一个生成多项式 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输的数据后面。接收方通过生成多项式来计算收到的数据是否发生了误码。
(3)、局限性
- 检错码
只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。 要想纠正传输中的错误,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中很少使用。循环冗余校验码CRC有很好的检错能力,虽然计算比较复杂,但非常易于使用硬件实现,因此被广泛应用于数据链路层。
循环冗余校验 CRC 是一种检错方法,而
帧校验序列 FCS是添加在数据后面的冗余码。
4. 可靠传输
不可靠传输:如果接收方发现接收到的数据有误码,就直接将其丢弃掉。
可靠传输:发送方发送什么,接受方就接受到什么。
比特差错只是传输差错中的一种。- 传输差错还包括
分组丢失、分组失序以及分组重复。
(1)、分组丢失
路由器输入队列快满了,主动丢弃收到的分组。
(2)、分组失序
数据并未按照发送顺序依次到达接收端
(3)、分组重复
由于某些原因,有些
分组在网络中滞留了,没有及时到达接收端,这可能会造成发送端对该分组的重发留在网络的分组也到达了接收端,重发的分组到达接收端,但一段时间后,滞留在网络的分组也到达了接收端,这就造成分组重复的传输差错。
5. 可靠的传输协议
维护可靠传输的协议。
5.1 停止-等待协议SW
1. 协议解释
当发送方
发送一个数据分组给接收方时,发送方就会停止发送下一个数据分组并且等待接受方的ACK确认分组,如果接受方发现所接受的分组含有误码的话,接收方会将其丢弃或者严重的话会发送NAK确认分组。如果是将其丢弃的话,当发送方的超时重传计时器的时间超过了超时重传时间,发送方就会进行对该分组进行重新发送。如果是接受到NAK确认分组或者ACK确认分组丢失,发送方就会进行对该分组进行重新发送。接受方和发送方都是只有一个窗口大小为1的窗口。
图示说明
为了
防止分组重复,我们需要对分组进行标号。
2. 信道利用率
-
TD:是发送方发送数据分组所耗费的发送时延
-
RTT:是收发双方之间的往返时间
-
TA:是接收方发送确认分组所耗费的发送时延
3. 缺点
- 当
往返时间RTT大于数据帧发送时延时,信道利用率极低 - 如果
出现超时重传,数据利用率还要降低
5.2 回退N帧协议GBN
1. 协议解释
回退N帧协议是指
发送方有一个发送窗口,发送窗口的容量为0~7,且分组被编号为0 ~ 7,而接收方只有一个接受窗口(窗口大小为1)。发送方可以发送多个分组,但是接收窗口每次只能接受一个分组。当分组丢失或者分组发生误码。那么该分组之后的所有分组都需要重传。
2. 无差错的情况
发送方发送了多个分组,只有接收到了接收方的相应的ACK确认分组时,该窗口才会向前移动。而接受方可以对前面的所有分组进行挨个确认,也可以进行累计确认。累计确认就是对按序到达的分组的最后一个进行确认即可。
3. 有差错的情况
如果发送方所发送的分组在
中途丢失、分组中有误码被丢弃或者确认分组丢失,那么发送方就会超时重传,并且该分组之后的所有分组也会被重传。
4. 发送窗口大小说明
如果发送窗口的大小超过最大值的话,会导致接收方无法辨认新旧数据分组。
5.3 选择重传协议SR
1. 协议解释
该协议中的
发送方的窗口可以发送多个数据分组(窗口大小为1 ~ 4),由于回退N帧协议的接收窗口大小为1,所以当发生差错的时候需要进行回退操作进行重传,效率就很低。而该协议中的接收窗口的大小(大于1小于等于发送窗口,如果是1的话,就相当于回退N帧协议),而且接收方必须对接受的分组进行挨个确认。无差错的情况,发送方在接收到相应的确认分组后会才会进行窗口的移动,而有差错的情况,发送方只会对相应的未接受到确认分组的分组进行重传,不需要进行回退。
2. 无差错的情况
无差错的情况,发送方在接收到相应的确认分组后会才会进行窗口的移动
3. 有差错的情况
有差错的情况,发送方只会对相应的未接受到确认分组的分组进行重传,不需要进行回退。
4. 相关说明
6. 点对点协议PPP
1. 点对点协议PPP
数据链路层使用的一种协议,它的特点是:简单;只检测差错,而不是纠正差错;不使用序号,也不进行流量控制;可同时支持多种网络层协议。
2. 主要链路层协议
PPPoE 是为宽带上网的主机使用的链路层协议。
3. 相关的帧格式
主要字段:
- 标志字段:PPP帧的定界符,取值为0x7E
- 地址字段:取值为0xFF,预留
- 控制字段:取值为0x03,预留
- 帧检验序列字段:CRC计算出的校验位
4. 透明传输
透明传输的实现方式
- 面向字节的异步链路:字节填充法(插入“转义字符”)
在相关的字符前加上转义字符
- 面向比特的同步链路:比特填充法(插入“比特0”)
发送方在五个连续的1后面加上0
接收方在将五个连续的1后面的0删除
5. 差错检测
接收方对接收到的有误码的数据分组直接丢弃。
7. 媒体接入控制
共享信道需要着重解决的问题是如何协调多个发送和接受站点对一个共享传输媒体的占用,即媒体介入控制MAC。
1. 媒体介入控制
静态划分信道
- 频分复用
- 时分复用
- 码分复用
动态接入控制
-
受控接入(被淘汰)
- 集中控制
- 分散控制
-
随机接入
8. 信道复用技术
(1)、频分复用
-
将
整个带宽分为多份,用户在分配到一定的频带后,在通信过程中自始至终都占用这个频带。 -
频分复用的
所有用户在同样的时间占用不同的带宽资源(请注意,这里的“带宽”是频率带宽而不是数据的发送速率)。
(2)、时分复用
-
时分复用则是
将时间划分为一段段等长的时分复用帧(TDM帧)。每一个时分复用的用户在每一个 TDM 帧中占用固定序号的时隙。 -
每一个
用户所占用的时隙是周期性地出现(其周期就是TDM帧的长度)的。 -
TDM 信号也称为等时 (isochronous) 信号。 -
时分复用的
所有用户在不同的时间占用同样的频带宽度。
时分复用可能会造成线路资源的浪费,使得用户对分配到的子信道的利用率一般是不高的。
(3)、统计时分复用
(4)、波分复用
(5)、码分复用
-
常用的名词是码分多址 CDMA (Code Division Multiple Access)。
-
各用户使用经过特殊挑选的不同码型,因此彼此不会造成干扰。 -
这种系统发送的信号
有很强的抗干扰能力,其频谱类似于白噪声,不易被敌人发现。
9. CSMA/CD协议
(1)、协议的工作原理
- 多址接入MA:表示
许多主机以多点接入的方式连接在一根总线上。 - 载波监听CS:是指每一个站在
发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。
- 碰撞检测:每一个正在发送数据的站,一旦发现总线上
出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送。
总的工作原理图
发送过程
接受过程
(2)、争用期
发送的主机
最多经过以太网的端到端的往返的传播时间2t就可以检测到碰撞,所以该时间被称为争用期。
(3)、最小帧长
当一个主机
发送完毕后,但中途发生了碰撞而发送方又发送完毕导致了该帧不能重传,因此设置了最小帧长为64字节。在碰撞之前该帧还未发送完毕。因此凡是小于64字节的帧都是无效帧。
(4)、最大帧长
帧的长度不能过大,否则会导致总线一直处于忙碌状态,而导致其他主机不能发送帧。
(5)、信道利用率
(6)、重要性
-
使用 CSMA/CD 协议的以太网不能进行全双工通信而
只能进行双向交替通信(半双工通信)。 -
每个站在
发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。 -
这种发送的不确定性
使整个以太网的平均通信量远小于以太网的最高数据率。
现在的以太网
基于交换机和全双工连接,不会有碰撞,因此没有必要使用CSMA/CS协议。
10. CMSA/CA协议
无线局域网使用的协议。
(1)、协议工作原理
源站点在发现信道空闲时再经过一个DIFS时间间隔后发送第一个数据帧,然后目的站点接受到该数据帧后经过一个SIFS再进行发送确认帧。如果其他站点发现信道繁忙就会使用退避算法进行退避,当发现信道空闲并且经过了一个DIFS时间间隔后就会进行发送该帧,然后其他站点检测到该信道繁忙,就会冻结退避时间计时器,然后再次等待到相应的空闲状态进行倒计时。
图示说明
- 源站为什么在检测到信道空闲后还要再等待一段时间DIFS?
考虑到可能有其他的站有高优先级的帧要发送。若有,就要让高优先级帧先发送
- 目的站为什么正确接收数据帧后还要等待一段时间SIFS才能发送ACK帧?
SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧,在这段时间内,一个站点应当能够从发送方式切换到接收方式。
- 信道由忙转为空闲且经过DIFS时间后,还要退避一段随机时间才能使用信道?
防止多个站点同时发送数据而产生碰撞。
(2)、信道预约和载波监听
- 为什么要进行信道预约呢?
数据帧较大,所以发生碰撞的概率较大,且产生的开销也大。而
RTS帧和CTS帧相对较小,所以碰撞的概率较小,且碰撞产生的开销也较小,所以会首先进行信道预约。
11. MAC地址
MAC地址是以太网的MAC子层所使用的地址,属于数据链路层的范畴,又称物理地址或者硬件地址。
- 使用
点对点信道的数据链路层不需要使用地址
- 使用
广播信道的数据链路层必须使用地址来区分各主机
- 在每个主机
发送的帧中必须携带标识发送主机和接受主机的地址。由于这类地址是用于媒体接入控制MAC,因此这类地址被称为MAC地址。
- 严格来说,
MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
(1)、单播
发送方会在将自己的MAC地址填入源地址,将所要接受的主机的MAC地址填入目的地址。接收方收到后会进行比对,如果和自己的MAC地址相同就进行接受,如果不同就丢弃。
(2)、广播
发送方在帧首部中的目的地址字段填入广播地址,也就是十六进制的全F,源地址字段填入自己的MAC地址。
(3)、多播
12. IP地址
IP地址是TCP/IP体系结构网际层所使用的地址,属于网络层的范畴。
IP地址是因特网上的主机和路由器所使用的地址,用于标识两部分信息
- 网络编号:
标识因特网上的数以百万计的网络。 - 主机编号:
标识同一网络上不同主机(或路由器)。
相关说明:
- 如果只是
一个单独的网络,不接入因特网,可以只是使用MAC地址 - 如果主机所在的网络
要接入因特网,则IP地址和MAC地址都需要。
(1)、数据包转发过程中IP地址与MAC地址的变化情况
源IP地址和目的IP地址保持不变源MAC地址和目的MAC地址逐个链路(或逐个网络)改变。
13. ARP协议(地址解析协议)
(1)、相关说明
ARP协议属于TCP/IP体系结构的网际层,其作用是已知设备所分配到的IP地址,可以通过IP地址获取到该设备的MAC地址。属于网络层范畴。
(2)、协议的工作原理
源主机在自己的ARP高速缓存表中查找目的主机的IP地址所对应的MAC地址,如果找到了,则可以封装MAC帧进行发送;如果找不到,则发送ARP请求(封装到广播MAC帧中)。目的主机收到ARP请求后,将源主机的IP地址和MAC地址记录到自己的ARO高速缓存表中,然后给源主机发送ARP响应(封装在单播MAC帧中),ARP响应中含有目的主机的IP地址和MAC地址。源主机收到ARP响应后,将目的主机的IP地址与MAC地址记录到自己的高速缓存表中,然后就可以封装之前想发送的MAC并发送给目的主机。
(3)、ARP的作用范围
逐段网络或逐个网络使用
14.集线器和交换机的区别
(1)、集线器
被集线器连接在一起的主机,如果一个主机发送单播帧,那么会传送给该集线器上的其他各主机。如果是发送广播帧,那么会传送给该集线器上的其他各主机。如果是多个主机一起发送帧会产生碰撞。集线器扩大了广播域,也同时扩大了碰撞域。
(2)、交换机
交换机可以将多个较小的以太网连接成一个更大的以太网。
被交换机连接在一起的主机,如果一个主机发送单播帧,那么会传送给相应的目的主机。如果是发送广播帧,那么会传送给该交换机的其他各主机。交换机扩大了广播域,但隔离了碰撞域。
(3)、图示说明
15. 以太网自学习和帧发送的过程
假设以太网交换机的帧交换表为空,且各主机都知道其他主机的MAC地址,当有帧来交换机时,交换机都会对该帧进行登记以完善此交换机的帧交换表,此过程为以太网交换机的自学习的过程。然后再查找该帧交换表进行帧发送,如果帧交换表上没有相应的记录就会进行盲目转发(泛洪)。当相应的主机发来了响应帧,交换机同时会对其进行记录。 每条记录都有自己的有效时间,到期自动删除。 因为MAC地址与接口的映射关系不是永久性的。
16. 生成树协议(STP)
(1)、如何提高以太网的可靠性?
添加冗余链路。但会造成网络环路。
网络环路带来的问题
- 广播风暴
- 主机收到重复的广播帧
- 交换机的帧交换表震荡
(2)、生成树协议(STP)
协议原理:
-
不论交换机之间采用怎样的物理连接,交换机都能够
自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路) -
最终生成树的树型逻辑拓扑要
确保整个网络连通。
17. 虚拟局域网VLAN
(1)、为什么要引入虚拟局域网VLAN?
- 以太网交换机工作在
数据链路层(也包括物理层) - 使用
一个或者多个以太网交换机互连起来的交换式以太网,其所有站点属于一个广播域。 - 随着广播域的增大,会带来很多弊端:
广播风暴、难以管理和维护、潜在的安全问题。
路由器可以隔离广播域,但是成本高。
(2)、虚拟局域网VLAN
概念
是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求。每一个VLAN是一个广播域。
(3)、相关的实现机制
虚拟局域网VLAN技术是在交换机上实现的,需要交换机能够实现以下功能
-
能够处理
带有VLAN标记的帧——IEEE 802.1 Q帧 -
交换机的各端口可以支持不同的端口类型,不同端口类型的端口对帧的处理方式有所不同。
1.Access端口: 交换机与用户计算机之间的互连
2.Truck端口: 交换机之间或交换机与路由器之间的互连
3.Hybrid端口: 用于交换机之间或者交换机与路由器之间的互联,也可用于交换机与用户计算机之间的互连。