# 数据链路层概述

  • 链路 (Link) 就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。
  • 数据链路 (Data Link) 是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。
  • 数据链路层以帧为单位传输和处理数据。

# 封装成帧

封装成帧是指数据链路层给。上层交付的协议数据单元添加帧头和帧尾使之成为帧。

  • 帧头和帧尾中包含有重要的控制信息。
  • 帧头和帧尾的作用之一就是帧定界。

透明传输是指数据链路层对。上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。

  • 面向字节的物理链路使用字节填充 (或称字符填充) 的方法实现透明传输。
  • 面向比特的物理链路 使用比特填充的方法实现透明传输。

为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些。

  • 考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元 MTU (Maximum Transfer Unit)。

# 差错检测

实际的通信链路都不是理想的,比特在传输过程中可能会产生差错: 1 可能会变成 0, 而 0 也可能变成 1。这称为比特差错

在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate)。

使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。

# 奇偶校验

在待发送的数据后面添加 1 位奇偶校验位,使整个数据 (包括所添加的校验位在内) 中 “1" 的个数为奇数 (奇校验) 或偶数 (偶校验)。

如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码;

如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码 (漏检)

# 循环冗余校验 CRC (Cyclic Redundancy Check)

收发双方约定好一个生成多项式 G (x);

发送方基于待发送的数据和生成多项式计算出差错检测码 (冗余码) , 将其添加到待传输数据的后面一起传输;

接收方通过生成多项式来计算收到的数据是否产生了误码;

算法要求生成多项式必须包含最低次项

常用生成多项式:

  • CRC-16
  • CRC-CCITT
  • CRC-32

检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。

要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用。

