欢迎大家关注 github.com/hsfxuebao ,希望对大家有所帮助,要是觉得可以的话麻烦给点一下Star哈
1. 数据链路层概述
1.1 概述
链路是从一个结点到相邻结点的一段物理线路
,数据链路则是在链路的基础上增加了一些必要的硬件(如网络适配器)和软件(如协议的实现)
网络中的主机、路由器等都必须实现数据链路层
局域网中的主机、交换机等都必须实现数据链路层
从层次上来看数据的流动
仅从数据链路层观察帧的流动
链路(Link)
就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。数据链路(Data Link)
是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。数据链路层以帧
为单位传输和处理数据
主机H1 到主机H2 所经过的网络可以是多种不同类型的
注意:不同的链路层可能采用不同的数据链路层协议
数据链路层使用的信道
数据链路层属于计算机网路的低层。数据链路层使用的信道主要有以下两种类型:
- 点对点信道
- 广播信道
局域网属于数据链路层
局域网虽然是个网络。但我们并不把局域网放在网络层中讨论。这是因为在网络层要讨论的是多个网络互连的问题,是讨论分组怎么从一个网络,通过路由器,转发到另一个网络。
而在同一个局域网中,分组怎么从一台主机传送到另一台主机,但并不经过路由器转发。从整个互联网来看,局域网仍属于数据链路层的范围
1.2 三个重要问题
数据链路层传送的协议数据单元是帧
封装成帧
- 封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。
- 首部和尾部的一个重要作用就是进行帧定界。
差错控制
在传输过程中可能会产生比特差错:1 可能会变成 0, 而 0 也可能变成 1。
可靠传输
接收方主机收到有误码的帧后,是不会接受该帧的,会将它丢弃
如果数据链路层向其上层提供的是不可靠服务,那么丢弃就丢弃了,不会再有更多措施
如果数据链路层向其上层提供的是可靠服务,那就还需要其他措施,来确保接收方主机还可以重新收到被丢弃的这个帧的正确副本
以上三个问题都是使用点对点信道的数据链路层来举例的
如果使用广播信道的数据链路层除了包含上面三个问题外,还有一些问题要解决
如图所示,主机A,B,C,D,E通过一根总线进行互连,主机A要给主机C发送数据,代表帧的信号会通过总线传输到总线上的其他各主机,那么主机B,D,E如何知道所收到的帧不是发送给她们的,主机C如何知道发送的帧是发送给自己的
可以用编址(地址)的来解决
将帧的目的地址添加在帧中一起传输
还有数据碰撞问题
随着技术的发展,交换技术的成熟,
在 有线(局域网)领域 使用点对点链路和链路层交换机的交换式局域网取代了 共享式局域网
在无线局域网中仍然使用的是共享信道技术
2. 封装成帧
2.1 介绍
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧
- 帧头和帧尾中包含有重要的控制信息
发送方的数据链路层将上层交付下来的协议数据单元封装成帧后,还要通过物理层,将构成帧的各比特,转换成电信号交给传输媒体,那么接收方的数据链路层如何从物理层交付的比特流中提取出一个个的帧?
答:需要帧头和帧尾来做帧定界
但并不是每一种数据链路层协议的帧都包含有帧定界标志,例如下面例子
前导码
- 前同步码:作用是使接收方的时钟同步
- 帧开始定界符:表明其后面紧跟着的就是MAC帧
另外以太网还规定了帧间间隔为96比特时间,因此,MAC帧不需要帧结束定界符
2.2 透明传输
透明: 指某一个实际存在的事物看起来却好像不存在一样。
透明传输是指数据链路层对上层交付的传输数据没有任何限制,好像数据链路层不存在一样
帧界定标志也就是个特定数据值,如果在上层交付的协议数据单元中, 恰好也包含这个特定数值,接收方就不能正确接收
所以数据链路层应该对上层交付的数据有限制,其内容不能包含帧定界符的值
解决透明传输问题
- 解决方法:面向字节的物理链路使用字节填充 (byte stuffing) 或字符填充 (character stuffing),面向比特的物理链路使用比特填充的方法实现透明传输
- 发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC” (其十六进制编码是1B)。
- 接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
- 如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
帧的数据部分长度
- 为了提高帧的传输效率,应当
使帧的数据部分的长度尽可能大些
- 考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即
最大传送单元MTU(Maximum Transfer Unit)
2.3 总结
-
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
- 帧头和帧尾中包含有重要的控制信息。
- 帧头和帧尾的作用之一就是帧定界。
-
透明传输是指数据链路层对上层交付的传输数据设有任何限制,就好像数据链路层不存在一样。
-
面向字节的物理链路使用字节填充(回或称字符填充)的方法实现透明传输。
-
面向比特的物理链路使用比特填充的方法实现透明传输。
-
-
为了提高帧的传输效率,应当使
帧的数据部分的长度尽可能大些
。 -
考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即
最大传送单元MTU(Maximum Transfer Unit)
。
3. 差错检测
3.1 介绍
- 实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1。这称为
比特差错
。 - 在一段时间内,传输错误的比特占所传输比特总数的比率称为
误码率BER(Bit Error Rate)
。 - 使用
差错检测码
来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
3.2 奇偶校验
在待发送的数据后面添加1位奇偶校验位
,使整个数据(包括所添加的校验位在内)中“1”的个数
为奇数(奇校验)或偶数(偶校验)
- 如果有
奇数个位发生误码
,则奇偶性发生变化,可以检查出误码
: - 如果有
偶数个位发生误码
,则奇偶性不发生变化,不能检查出误码(漏检)
:
3.3 循环冗余校验CRC(Cyclic Redundancy Check)
- 收发双方约定好一个
生成多项式G(x)
: - 发送方基于待发送的数据和生成多项式计算出差错检测码(
冗余码
),将其添加到待传输数据的后面一起传输: - 接收方通过生成多项式来计算收到的数据是否产生了误码:
例题
3.4 总结
-
检错码
只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误
。 -
要想纠正传输中的差错,可以使用冗余信息更多的
纠错码进行前向纠错
。但纠错码的开销比较大,在计算机网络中较少使用。 -
循环冗余校验CRC
有很好的检错能力(漏检率非常低
),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层
。 -
在计算机网络中通常采用我们后续课程中将要讨论的
检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧
,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。
循环冗余校验 CRC 是一种检错方法,而帧校验序列 FCS 是添加在数据后面的冗余码
4. 可靠传输
4.1 基本概念
下面是比特差错
- 使用
差错检测技术
(例如循环冗余校验CRC),接收方的数据链路层就可检测出帧在传输过程中是否产生了误码(比特错误) - 数据链路层向上层提供的服务类型
不可靠传输服务:仅仅丢弃有误码的帧
,其他什么也不做:可靠传输服务:想办法实现发送端发送什么,接收端就收到什么
。
- 一般情况下,
有线链路的误码率比较低
,为了减小开销,并不要求数据链路层向上提供可靠传输服务
。即使出现了误码,可靠传输的问题由其上层处理。 无线链路易受干扰
,误码率比较高,因此要求数据链路层
必须向上层提供可靠传输服务
。
其他传输差错
- 比特差错只是传输差错中的一种。
- 从整个计算机网络体系结构来看,传输差错还包括
分组丢失、分组失序以及分组重复
。
4.1.1 分组丢失
路由器输入队列快满了,主动丢弃收到的分组
4.1.2 分组失序
数据并未按照发送顺序依次到达接收端
4.1.3 分组重复
由于某些原因,有些分组在网络中滞留了,没有及时到达接收端,这可能会造成发送端对该分组的重发,重发的分组到达接收端,但一段时间后,滞留在网络的分组也到达了接收端,这就造成分组重复的传输差错
4.1.4 总结
- 比特差错只是传输差错中的一种。
- 从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复。
分组丢失、分组失序以及分组重复
这些传输差错,一般不会出现在数据链路层,而会出现在其上层
。可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输
。
可靠传输的实现比较复杂,开销也比较大
,是否使用可靠传输取决于应用需求。
4.2 三种可靠协议
- 停止-等待协议SW
- 回退N帧协议GBN
- 选择重传协议SR
这三种可靠传输实现机制的基本原理并不仅限于数据链路层,可以应用到计算机网络体系结构的各层协议中
4.3 停止-等待协议
4.3.1 停止-等待协议可能遇到的四个问题
确认与否认
超时重传
确认丢失
既然数据分组需要编号,确认分组是否需要编号?
要。如下图所示
确认迟到
注意,图中最下面那个数据分组与之前序号为0的那个数据分组不是同一个数据分组
注意事项
-
接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。但对于误码率较高的点对点链路,为使发送方
尽早重传
,也可给发送方发送NAK分组 -
为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的停等特性,
只需1个比特编号
就够了,即编号0和1。 -
为了让发送方能够判断所收到的ACK分组是否是重复的,需要
给ACK分组编号
,所用比特数量与数据分组编号所用比特数量一样
。数据链路层一般不会出现。ACK分组迟到的情况,因此在数据链路层实现停止等待物议可以不用给ACK分组编号
。 -
超时计时器设置的
重传时间
应仔细选择。一般可将重传时间选为略大于“从发送方到接收方的平均性返时间”
。- 在数据链路层点对点的往返时间比较确定,重传时间比较好设定。
- 然而在运输层,由于端到端往返时间非常不确定,设置合适的重传时间有时并不容易。
4.3.2 停止-等待协议的信道利用率
假设收发双方之间是一条直通的信道
- TD:是发送方发送数据分组所耗费的发送时延
- RTT:是收发双方之间的往返时间
- TA:是接收方发送确认分组所耗费的发送时延
TA一般都远小于TD,可以忽略,当RTT远大于TD时,信道利用率会非常低
当往返时延RTT远大于数据帧发送时延TD时(例如使用卫星链路),信道利用率非常低
。- 若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低。
- 为了克服停止-等待协议信道利用率很低的缺点,就产生了另外两种协议,即后退N帧协议GBN和选择重传协议SR。
像停止-等待协议这样通过确认和重传机制实现的可靠传输协议,常称为自动请求重传协议ARQ(Automatic Repeat reQuest),意思是重传的请求是自动进行,因为不需要接收方显式地请求,发送方重传某个发送的分组
4.4 回退N帧协议GBN
4.4.1 为什么用回退N帧协议
在相同的时间内,使用停止-等待协议的发送方只能发送一个数据分组,而采用流水线传输的发送方,可以发送多个数据分组
回退N帧协议在流水线传输的基础上,利用发送窗口来限制发送方可连续发送数据分组的个数
4.4.2 无差错情况流程
发送方将序号落在发送窗口内的0~4号数据分组,依次连续发送出去
他们经过互联网传输正确到达接收方,就是没有乱序和误码,接收方按序接收它们,每接收一个,接收窗口就向前滑动一个位置,并给发送方发送针对所接收分组的确认分组,在通过互联网的传输正确到达了发送方
发送方每接收一个、发送窗口就向前滑动一个位置,这样就有新的序号落入发送窗口,发送方可以将收到确认的数据分组从缓存中删除了,而接收方可以择机将已接收的数据分组交付上层处理
4.4.3 累计确认
累计确认
优点:
- 即使确认分组丢失,发送方也可能不必重传
- 减小接收方的开销
- 减小对网络资源的占用
缺点:
- 不能向发送方及时反映出接收方已经正确接收的数据分组信息
4.4.4 有差错情况
例如
在传输数据分组时,5号数据分组出现误码,接收方通过数据分组中的检错码发现了错误
于是丢弃该分组,而后续到达的这剩下四个分组与接收窗口的序号不匹配
接收同样也不能接收它们,将它们丢弃,并对之前按序接收的最后一个数据分组进行确认,发送ACK4,每丢弃一个数据分组,就发送一个ACK4
当收到重复的ACK4时,就知道之前所发送的数据分组出现了差错,于是可以不等超时计时器超时就立刻开始重传,具体收到几个重复确认就立刻重传,根据具体实现决定
如果收到这4个重复的确认并不会触发发送立刻重传,一段时间后。超时计时器超时,也会将发送窗口内以发送过的这些数据分组全部重传
若WT超过取值范围,例如WT=8,会出现什么情况?
习题
总结
- 回退N帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送数据分组的数量,是
一种连续ARQ协议
- 在协议的工作过程中发送窗口和接收窗口不断向前滑动,因此这类协议又称为
滑动窗口协议
- 由于回退N帧协议的特性,当通信线路质量不好时,其信道利用率并不比停止-等待协议高
4.5 选择重传协议SR
回退N帧协议的接收窗口尺寸WR只能等于1
,因此接收方只能按序接收正确到达的数据分组
。- 一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大浪费。
- 为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸
WR不应再等于1(而应大于1)
,以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组
,等到所缺分组收齐后再一并送交上层。这就是选择重传协议
。
注意: 选择重传协议为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,而需要对每个正确接收到的数据分组进行逐一确认!
习题
总结
5. 点对点协议PPP
- 点对点协议PPP(Point-to-Point Protocol)是
目前使用最广泛的点对点数据链路层协议
- PPP协议是因特网工程任务组IEIF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC1661,RFC1662]
- 数据链路层使用的一种协议,它的特点是:简单;
只检测差错,而不是纠正差错;不使用序号,也不进行流量控制;可同时支持多种网络层协议
-
PPPoE 是为宽带上网的主机使用的链路层协议
-
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成:
- 对各种协议数据报的封装方法(封装成帧)
- 链路控制协议LCP: 用于建立、配置以及测试数据链路的连接
- ー套网络控制协议NCPs : 其中的每一个协议支持不同的网络层协议
5.1 帧格式
必须规定特殊的字符作为帧定界符
5.2 透明传输
必须保证数据传输的透明性
实现透明传输的方法
- 面向字节的异步链路:字节填充法(插入“转义字符”)
- 面向比特的同步链路:比特填充法(插入“比特0”)
5.3 差错检测
能够对接收端收到的帧进行检测,并立即丢弃有差错的帧。
5.3.1 工作状态
- 当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接。
- PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)。
- 这些分组及其响应选择一些 PPP 参数,并进行网络层配置,NCP 给新接入的 PC 机
- 分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机。
- 通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接。
可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。
6. 媒体接入控制(介质访问控制)——广播信道
媒体接入控制(介质访问控制)使用一对多的广播通信方式
Medium Access Control翻译成媒体接入控制,有些翻译成介质访问控制
局域网的数据链路层
-
局域网最主要的特点是:
- 网络为一个单位所拥有;
- 地理范围和站点数目均有限。
-
局域网具有如下主要优点:
- 具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
- 便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变。
- 提高了系统的可靠性、可用性和残存性。
数据链路层的两个子层
为了使数据链路层能更好地适应多种局域网标准,IEEE 802 委员会就将局域网的数据链路层拆成两个子层:
- 逻辑链路控制 LLC (Logical Link Control)子层;
- 媒体接入控制 MAC (Medium Access Control)子层。
与接入到传输媒体有关的内容都放在 MAC子层,而 LLC 子层则与传输媒体无关。 不管采用何种协议的局域网,对 LLC 子层来说都是透明的。
6.1 基本概念
为什么要媒体接入控制(介质访问控制)?
共享信道带来的问题
若多个设备在共享信道上同时发送数据,则会造成彼此干扰,导致发送失败。
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术
6.2 静态划分信道
信道复用
复用(Multiplexing)是通信技术中的一个重要概念。复用就是通过一条物理线路同时传 输多路用户的信号。当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用复用技术在一条 物理线路上建立多条通信信道来充分利用传输媒体的带宽。
频分复用FDM (Frequency Division Multiplexing)
- 将整个带宽分为多份,用户在分配到一定的频带后,在通信过程中自始至终都占用这个频带。
- 频分复用的所有用户在同样的时间占用不同的带宽资源(请注意,这里的“带宽”是频率带宽而不是数据的发送速率)。
时分复用TDM (Time Division Multiplexing)
- 时分复用则是将时间划分为一段段等长的时分复用帧(TDM帧) 。每一个时分复用的用户在每一个 TDM 帧中占用固定序号的时隙。
- 每一个用户所占用的时隙是周期性地出现(其周期就是TDM帧的长度)的。
- TDM 信号也称为等时 (isochronous) 信号。
- 时分复用的所有用户在不同的时间占用同样的频带宽度。
波分复用 WDM(Wavelength Division Multiplexing)
波分复用就是光的频分复用,使用一根光纤来同时传输多个光载波信号
光信号传输一段距离后悔衰减,所以要用 掺铒光纤放大器 放大光信号
码分复用 CDM (Code Division Multiplexing)
6.3 随机接入(CSMA/CD协议)
总线局域网使用协议:CSMA/CD
6.3.1 基本概念
最初的以太网是将许多计算机都连接到一根总线上。易于实现广播通信。当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件。
以太网(Ethernet) 是一种计算机 局域网技术 。IEEE组织的IEEE 802.3标准制定了以太网(Ethernet) 的技术标准
以太网采用无连接的工作方式,对发送的数据帧不进行编号,也不要求对方发回确认。目的站收到有差错帧就把它丢弃,其他什么也不做
6.3.2 多址接入MA
表示许多主机以多点接入的方式连接在一根总线上。
6.3.3 载波监听CS
是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。
总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号。
6.3.4 碰撞检测CD
- “碰撞检测”就是计算机边发送数据边检测信道上的信号电压大小。
- 当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。
- 当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。
- 所谓“碰撞”就是发生了冲突。因此“碰撞检测”也称为“冲突检测”。
- 在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。
- 每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送。
为什么要进行碰撞检测? 因为信号传播时延对载波监听产生了影响
A 需要单程传播时延的 2 倍的时间,才能检测到与 B 的发送产生了冲突
6.3.5 CSMA/CD 协议工作流程
6.3.6 CSMA/CD 协议工作——争用期(碰撞窗口)
6.3.7 CSMA/CD 协议工作——最小帧长
6.3.8 CSMA/CD 协议工作——最大帧长
6.3.9 CSMA/CD 协议工作——截断二进制指数退避算法
6.3.10 CSMA/CD 协议工作——信道利用率
6.3.11 CSMA/CD 协议工作——帧接收流程
6.3.12 CSMA/CD 协议的重要特性
- 使用 CSMA/CD 协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)。
- 每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。
- 这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率。
CSMA/CD协议曾经用于各种总线结构以太网和双绞线以太网的早起版本中。
现在的以太网基于交换机和全双工连接,不会有碰撞,因此没有必要使用CSMA/CS协议
6.4 随机接入(CSMA/CA协议)
无线局域网使用的协议:CSMA/CA
6.4.1 为什么无线局域网要使用CSMA/CA协议
既然CSMA/CD协议已经成功地应用于使用广播信道的有线局域网,那么同样使用广播信道的无线局域网能不能也使用CSMA/CD协议呢?
在无线局域网中,仍然可以使用载波监听多址接入CSMA
,即在发送帧之前先对传输媒体进行载波监听。若发现有其他站在发送帧,就推迟发送以免发生碰撞。在无线局域网中,不能使用碰撞检测CD
,原因如下:- 由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度(可能相差百万倍)。
如果要在无线网卡上实现碰撞检测CD,对硬件的要求非常高
。 - 即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性(
存在隐蔽站问题),进行碰撞检测的意义也不大
。
- 由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度(可能相差百万倍)。
-
802.11无线局域网
使用CSMA/CA协议,在CSMA的基础上增加了一个碰撞避免CA功能
,而不再实现碰撞检测功能。 -
由于
不可能避免所有的碰撞
,并且无线信道误码率较高
,802.11标准还使用了数据链路层确认机制(停止-等待协议)
来保证数据被正确接收。 -
802.11的MAC层标准定义了两种不同的媒体接入控制方式:
分布式协调功能DCF
(Distributed Coordination Function)。在DCF方式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权,这是802.11定义的默认方式。点协调功能PCF
(Point Coordination Function)。PCF方式使用集中控制的接入算法(一般在接入点AP实现集中控制),是802.11定义的可选方式,在实际中较少使用
6.4.2 帧间间隔IFS(InterFrame Space)
- 802.11标准规定,所有的
站点必须在特续检测到信道空闲一段指定时间后才能发送帧
,这段时间称为顿间间隔IFS。 - 帧间间隔的长短取决于该站点要发送的帧的类型:
- 高优先级帧需要等待的时间较短,因此可优先获得发送权:
- 低优先级帧需要等待的时间较长。若某个站的低优先级帧还没来得及发送,而其他站的高优先级帧已发送到信道上,则信道变为忙态,因而低优先级帧就只能再推迟发送了。这样就减少了发生碰撞的机会。
- 常用的两种帧间间隔如下:
短帧间间隔SFS(28μS)
,是最短的帧间间隔,用来分隔开属于一次对话的各顿。一个站点应当能够在这段时间内从发送方式切换到接收方式。使用SIFS的顿类型有ACK帧、CTS顿、由过长的MAC帧分片后的数据帧、以及所有回答AP探询的帧和在PCF方式中接入点AP发送出的任何帧。DCF帧间间隔D1FS(128μs)
,它比短帧间间隔SIFS要长得多,在DCF方式中用来发送数据帧和管理频杜区
6.4.3 CSMA/CA协议的工作原理
源站为什么在检测到信道空闲后还要再等待一段时间DIFS?
- 考虑到可能有其他的站有高优先级的帧要发送。若有,就要让高优先级帧先发送
目的站为什么正确接收数据帧后还要等待一段时间SIFS才能发送ACK帧?
- SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧,在这段时间内,一个站点应当能够从发送方式切换到接收方式
信道由忙转为空闲且经过DIFS时间后,还要退避一段随机时间才能使用信道?
防止多个站点同时发送数据而产生碰撞
使用退避算法的时机
- 当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧,则不使用退避算法。
- 以下情况必须使用退避算法:
- 在发送数据帧之前检测到信道处于忙状态时:
- 在每一次重传一个数据帧时:
- 在每一次成功发送后要连续发送下一个帧时(这是为了避免一个站点长时间占用信道)
6.4.4 CSMA/CA协议的退避算法
在执行退避算法时,站点为退避计时器设置一个随机的退避时间:
- 当退避计时器的时间减小到零时,就开始发送数据:
- 当退避计时器的时间还未减小到零时而信道又转变为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过时间DFS后,继续启动退避计时器。
在进行第i次退避时,退避时间在时隙编号(0,1,...,2^(2+i)-1)中随机选择一个,然后乘以基本退避时间(也就是一个时隙的长度)就可以得到随机的退避时间。这样做是为了使不同站点选择相同退避时间的概率减少。当时隙编号达到255时(对应于第6次退避)就不再增加了。
退避算法的示例
6.4.5 CSMA/CA协议的信道预约和虚拟载波监听
为了尽可能减少碰撞的概率
和降低碰撞的影响,802.11标准允许要发送数据的站点对信道进行预约
。
- (1)源站在发送数据顿之前先发送一个短的控制锁,称为
请求发送RTS(R©quest To Ser)
,它包括通地址、目的地址以及这次通信(包括相应的确认帧)所需的持续时间, - (2)若目的站正确收到源站发来的RTS顿,且媒体空闲,就发送一个响应控制帧,称为
允许发送CTS(Clear To Send)
,它也包括这次通信所需的持续时间(从RTS帧中将此持续时间复割到CTS顿中)。 - (3)源站收到CTS帧后,再等待一段时间SFS后,就可发送其数据械。
- (4)若目的站正确收到了源站发来的数据顺,在等待时间SIFS后,就向亚站发送确认帧ACK
除源站和目的站以外的
其他各站
,在收到CTS帧(或数据帧)后就推迟接入到无线局域网中
。这样就保证了源站和目的站之间的通信不会受到其他站的干扰。
如果RTS帧发生碰撞,源站就收不到CTS慎,需执行退避算法重传RTS帧。
由于RTS顿和CT5顿很短
,发送碰撞的概率、碰撞产生的开销及本身的开销都很小。而对于一般的数据顿,其发送时延往往大于传播时延(因为是局域网),碰撞的概率很大,且一旦发生並撞而导致数据顿重发,则浪费的时间就很多,因此用很小的代价对信道进行预约往往是值得的
。802.11标准规定了3种情况供用户选择:
- 使用RTS帧和CTS顿
- 不使用RTS帧和CTS帧
- 只有当数据帧的长度超过某一数值时才使用RTS顿和CTS帧
除RTS顿和CTS帧会携带通信需要特续的时间,数据领也能携带通信需要特续的时间,这称为802.11的虚找拟载波监听机制
,由于利用虚拟载波监听机制,站点只要监听到RTS帧、CTS帧或数据帧中的任何一个,就能知道信道被占用的特续时间
,而不需要真正监听到信道上的信号,因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题
。
虚拟载波监听机制能减少隐蔽站带来的碰撞问题的示例
7. MAC地址、IP地址以及ARP协议
-
数据链路层:
MAC地址是以太网的MAC子层所使用的地址
-
网际层:
- IP地址是TCP八P体系结构网际层所使用的地址:
- ARP协议属于TCP/IP体系结构的网际层,其作用是已知设备所分配到的1P地址,使用ARP协议可以通过该P地址获取到设备的MAC地址:
-
尽管IP地址和ARP协议属于TCP/IP体系结构的网际层(而不属于数据链路层),但是它们与MAC地址存在一定的关系,并且我们日常的网络应用都离不开MAC地址、P地址以及ARP协议。因此,我们将这三者放在一起讨论。
7.1 MAC地址
- 使用点对点信道的数据链路层不需要使用地址
- 使用广播信道的数据链路层必须使用地址来区分各主机
7.1.1 广播信道的数据链路层必须使用地址(MAC)
MAC地址又称为硬件地址或物理地址。请注意:不要被 “物理” 二字误导认为物理地址属于物理层范畴,物理地址属于数据链路层范畴
7.1.2 IEEE 802局域网的MAC地址格式
组织唯一标识符OUI
- 生产网络设备的厂商,需要向IEEE的注册管理机构申请一个或多个OUI
网络接口标识符
- 由获得OUI的厂商自行随意分配
EUI-48
- 48是这个MAC地址的位数
对于使用EUI-48空间的应用程序,IEEE的目标寿命为100年(直到2080年),但是鼓励采用EUI-64作为替代
关于无效的 MAC 帧
- 数据字段的长度与长度字段的值不一致;
- 帧的长度不是整数个字节;
- 用收到的帧检验序列 FCS 查出有差错;
- 数据字段的长度不在 46 ~ 1500 字节之间。
- 有效的 MAC 帧长度为 64 ~ 1518 字节之间。
对于检查出的无效 MAC 帧就简单地丢弃。以太网不负责重传丢弃的帧。
7.1.3 IEEE 802局域网的MAC地址发送顺序
7.1.4 单播MAC地址举例
主机B给主机C发送单播帧,主机B首先要构建该单播帧,在帧首部中的目的地址字段填入主机C的MAC地址,源地址字段填入自己的MAC地址,再加上帧首部的其他字段、数据载荷以及帧尾部,就构成了该单播帧
主机B将该单播帧发送出去,主机A和C都会收到该单播帧
主机A的网卡发现该单播帧的目的MAC地址与自己的MAC地址不匹配,丢弃该帧
主机C的网卡发现该单播帧的目的MAC地址与自己的MAC地址匹配,接受该帧
并将该帧交给其上层处理
7.1.5 广播MAC地址举例
假设主机B要发送一个广播帧,主机B首先要构建该广播帧,在帧首部中的目的地址字段填入广播地址,也就是十六进制的全F,源地址字段填入自己的MAC地址,再加上帧首部中的其他字段、数据载荷以及帧尾部,就构成了该广播帧
主机B讲该广播帧发送出去,主机A和C都会收到该广播帧,发现该帧首部中的目的地址字段的内容是广播地址,就知道该帧是广播帧,主机A和主机C都接受该帧,并将该帧交给上层处理
7.1.6 多播MAC地址举例
假设主机A要发送多播帧给该多播地址。将该多播地址的左起第一个字节写成8个比特,第一个字节的最低比特位是1,这就表明该地址是多播地址。
快速判断地址是不是多播地址,就是上图所示箭头所指的第十六进制数不能整除2(1,3,5,7,9,B,D,F),则该地址是多播地址
假设主机B,C和D支持多播,各用户给自己的主机配置多播组列表如下所示
主机B属于两个多播组,主机C也属于两个多播组,而主机D不属于任何多播组
主机A首先要构建该多播帧,在帧首部中的目的地址字段填入该多播地址,源地址点填入自己的MAC地址,再加上帧首部中的其他字段、数据载荷以及帧尾部,就构成了该多播帧
主机A将该多播帧发送出去,主机B、C、D都会收到该多播帧
主机B和C发现该多播帧的目的MAC地址在自己的多播组列表中,主机B和C都会接受该帧
主机D发现该多播帧的目的MAC地址不在自己得多播组列表中,则丢弃该多播帧
给主机配置多播组列表进行私有应用时,不得使用公有的标准多播地址
7.2 IP地址
IP地址属于网络层的范畴,不属于数据链路层的范畴
下面内容讲的是IP地址的使用,详细的IP地址内容在网络层中介绍
7.2.1 基本概念
7.2.2 从网络体系结构看IP地址与MAC地址
数据包转发过程中IP地址与MAC地址的变化情况
图上各主机和路由器各接口的IP地址和MAC地址用简单的标识符来表示
如何从IP地址找出其对应的MAC地址?
ARP协议
7.3 ARP协议
如何从IP地址找出其对应的MAC地址?
ARP(地址解析协议)
7.3.1 流程
ARP高速缓存表
当主机B要给主机C发送数据包时,会首先在自己的ARP高速缓存表中查找主机C的IP地址所对应的MAC地址,但未找到,因此,主机B需要发送ARP请求报文,来获取主机C的MAC地址
ARP请求报文有具体的格式,上图的只是简单描述
ARP请求报文被封装在MAC帧中发送,目的地址为广播地址
主机B发送封装有ARP请求报文的广播帧,总线上的其他主机都能收到该广播帧
收到ARP请求报文的主机A和主机C会把ARP请求报文交给上层的ARP进程
主机A发现所询问的IP地址不是自己的IP地址,因此不用理会
主机C的发现所询问的IP地址是自己的IP地址,需要进行相应
动态与静态的区别
ARP协议只能在一段链路或一个网络上使用,而不能跨网络使用
ARP协议的使用是逐段链路进行的
7.3.2 总结
地址解析协议ARP:
-
源主机在自己的
ARP高速缓存表
中查找目的主机的P地址所对应的MAC地址,若找到了,则可以封装MAC帧进行发送;若找不到,则发送ARP请求(封装在广播MAC帧中)
: -
目的主机收到ARP请求后,将源主机的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后给源主机发送
ARP响应(封装在单播MAC帧中)
,ARP响应中包含有目的主机的P地址和MAC地址; -
源主机收到ARP响应后,将目的主机的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后就可以封装之前想发送的MAC帧并发送给目的主机:
-
ARP的作用范围:逐段链路或逐个网络使用
: -
`除ARP请求和响应外,ARP还有其他类型的报文(例如用于检查IP地址冲突的“无故ARP、免费ARP(Gratuitous ARP)”);
-
ARP没有安全验证机制,
存在ARP欺骗(攻击)问题
ARP表中的IP地址与MAC地址的对应关系记录,是会定期自动删除的,因为IP地址与MAC地址的对应关系不是永久性的
8. 集线器与交换机的区别
8.1 集线器-在物理层扩展以太网
8.1.1 概念
- 传统以太网最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和更灵活的双绞线。
- 采用双绞线的以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器 (hub)。
- 集线器是也可以看做多口中继器,每个端口都可以成为一个中继器,中继器是对减弱的信号进行放大和发送的设备
- 集线器的以太网在逻辑上仍是个总线网,需要使用CSMA/CD协议来协调各主机争用总线,只能工作在半双工模式,收发帧不能同时进行
8.1.2 集线器HUB在物理层扩展以太网
使用集线器扩展:将多个以太网段连成更大的、多级星形结构的以太网
优点
- 使原来属于不同碰撞域的以太网上的计算机能够进行跨碰撞域的通信。
- 扩大了以太网覆盖的地理范围。
缺点
- 碰撞域增大了,但总的吞吐量并未提高。
- 如果不同的碰撞域使用不同的数据率,那么就不能用集线器将它们互连起来。
碰撞域
- 碰撞域(collision domain)又称为冲突域,是指网络中一个站点发出的帧会与其他站点发出的帧产生碰撞或冲突的那部分网络。
- 碰撞域越大,发生碰撞的概率越高。
8.2 以太网交换机-在数据链路层扩展以太网
8.2.1 概念
- 扩展以太网更常用的方法是在数据链路层进行。
- 早期使用网桥,现在使用以太网交换机。
网桥
- 网桥工作在数据链路层。
- 它根据 MAC 帧的目的地址对收到的帧进行转发和过滤。
- 当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的MAC 地址,然后再确定将该帧转发到哪一个接口,或把它丢弃。
交换机
- 1990 年问世的交换式集线器 (switching hub) 可明显地提高以太网的性能。
- 交换式集线器常称为以太网交换机 (switch) 或第二层交换机 (L2 switch),强调这种交换机工作在数据链路层。
- 以太网交换机实质上就是一个多接口的网桥
8.2.2 集线器HUB与交换机SWITCH区别
使用集线器互连而成的共享总线式以太网上的某个主机,要给另一个主机发送单播帧,该单播帧会通过共享总线传输到总线上的其他各个主机
使用交换机互连而成的交换式以太网上的某个主机,要给另一个主机发送单播帧,该单播帧进入交换机后,交换机会将该单播帧转发给目的主机,而不是网络中的其他各个主机
这个例子的前提条件是忽略ARP过程,并假设交换机的帧交换表已经学习或配置好了
以太网交换机的交换方式
存储转发方式
- 把整个数据帧先缓存后再进行处理。
直通 (cut-through) 方式
- 接收数据帧的同时就立即按数据帧的目的 MAC 地址决定该帧的转发接口,因而提高了帧的转发速度。
- 缺点是它不检查差错就直接将帧转发出去,因此有可能也将一些无效帧转发给其他的站。
这个例子的前提条件是忽略ARP过程,并假设交换机的帧交换表已经学习或配置好了
对比集线器和交换机
多台主机同时给另一台主机发送单播帧
集线器以太网:会产生碰撞,遭遇碰撞的帧会传播到总线上的各主机
交换机以太网:会将它们缓存起来,然后逐个转发给目的主机,不会产生碰撞
这个例子的前提条件是忽略ARP过程,并假设交换机的帧交换表已经学习或配置好了
集线器扩展以太网和交换机扩展以太网区别
单播
广播
多个单播
广播域(broadcast domain):指这样一部分网络,其中任何一台设备发出的广播通信都能被该部分网络中的所有其他设备所接收。
8.2 总结
工作在数据链路层的以太网交换机,其性能远远超过工作在物理层的集线器,而且价格并不贵,这就使得集线器逐渐被市场淘汰
9. 以太网交换机自学习和转发帧的流程
9.1 概念
- 以太网交换机工作在
数据链路层
(也包括物理层) - 以太网交换机收到帧后,在帧交换表中查找
帧的目的MAC地址所对应的接口号
,然后通过该接口转发帧。 - 以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机
通过自学习算法
自动逐渐建立起帧交换表
。
9.2 自学习和转发帧的例子
以下例子假设各主机知道网络中其他各主机的MAC地址(无需进行ARP)
A -> B
- A 先向 B 发送一帧。该帧从接口 1 进入到交换机
- 交换机收到帧后,先查找(图中左边)交换表。没有查到应从哪个接口转发这个帧给 B
- 交换机把这个帧的源地址 A 和接口 1 写入(图中左边)交换表中
- 交换机向除接口 1 以外的所有的接口广播这个帧
- 接口 4到接口 2,先查找(图中右边)交换表。没有查到应从哪个接口转发这个帧给 B
- 交换机把这个帧的源地址 A 和接口 1 写入(图中右边)交换表中
- 除B主机之外与该帧的目的地址不相符,将丢弃该帧
- 主机B发现是给自己的帧,接受该帧
B -> A
- B 向 A 发送一帧。该帧从接口 3 进入到交换机
- 交换机收到帧后,先查找(图中左边)交换表。发现(图中左边)交换表中的 MAC 地址有 A,表明要发送给A的帧应从接口1转发出去。于是就把这个帧传送到接口 1 转发给 A。
- 主机 A 发现目的地址是它,就接受该帧
- 交换机把这个帧的源地址 B 和接口 3 写入(图中左边)交换表中
E -> A
- E 向 A发送一帧
- 交换机收到帧后,先查找(图中右边)交换表。发现(图中右边)交换表中的 MAC 地址有 A,表明要发送给A的帧应从接口2转发出去。于是就把这个帧传送到接口 2 转发给 接口 4。
- 交换机把这个帧的源地址 E 和接口 3 写入(图中右边)交换表中
- 接口 4 到 左边的交换机,先查找(图中左边)交换表。发现(图中左边)交换表中的 MAC 地址有 A,表明要发送给A的帧应从接口1转发出去。于是就把这个帧传送到接口 1 转发给 A。
- 交换机把这个帧的源地址 E 和接口 4 写入(图中左边)交换表中
- 主机 A 发现目的地址是它,就接受该帧
G -> A
主机 A、主机 G、交换机 1的接口 1就共享同一条总线(相当于总线式网络,可以想象成用集线器连接了)
- 主机 G 发送给 主机 A 一个帧
- 主机 A 和 交换机接口 1都能接收到
- 主机 A 的网卡收到后,根据帧的目的MAC地址A,就知道是发送给自己的帧,就接受该帧
- 交换机 1收到该帧后,首先进行登记工作
- 然后交换机 1对该帧进行转发,该帧的MAC地址是A,在(图中左边)交换表查找MAC 地址有 A
- MAC 地址为 A的接口号是1,但是该帧正是从接口 1 进入交换机的,交换机不会再从该接口 1 将帧转发出去,因为这是没有必要,于是丢弃该帧
随着网络中各主机都发送了帧后,网络中的各交换机就可以学习到各主机的MAC地址,以及它们与自己各接口的对应关系
考虑到可能有时要在交换机的接口更换主机,或者主机要更换其网络适配器,这就需要更改交换表中的项目。为此,在交换表中每个项目都设有一定的有效时间。过期的项目就自动被删除。
以太网交换机的这种自学习方法使得以太网交换机能够即插即用,不必人工进行配置,因此非常方便。
9.2 总结
交换机自学习和转发帧的步骤归纳
-
以太网
交换机工作在数据链路层(也包括物理层)
-
以太网交换机收到帧后,在
帧交换表中查找帧的目的MAC地址所对应的接口号
,然后通过该接口转发帧。 -
以太网交换机是一种即插即用设备,刚上电启动时其内部的顿交换表是空的。随着网络中各主机间的通信,以太网交换机
通过自学习算法
自动逐渐建立起帧交换表
。 -
以太网交换机自学习和转发帧的流程:
- ①收到帧后进行
登记
。登记的内容为帧的源MAC地址及进入交换机的接口号
: - ②根据
帧的目的MAC地址
和交换机的帧交换表
对帧进行转发,有以下三种情况:明确转发
:交换机知道应当从哪个(或哪些)接口转发该帧(单播,多播,广播)盲目转发
:交换机不知道应当从哪个端口转发帧,只能将其通过除进入交换机的接口外的其他所有接口转发(也称为泛洪)。明确丢弃
:交换机知道不应该转发该帧,将其丢弃。
- ①收到帧后进行
-
帧交换表中的每条记录都有自己的
有效时间
,到期删除。原因如下:- 交换机的接口改接了另一台主机:
- 主机更换了网卡。
10. 以太网交换机的生成树协议STP
10.1 如何提高以太网的可靠性
添加冗余链路
可以提高以太网的可靠性。但是,冗余链路也会带来负面效应—形成网络环路
。网络环路会带来以下问题:
广播风暴
:大量消耗网络资源,使得网络无法正常转发其他数据帧:主机收到重复的广播帧
:大量消耗主机资源交换机的帧交换表震荡(漂移)
10.2 生成树协议STP
- 以太网交换机使用
生成树协议STP
(Spanning Tree Protocol)可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题
。- 不论交换机之间采用怎样的物理连接,交换机都能够
自动计算并构建一个逻辑上没有环路的网络
,其逻辑拓扑结构必须是树型的(无逻辑环路): - 最终生成的树型逻辑拓扑要
确保连通整个网络
: - 当首次连接交换机或
网络物理拓扑发生变化
时(有可能是人为改变或故障),交换机都将进行生成树的重新计算
。
- 不论交换机之间采用怎样的物理连接,交换机都能够
生成树算法STA已超出本系列课程的教学大纲。对STA有兴趣的同学可参看我们的另一个系列课程《计算机网络简明教程和仿真实验》
- IEEE 802.1D 标准制定了一个生成树协议 STP (Spanning Tree Protocol)。
- 其要点是:不改变网络的实际拓扑,但在逻辑上则切断某些链路,使得从一台主机到所有其他主机的路径是无环路的树状结构,从而消除了兜圈子现象。
11. 虚拟局域网VLAN
11.1 为什么要虚拟局域网VLAN
广播风暴:以太网交换机工作在数据链路层(也包括物理层)
,使用一个或多个以太网交换机互连起来的交换式以太网,其所有站点都属于同一个广播域
。随着交换式以太网规模的扩大,广播域相应扩大。
巨大的广播域会带来很多弊端
:
- 广播风暴
- 难以管理和维护
- 潜在的安全问题
广播风暴会浪费网络资源和各主机的CPU资源!
网络中会频繁出现广播信息:
- TCP/IP协议栈中的很多协议都会使用广播:
地址解析协议ARP
(已知IP地址,找出其相应的MAC地址)路由信息协议RIP
(一种小型的内部路由协议)动态主机配置协议DHCP
(用于自动配置1P地址)
- NetBEUI:Widnows下使用的广播型协议
- IPX/SPX:Novell网络的协议栈
- Apple Talk:Apple公司的网络协议栈
分割广播域的方法:使用路由器可以隔离广播域,但是路由器的成本较高。虚拟局域网VLAN应运而生
11.2 概念
虚拟局域网VLAN(Virtual Local Area Network)是一种将局域网内的设备划分成与物理位置无关的逻辑组技术,这些逻辑组具有某些共同的需求
。
-
利用以太网交换机可以很方便地实现虚拟局域网 VLAN (Virtual LAN)。
-
IEEE 802.1Q 对虚拟局域网 VLAN 的定义: 虚拟局域网 VLAN 是由一些局域网网段构成的与物理位置无关的逻辑组,而这些网段具有某些共同的需求。每一个 VLAN 的帧都有一个明确的标识符,指明发送这个帧的计算机是属于哪一个 VLAN。
-
同一个VLAN内部可以广播通信,不同VLAN不可以广播通信
-
虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网。
-
由于虚拟局域网是用户和网络资源的逻辑组合,因此可按照需要将有关设备和资源非常方便地重新组合,使用户从不同的服务器或数据库中存取所需的资源。
11.3 虚拟局域网VLAN的实现机制
虚拟局域网VLAN技术是在交换机上实现
的,需要交换机能够实现以下功能
- 能够处理带有VLAN标记的帧——IEEE 802.1 Q帧
- 交换机的各端口可以支持不同的端口类型,不同端口类型的端口对帧的处理方式有所不同
Access端口
交换机与用户计算机之间的互连
同一个VLAN内部可以广播通信,不同VLAN不可以广播通信
Truck端口
交换机之间或交换机与路由器之间的互连
小例题
华为交换机私有的Hybrid端口类型
11.4 总结
虚拟局域网优点
虚拟局域网(VLAN)技术具有以下主要优点:
- 改善了性能
- 简化了管理
- 降低了成本
- 改善了安全性