循环冗余校验 CRC 有很好的检错能力 (漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层。

在计算机网络中通常采用我们后续课程中将要讨论的检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提的是可靠传输服务还是不可靠传输服务。

# 可靠传输

# 基本概念

使用差错检测技术 (例如循环冗余校验 CRC),接收方的数据链路层就可检测出帧在传输过程中是否产生了误码 (比特错误)。

数据链路层向上层提供的服务类型

  • 不可靠传输服务:仅仅丢弃有误码的帧, 其他什么也不做;
  • 可靠传输服务:想办法实现发送端发送什么,接收端就收到什么。

一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向。上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。

无线链路易受干扰,误码率比较高,因此要求数据链路层必须向。上层提供可靠传输服务。

比特差错只是传输差错中的一种。

从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复。

分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层。

可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输。

# 实现机制

# 停止 - 等待协议 SW

启动一个超时计时器。若到了超时计时器所设置的重传时间而发送方仍收不到接收方的任何 ACK 或 NAK, 则重传原来的数据分组,这就叫做超时重传。
一般可将重传时间选为略大于 “从发送方到接收方的平均往返时间”。

为避免分组重复这种传输错误,必须给每个分组带上序号。
对于停止 - 等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了。

  • 接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。但对于误码率较高的点对点链路,为使发送方尽早重传,也可给发送方发送 NAK 分组。
  • 为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止 - 等待协议的停等特性,只需 1 个比特编号就够了,即编号 0 和 1。
  • 为了让发送方能够判断所收到的 ACK 分组是否是重复的,需要给 ACK 分组编号,所用比特数量与数据分组编号所用比特数量一样。数据链路层一般不会出现 ACK 分组迟到的情况,因此在数据链路层实现停止 - 等待协议可以不用给 ACK 分组编号。
  • 超时计时器设置的重传时间应仔细选择。一般可将重传时间选为略大于 “从发送方到接收方的平均往返时间”。
  • 在数据链路层点对点的往返时间比较确定,重传时间比较好设定。
  • 然而在运输层,由于端到端往返时间非常不确定,设置合适的重传时间有时并不容易。

信道利用率: U=TDTD+RTT+TAU = \frac{T_{D}}{T_{D} + RTT + T_{A}}

信道利用率很低

# 回退 N 帧协议 GBN

发送方

发送窗口尺寸 Wr 的取值范围是 1<WT2n11< W_{T} \le 2^{n} - 1
其中,n 是构成分组序号的比特数量。

WT=1W_{T} = 1 停止 - 等待协议

WT2n1W_{T} \ge 2^{n} - 1 接收方无法分辨新旧数据分组

发送方可在未收到接收方确认分组的情况下,将序号落在发送窗口内的多个数据分组全部发送出去;

发送方只有收到对已发送数据分组的确认时,发送窗口才能向前相应滑动;

发送方收到多个重复确认时,可在重传计时器超时前尽早开始重传,由具体实现决定。

发送方发送窗口内某个已发送的数据分组产生超时重发时,其后续在发送窗口内且已发送的数据分组也必须全部重传,这就是回退 N 帧协议名称的由来。

接收方:

接收方的接收窗口尺寸WRW_{R} 的取值范围是WR=1W_{R} = 1,因此接收方只能按序接收数据分组。

接收方只接收序号落在接收窗口内且无误码的数据分组,并且将接收窗口向前滑动一个位置,与此同时给发送方发回相应的确认分组。为了减少开销,接收方不一定每收到一个按序到达且无误码的数据分组就给发送方发回一个确认分组,而是可以在连续收到好几个按序到达且无误码的数据分组后 (由具体实现决定),才针对最后一个数据分组发送确认分组,这称为累积确认;或者可以在自己有数据分组要发送时才对之前按序接收且无误码的数据分组进行捎带确认;

接收方收到未按序到达的数据分组,除丢弃外,还要对最近按序接收的数据分组进行确认;

# 选择重传协议 SR

回退 N 帧协议的接收窗口尺寸 WRW_{R} 只能等于 1,因此接收方只能按序接收正确到达的数据分组。

一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃 (尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大浪费。

为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸 WRW_{R} 不应再等于 1 (而应大于 1) ,以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层。这就是选择重传协议

注意:选择重传协议为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,而需要对每个正确接收到的数据分组进行逐一确认!

  • 发送方的发送窗口尺寸 WTW_{T} 必须满足: 1 < W_{T} \le 2^

其中 n 是构成分组序号的比特数量

WT=1W_{T} = 1:与停止 - 等待协议相同

WT>2(n1)W_{T} > 2^{(n - 1)}:造成接收方无法分辨新、旧数据分组的问题

发送方可在未收到接收方确认分组的情况下,将序号落在发送窗口内的多个数据分组全部发送出去;

发送方只有按序收到对已发送数据分组的确认时,发送窗口才能向前相应滑动;若收到未按序到达的确认分组时,对其进行记录,以防止其相应数据分组的超时重发,但发送窗口不能向前滑动。

  • 接收方的接收窗口尺寸 WRW_{R} 必须满足: 1 < W_{R} \le W_

WR=1W_{R} = 1:与回退 N 帧协议相同

WR>WTW_{R} > W_{T}:无意义

接收方可接收未按序到达但没有误码并且序号落在接收窗口内的数据分组;

为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认而需要对每个正确接收到的数据分组进行逐一确认!

接收方只有在按序接收数据分组后,接收窗口才能向前相应滑动。

# 点对点协议 PPP

点对点协议 PPP (Point-to-Point Protocol) 是目前使用最广泛的点对点数据链路层协议。

PPP 协议为在点对点链路传输各种协议数据报提供了 - 一个标准方法,主要由以下三部分构成:

  • 对各种协议数据报的封装方法 (封装成帧)
  • 链路控制协议 LCP (用于建立、配置以及测试数据链路的连接)
  • 一套网络控制协议 NCPs (其中的每一个协议支持不同的网络层协议)

# 帧格式

标志 (Flag) 字段: PPP 帧的定界符,取值为 0x7E

地址 (Address) 字段:取值为 0xFF, 预留 (目前没有什么作用)

控制 (Control) 字段:取值为 0x03, 预留 (目前没有什么作用)

协议 (Protocol) 字段:指明帧的数据部分送交哪个协议处理

  • 取值 0x0021 表示:帧的数据部分为 IP 数据报
  • 取值 0xC021 表示:帧的数据部分为 LCP 分组
  • 取值 0x8021 表示:帧的数据部分为 NCP 分组

帧检验序列 (Frame Check Sequence) 字段: CRC 计算出的校验位

# 透明传输

# 一面向字节的异步链路采用插入转义字符的字节填充法

发送方的处理:

  • 出现的每一个 7E (PPP 帧的定界符) 字节转变成 2 字节序列 (7D,5E) 。
  • 出现的每一个 7D (转义字符) 字节转变成 2 字节序列 (7D,5D)。
  • 出现的每一个 ASCII 码控制字符 (数值小于 0x20 的字符) , 则在该字符前面插入一个 7D 字节,同时将该字符的编码加上 0x20。

接收方的处理:进行反变换即可恢复出原来的帧的数据部分。

# 面向比特的同步链路采用插入比特 0 的比特填充法

发送方的处理:

对帧的数据部分进行扫描 (一般由硬件实现)。只要发现 5 个连续的比特 1, 则立即填充 1 个比特 0。

接收方的处理:

对帧的数据部分进行扫描 (一般由硬件实现)。只要发现 5 个连续的比特 1, 就把其后的 1 个比特 0 删除。

# PPP 差错检测

采用 CRC 校验

CRCCCITT=X16+X12+X5+1CRC-CCITT = X^{16} + X^{12} +X^5 + 1

RFC 1662 的附录部分给出了 FCS 的计算方法的 C 语言实现 (查表法)

接收方每收到一个 PPP 帧,就进行 CRC 检验。若 CRC 检验正确,就收下这个帧;反之,就丢弃这个帧。使用 PPP 的数据链路层向上不提供可靠传输服务

# 媒体接入控制

# 媒体接入控制基本概念

共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制 MAC (Medium Access Control)。

随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术。

# 静态划分信道

# 信道复用

复用 (Multiplexing) 是通信技术中的一个重要概念。复用就是通过一条物理线路同时传输多路用户的信号。

当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽。

# 频分复用 FDM

频分复用的所有用户同时占用不同的频带资源并行通信。

# 时分复用 TDM

时分复用的所有用户在不同的时间占用同样的频带宽度,

# 波分复用 WDM

光的频分复用

# 码分复用 CDM

码分复用 CDM 是另一种共享信道的方法。实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址 CDMA (Code Division Multiple Access)。

同理,频分复用 FDM 和时分复用 TDM 同样可用于多址接入,相应的名词是频分多址 FDMA (Frequency Division Multiple Access) 和时分多址 TDMA (Time Division Multiple Access)。

  • 复用是将单一媒体的频带资源划分成很多子信道,这些子信道之间相互独立,互不干扰。从媒体的整体频带资源上看,每个子信道只占用该媒体频带资源的一部分。
  • 多址 (更确切地应该称为多点接入) 处理的是动态分配信道给用户。这在用户仅仅暂时性地占用信道的应用中是必须的,而所有的移动通信系统基本上都属于这种情况。相反,在信道永久性地分配给用户的应用中,多址是不需要的 (对于无线广播或电视广播站就是这样)。
  • 某种程度上,FDMA、TDMA、CDMA 可以分别看成是 FDM、TDM、CDM 的应用。

与 FDM 和 TDM 不同,CDM 的每一个用户可以在同样的时间使用同样的频带进行通信。

由于各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰。

CDM 最初是用于军事通信的,因为这种系统所发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易被敌人发现。

随着技术的进步,CDMA 设备的价格和体积都大幅度下降,因而现在已广泛用于民用的移动通信中。

在 CDMA 中,每一个比特时间再划分为 m 个短的间隔,称为码片 (Chip) 。通常 m 的值是 64 或 128。

使用 CDMA 的每一个站被指派一个唯一的 m bit 码片序列 (Chip Sequence) 。

  • 一个站如果要发送比特 1,则发送它自己的 m bit 码片序列
  • 一个站如果要发送比特 0,则发送它自己的 m bit 码片序列的二进制反码

码片序列的挑选原则

  1. 分配给每个站的码片序列必须各不相同,实际常采用伪随机码序列。
  2. 分配给每个站的码片序列必须相互正交 (规格化内积为 0)。

令向量 S 表示站 S 的码片序列,令向量 T 表示其他任何站的码片序列。
两个不同站 S 和 T 的码片序列正交,就是向量 S 和 T 的规格化内积为 0:

ST1mi=1mSiTi=0S\cdot T\equiv \frac{1}{m} \sum_{i= 1}^{m} S_{i} T_{i} = 0

SS1mi=1mSiSi=1mi=1mSi2=1mi=1m(±1)2=1S\cdot S\equiv \frac{1}{m} \sum_{i= 1}^{m} S_{i} S_{i} = \frac{1}{m} \sum_{i= 1}^{m}S^2_{i} =\frac{1}{m} \sum_{i= 1}^{m}(\pm 1)^2 = 1

ST0S\cdot \vec{T} \equiv 0

SS1S\cdot \vec{S} \equiv - 1

# 动态接入控制

# 随机接入

# 总线局域网使用的协议:CSMA/CD 协议

载波监听多址接入 / 碰撞检测 CSMA/CD (Carrier Sense Multiple Acss/ollision Detection)

# 多址接入 MA

多个站连接在一条总线上,竞争使用总线。

# 载波监听 CS

每一个站在发送帧之前先要检测一下总线上是否有其他站点在发送帧 (“先听后说”) :

  • 若检测到总线空闲 96 比特时间,则发送这个帧;
  • 若检测到总线忙,则继续检测并等待总线转为空闲 96 比特时间,然后发送这个帧。
# 碰撞检测 CD

每一个正在发送帧的站边发送边检测碰撞 (“边说边听”) :

  • 一旦发现总线上出现碰撞,则立即停止发送,退避一段随机时间后再次发送 (“一旦冲突,立即停说,等待时机,重新再说”)。

以太网还采取一种叫做强化碰撞的措施。 这就是当发送帧的站点一旦检测到碰撞,除了立即停止发送帧外,还要再继续发送 32 比特或 48 比特的人为干扰信号 (Jamming Signal) ,以便有足够多的碰撞信号使所有站点都能检测出碰撞。

# CSMA/CD 协议一争用期 (碰撞窗口)

主机最多经过 2τ(即 δ→0) 的时长就可检测到本次发送是否遭受了碰撞

因此,以以网的端到端往返传播时延 2t 称为争用期碰撞窗口

经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。

每一个主机在自己发送帧之后的一小段时间内,存在着遭遇碰撞的可能性。这一小段时间是不确定的。它取决于另一个发送帧的主机到本主机的距离,但不会超过总线的端到端往返传播时延,即一个争用期时间。

显然,在以太网中发送帧的主机越多,端到端往返传播时延越大,发生碰撞的概率就越大。因此,共享式以太网不能连接太多的主机,使用的总线也不能太长。

  • 10Mb/s 以太网把争用期定为 512 比特发送时间,即 51.2μs, 因此其总线长度不能超过 5120m, 但考虑到其他一些因素,如信号衰减等,以太网规定总线长度不能超过 2500m。
# CSMA/CD 协议一最小帧长

以太网规定最小帧长为 64 字节,即 512 比特 (512 比特时间即为争用期)

  • 如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于 64 字节。

以太网的最小帧长确保了主机可在帧发送完成之前就检测到该帧的发送过程中是否遭遇了碰撞

  • 如果在争用期 (共发送 64 字节) 没有检测到碰撞,那么后续发送的数据就一定不会发生碰撞;
  • 如果在争用期内检测到碰撞,就立即中止发送,这时已经发送出去的数据一定小于 64 字节,因此凡长度小于 64 字节的帧都是由于碰撞而异常中止的无效帧。
# CSMA/CD 协议一截断二 进制指数退避算法

退避时间 = 基本退避时间 (争用期 2τ) ×\times 随机数 r (r 从离散的整数集合 0, 1… ($2k$- 1)随机选出一个数 k = Min [重传次数,10])

重传次数 k 离散的整数集合 0,1, . ($2k$-1) 可能的退避时间
1 1 0x2τ, 1 x2τ
2 2 0x2τ, 1 x2τ,2x2τ, 3x 2τ
12 10 0x2τ, 1 x2τ,2x2τ,3x2τ,4x2τ, 5x2τ, …1023 x2τ

若连续多次发生碰撞,就表明可能有较多的主机参与竞争信道。但使用上述退避算法可使重传需要推迟的平均时间随重传次数而增大 (这也称为动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。

当重传达 16 次仍不能成功时,表明同时打算发送帧的主机太多,以至于连续发生碰撞,则丢弃该帧,并向高层报告。

# CSMA/CD 协议 - 一信道利用率

考虑以下这种理想情况:

  • 各主机发送帧都不会产生碰撞;
  • 总线一旦空闲就有某个主机立即发送帧;
  • 发送一帧占用总线的时间为T0T_{0} + τ, 而帧本身的发送时间是T0T_{0},

极限信道利用率:S_{max} = \frac{T_{0}}{T_{0}+τ} = \frac{1}{1+\frac{τ}{T_{0}} } = \frac{1}

参数 a 的值尽量小,以提高信道利用率
以太网端到端的距离受到限制
以太网帧的长度应尽量长些

# 无线局域网使用的协议:CSMA/CA 协议

载波监听多址接入 / 碰撞避免 CSMA/CA (Carrier Sense Multiple Accssolision Avoidance)

在无线局域网中,不能使用碰撞检测 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 定义的可选方式,在实际中较少使用。
# 帧间间隔 IFS (InterFrame Space)

802.11 标准规定,所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔 IFS。

帧间间隔的长短取决于该站点要发送的帧的类型:

  • 高优先级帧需要等待的时间较短,因此可优先获得发送权;
  • 低优先级帧需要等待的时间较长。若某个站的低优先级帧还没来得及发送,而其他站的高优先级帧已发送到信道上,则信道变为忙态,因而低优先级帧就只能再推迟发送了。这样就减少了发生碰撞的机会。

常用的两种帧间间隔如下:

  • 短帧间间隔 SIFS (28μs), 是最短的帧间间隔,用来分隔开属于一次对话的各帧。一个站点应当能够在这段时间内从发送方式切换到接收方式。使用 SIFS 的帧类型有 ACK 帧、CTS 帧、 由过长的 MAC 帧分片后的
  • 数据帧、以及所有回答 AP 探询的帧和在 PCF 方式中接入点 AP 发送出的任何帧。
    DCF 帧间间隔 DIFS (128μs), 它比短帧间间隔 SIFS 要长得多,在 DCF 方式中用来发送数据帧和管理帧。
# CSMA/CA 协议的工作原理

当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧,则不使用退避算法。

以下情况必须使用退避算法:

  • 在发送数据帧之前检测到信道处于忙状态时;
  • 在每一次重传一个数据帧时;
  • 在每一次成功发送后要连续发送下一个帧时 (这是为了避免一个站点长时间占用信道)。
# CSMA/CA 协议的退避算法

在执行退避算法时,站点为退避计时器设置一个随机的退避时间:

  • 当退避计时器的时间减小到零时,就开始发送数据;
  • 当退避计时器的时间还未减小到零时而信道又转变为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过时间 DIFS 后,继续启动退避计时器。

在进行第 i 次退避时,退避时间在时隙编号 0, 1, … $2{2+i$- 1} 中随机选择一个,然后乘以基本退避时间 (也就是一个时隙的长度) 就可以得到随机的退避时间。这样做是为了使不同站点选择相同退避时间的概率减少。当时隙编号达到 255 时 (对应于第 6 次退避) 就不再增加了。

# CSMA/CA 协议的信道预约和虚拟载波监听

为了尽可能减少碰撞的概率和降低碰撞的影响,802.11 标准允许要发送数据的站点对信道进行预约。

  1. 源站在发送数据帧之前先发送一个短的控制帧,称为请求发送 RTS (Request To Send), 它包括源地址、目的地址以及这次通信 (包括相应的确认帧) 所需的持续时间。
  2. 若目的站正确收到源站发来的 RTS 帧,且媒体空闲,就发送一 个响应控制帧,称为允许发送 CTS (Clear To Send), 它也包括这次通信所需的持续时间 (从 RTS 帧中将此持续时间复制到 CTS 帧中)。
  3. 源站收到 CTS 帧后,再等待一段时间 SIFS 后,就可发送其数据帧。
  4. 若目的站正确收到了源站发来的数据帧,在等待时间 SIFS 后,就向源站发送确认帧 ACK。

除源站和目的站以外的其他各站,在收到 CTS 帧 (或数据帧) 后就推迟接入到无线局域网中。这样就保证了源站和目的站:间的通信不会受到其他站的干扰。

如果 RTS 帧发生碰撞,源站就收不到 CTS 帧,需执行退避算法重传 RTS 帧。

由于 RTS 帧和 CTS 帧很短,发送碰撞的概率、碰撞产生的开销及本身的开销都很小。而对于一般的数据帧,其发送时延往大于传播时延 (因为是局域网) , 碰撞的概率很大,且一旦发生碰撞而导致数据帧重发,则浪费的时间就很多,因此用很小的代价对信道进行预约往往是值得的。802.11 标准规定了 3 种情况供用户选择:

  • 使用 RTS 帧和 CTS 帧
  • 不使用 RTS 帧和 CTS 帧
  • 只有当数据帧的长度超过某一数值时才使用 RTS 帧和 CTS 帧

除 RTS 帧和 CTS 帧会携带通信需要持续的时间,数据帧也能携带通信需要持续的时间,这称为 802.11 的虚拟载波监听机制。

由于利用虚拟载波监听机制,站点只要监听到 RTS 帧、CTS 帧或数据帧中的任何一个,就能知道信道被占用的持续时间,而不需要真正监听到信道上的信号,因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题。

# MAC 地址、IP 地址以及 ARP 协议

(数据链路层)
MAC 地址是以太网的 MAC 子层所使用的地址;

(网际层)
IP 地址是 TCP/IP 体系结构网际层所使用的地址;
ARP 协议属于 TCP/IP 体系结构的网际层,其作用是已知设备所分配到的 IP 地址,使用 ARP 协议可以通过该 IP 地址获取到设备的 MAC 地址;

# MAC 地址

使用点对点信道的数据链路层不需要使用地址

使用广播信道的数据链路层必须使用地址来区分各主机

当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址;

在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制 MAC (Media Access Control), 因此这类地址被称为 MAC 地址;

  • MAC 地址一般被固化在网卡 (网络适配器) 的电可擦可编程只读存储器 EEPROM 中,因此 MAC 地址也
    被称为硬件地址;
  • MAC 地址有时也被称为物理地址。请注意:这并不意味着 MAC 地址属于网络体系结构中的物理层!

一般情况下,用户主机会包含两个网络适配器:有线局域网适配器 (有线网卡) 和无线局域网适配器 (无线网卡)。每个网络适配器都有一个全球唯一的 MAC 地址。 而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的 MAC 地址。综上所述,严格来说,MAC 地址是对网络。上各接口的唯一标识,而不是对网络上各设备的唯一标识。

第一字节的 b1 位 第一字节的 b0 位 MAC 地址类型 地址数量占比
0 0 全球管理 单播地址 厂商生产网络设备 (网卡,交换机,路由器) 时固化 1/4
0 1 全球管理 多播地址 标准网络设备所支持的多播地址,用于特定功能 1/4
1 0 本地管理 单播地址 由网络管理员分配,覆盖网络接口的全球管理单播地址 1/4
1 1 本地管理 多播地址 用户对主机进行软件配置,以表明其属于哪些多播组 1/4

注意:剩余 46 位全为 1 时,就是广播地址 FF-FF-FF-FF-FF-FF

总地址数量:2482^{48} =281,474,976,710,656 (二百八十多万亿)

# IP 地址

IP 地址是因特网 (Internet) 上的主机和路由器所使用的地址, 用于标识两部分信息:

  • 网络编号:标识因特网上数以百万计的网络
  • 主机编号:标识同一网络上不同主机 (或路由器各接口)

很显然,之前介绍的 MAC 地址不具备区分不同网络的功能。

  • 如果只是一个单独的网络,不接入因特网,可以只使用 MAC 地址 (这不是一般用户的应用方式)
  • 如果主机所在的网络要接入因特网,则 IP 地址和 MAC 地址都需要使用。

# ARP 协议

通过 IP 地址获取相应的 MAC 地址

# 集线器与交换机的区别

使用集线器的以太网在逻辑。上仍是一个总线网,各站共享总线资源,使用的还是 CSMA/CD 协议;

集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测 (由各站的网卡检测) ;

集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个网卡出了故障,不停地发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作。

以太网交换机通常都有多个接口。每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式。

以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞 (不使用 CSMA/CD 协议)。

以太网交换机一般都具有多种速率的接口,例如:10Mb/s、100Mb/s. 1Gb/s、 10Gb/s 接口的多种组合。

以太网交换机工作在数据链路层 (也包括物理层),它收到帧后,在帧交换表中查找帧的目的 MAC 地址所对应的接口号,然后通过该接口转发帧。

以太网交换机是一种即插即用设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的。

帧的两种转发方式:

  1. 存储转发
  2. 直通交换:采用基于硬件的交叉矩阵 (交换时延非常小,但不检查帧是否右差错)

集线器扩大了广播域与碰撞域
交换机扩大了广播域但是隔离了碰撞域

集线器

早期以太网的互连设备

工作在 OSI 体系结构的物理层

对接收到的信号进行放大、转发

使用集线器作为互连设备的以太网仍然属于共享总线式以太网。集线器互连起来的所有主机共享总线带宽,属于同一个碰撞域和广播域。

交换机

目前以太网中使用最广泛的互连设备

工作在 OSI 体系结构的数据链路层 (也包括物理层)

根据 MAC 地址对帧进行转发

使用交换机作为互连设备的以太网,称为交换式以太网。交换机可以根据 MAC 地址过滤帧,即隔离碰撞域

交换机的每个接口是一个独立的碰撞域

交换机隔离碰撞域但不隔离广播域 (VLAN 除外)

# 以太网交换机自学习和转发帧的流程

以太网交换机工作在数据链路层 (也包括物理层)

以太网交换机收到帧后,在帧交换表中查找帧的目的 MAC 地址所对应的接口号,然后通过该接口转发帧。

以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表。

# 以太网交换机的生成树协议 STP

添加冗余链路可以提高以太网的可靠性

但是,冗余链路也会带来负面效应一形 成网络环路

网络环路会带来以下问题:

  • 广播风暴,大量消耗网络资源,使得网络无法正常转发其他数据帧;
  • 主机收到重复的广播帧,大量消耗主机资源
  • 交换机的帧交换表震荡 (漂移)

以太网交换机使用生成树协议 STP (Spanning Tree Protocol), 可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题。

  • 不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的 (无逻辑环路) ;
  • 最终生成的树型逻辑拓扑要确保连通整个网络;
  • 当首次连接交换机或网络物理拓扑发生变化时 (有可能是人为改变或故障),交换机都将进行生成树的重新计算。

# 虚拟局域网 VLAN

虚拟局域网 VLAN (Virtual Local Area Network) 是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求。

# 802.1Q 帧

IEEE 802.1Q 帧 (也称 Dot One Q 帧) 对以太网的 MAC 帧格式进行了扩展,插入了 4 字节的 VLAN 标记。

VLAN 标记的最后 1 2 比特称为 VLAN 标识符 VID, 它唯一地标志了以太网帧属于哪一个 VLAN。

  • VID 的取值范围是 0 ~ 4095 (0 ~ 2122^{12}-1)
  • 0 和 4095 都不用来表示 VLAN, 因此用于表示 VLAN 的 VID 的有效取值范围是 1 ~ 4094。

802.1Q 帧是由交换机来处理的,而不是用户主机来处理的。

  • 当交换机收到普通的以太网帧时, 会将其插入 4 字节的 VLAN 标记转变为 802.1Q 帧,简称 “打标签’
  • 当交换机转发 802.1Q 帧时, 可能会删除其 4 字节 VLAN 标记转变为普通以太网帧,简称 “去标签”

# 交换机端口类型

交换机的端口类型有以下三种:

  • Access
  • Trunk
  • Hybrid

交换机各端口的缺省 VLAN ID

  • 在思科交换机。上称为 Native VLAN, 即本征 VLAN。
  • 在华为交换机。上称为 Port VLAN ID, 即端口 VLAN ID, 简记为 PVID。

# Access 端口

Access 端口一般用于连接用户计算机

Access 端口只能属于一个 VLAN

Access 端口的 PVID 值与端口所属 VLAN 的 ID 相同 (默认为 1)

Access 端口接收处理方法:

一般只接受 “未打标签” 的普通以太网 MAC 帧。根据接收帧的端口的 PVID 给帧 “打标签 "”,即插入 4 字节 VLAN 标记字段,字段中的 VID 取值与端口的 PVID 取值相等。

Access 端口发送处理方法:

若帧中的 VID 与端口的 PVID 相等,则 “去标签并转发该帧;否则不转发。

# Trunk 端口

Trunk 端口一般用于交换机之间或交换机与路由器之间的互连

Trunk 端口可以属于多个 VLAN

用户可以设置 Trunk 端口的 PVID 值。默认情况下,Trunk 端口的 PVID 值为 1。

Trunk 端口发送处理方法:

  • 对 VID 等于 PVID 的帧,“去标签” 再转发
  • 对 VID 不等于 PVID 的帧,直接转发

Trunk 端口接收处理方法:

  • 接收 “未打标签” 的帧,根据接收帧的端口的 PVID 给帧 “打标签”,即插入 4 字节 VLAN 标记字段,字段中的 VID 取值与端口的 PVID 取值相等。
  • 接收 “已打标签的帧”;

# Hybrid 端口

Hybrid 端口既可用于交换机之间或交换机与路由器之间的互连 (同 Trunk 端口),也可用于交换机与用户计算机之间的互连 (同 Access 端口)

Hybrid 端口可以属于多个 VLAN (同 Trun 端口)

用户可以设置 Hybrid 端口的 PVID 值。默认情况下,Hybrid 端口的 PVID 值为 1 (同 Trun 端口)

Hybrid 端口发送处理方法 (与 Trunk 端口不同)

查看帧的 VID 是否在端口的 “去标签” 列表中:

  • 若存在,则 " 去标签” 后再转发;
  • 若不存在,则直接转发;

Hybrid 端口接收处理方法 (同 Trunk 端口)

  • 接收 “未打标签” 的帧,根据接收帧的端口的 PVID 给帧” 打标签 " , 即插入 4 字节 VLAN 标记字段,字段中的 VID 取值与端口的 PVID 取值相等。
  • 接收 “已打标签的帧”;