目录
[1. 概述](#1. 概述)
[2. 链路层提供的服务](#2. 链路层提供的服务)
[3. 链路层的实现](#3. 链路层的实现)
[1. 综述](#1. 综述)
[2. 协议划分](#2. 协议划分)
[1. 链路层寻址和 ARP](#1. 链路层寻址和 ARP)
[(1)MAC 地址](#(1)MAC 地址)
[2. 以太网](#2. 以太网)
[① 数据宇段(46~1500 字节)](#① 数据宇段(46~1500 字节))
[② 目的地址(6 字节)](#② 目的地址(6 字节))
[③ 源地址(6 字节)](#③ 源地址(6 字节))
[④ 类型字段(2 字节)](#④ 类型字段(2 字节))
[⑤ CRC (4 字节)](#⑤ CRC (4 字节))
[⑥ 前同步码(8 字节)](#⑥ 前同步码(8 字节))
[3. 链路层交换机](#3. 链路层交换机)
[考虑 交换机的 优点和缺点。](#考虑 交换机的 优点和缺点。)
[考虑 路由器的 优点和缺点。](#考虑 路由器的 优点和缺点。)
[4. 虚拟局域网](#4. 虚拟局域网)
[(1)前言(局域网的 3 个缺点)](#(1)前言(局域网的 3 个缺点))
[① 缺乏流量隔离](#① 缺乏流量隔离)
[② 交换机的无效使用](#② 交换机的无效使用)
[③ 管理用户](#③ 管理用户)
一、链路层
1. 概述
我们将 运行 链路层协议(即 第 2 层)的 任何设备均 称为 节点(node) 。节点包括 主机、路由器、交换机 和 WiFi 接人点。 我们也 把沿着通信 路径连接 相邻节点的 通信信道称为 链路(link) 。为了将一个 数据报 从源主机 传输到目的 主机,数据报 必须通过沿端 到端路径上的 各段链路 传输。
举例来说,在 如下图中的 公司网络 中,考虑 从无线主机 之一向 服务器之一 发送一个 数据报。该 数据报将 实际通过 6 段 链路:发送 主机与 WiFi 接人点 之间的 WiFi 链路,接入点 和 链路层 交换机之间的 以太网链路,链路层交换机 与 路由器之间的 链路,两台 路由器之间的 链路,最后 是 交换机 和 服务器之间的 以太网链路。
在 通过特定的 链路时,传输节点 将数据报封装在 链路层帧 中,并将 该帧传送到 链路中。
这里考虑一个 交通运输的 类比例子。
假如 一个 旅行社计划 为游客开辟 从 美国新泽西州的普林斯顿 到 瑞士洛桑的 旅游路线。假定 该旅行社 认为 对于游客而言 最为便利的方案 是:从 普林斯顿乘豪华大轿车 到 JFK 机场,然后乘飞机从 JFK 机场去 日内瓦机场,最后 乘火车 从日内瓦机场 到 洛桑火车站。一旦 该旅行社 作了这 3 项 预定,普林斯顿豪华大轿车公司 将负责 将游客 从普林斯顿 带到 JFK,航空公司 将 负责将游客 从 JFK 带到 日内瓦,瑞土火车服务 将负责 将游客 从日内瓦 带到洛桑。
该 旅程中 3 段中的 每一段 都在 两个 "相邻" 地点之间是 "直达的" 。注意到 ++这 3 段运输是由不同的 公司管理,使用了 完全不同的 运输方式(豪华大轿车、飞机和火车)++。尽管运输方式不同,但它们 都提供了 将旅客从一个地点 运输到 相邻地点的 基本服务。
在这个 运输类比 中,++一个游客 好比一个 数据报,每个 运输区段好 比一条 链路,每种 运输方式 好比一种 链路层协议,而 该旅行社好比 一个路由选择 协议++。
2. 链路层提供的服务
(1)成帧(framing)
在 每个网络层 数据报经 链路传送 之前,几乎 所有的 链路层协议 都要将 其用链路层帧 封装起来。
一个帧 由一个数据字段 和 若干首部字段 组成,其中 网络层数据报 就插在 数据字段 中。帧的结构 由链路层协议 规定。
(2)链路接入
媒体访问控制(Medium Access Control,MAC)协议规定了 帧 在链路上传输的 规则。
对于在 链路的一端 仅有一个 发送方、链路的另一端 仅有一个 接收方的 点对点 链路,MAC 协议 比较简单(或者 不存在),即 无论何时 链路 空闲,发送方 都能够 发送帧 。更有趣的情况 是当多个节点 共享单个 广播链路时,即所谓 多路访问问题 ,这里,MAC 协议用于 协调 多个节点 的帧传输。
(3)可靠交付
当 链路层协议 提供 可靠交付服务时,它 保证无差错地 经链路层 移动每个网络层 数据报。
某些 运输层协议(例如 TCP) 也提供 可靠交付 服务。与 运输层 可靠交付服务 类似,链路层的 可靠交付服务 通常是通过 确认 和 重传 取得的。
链路层 可靠交付服务 通常用于 易于产生 高差错率的 链路,例如 无线链路,其 目的是 本地(也就是在 差错发生的 链路上)纠正一个 差错,而 不是通过 运输层 或 应用层协议 迫使 进行端到端的 数据重传。
然而,对于 低比特差错的 链路,包括 光纤、同轴电缆 和 许多 双绞铜线链路,链路层 可靠交付可能会 被认为是一种 不必要的 开销。由于 这个原因,许多 有线的 链路层协议 不提供 可靠交付服务。
(4)差错检测和纠正
当 帧中的一个 比特作为 1 传输时,接收方 节点中的 链路层硬件 可能不正确地 将其 判断为 0,反之亦然。
这种 比特差错是 由信号衰减 和 电磁噪声 导致的。因为 没有必要 转发一个 有差错的 数据报,所以 许多链路层协议 提供一种 机制来 检测这样的 比特差错。通过 让发送节点 在帧中 包括差错检测 比特,让 接收节点进行 差错检查,以此 来完成 这项工作。
因特网的 运输层 和 网络层 也提供了 有限形式的 差错检测,即 因特网 检验和。链++路层的差错检测 通常 更复杂,并且用 硬件实现。++
差错纠正 类似于 差错检测,区别在于 接收方 不仅能 检测帧中 出现的 比特差错,而且能够 准确地 确定帧中的 差错出现的 位置(并因此 纠正这些 差错)。
3. 链路层的实现
链路层的主体部分 是在 网络适配器(networkadapter) 中 实现的,网络适配器 有时 也称为网络接口卡(Network Interface Card, NIC) 。位于 网络适配器核心 的是 链路层控制器 ,该控制器 通常是一个 实现了 许多链路层 服务(成帧、链路接人、差错检测等)的 专用芯片。因此,链路层控制器 的许多功能是用 硬件实现的。
- 在 发送端 ,控制器 取得了 由协议栈较高层 生成并存储在主机内存中的 数据报,++在 链路层帧中 封裝 该数据报(填写 该帧的 各个字段),然后 遵循链路 接人协议 将该帧 传进通信链路 中。++
- 在 接收端 ,++控制器 接收了 整个帧,抽取出 网络层 数据报。++ 如果 链路层 执行差 错检测,则 需要 发送控制器 在该帧的 首部设置差 错检测 比特,由 接收控制器 执行 差错检测。
上图显示了 与 主机总线(例如一条 PCI 或 PCI-X 总线)连接的 网络适配器,这里 它 看起来非常像 与 其他主机组件 连接的 任何其他 I/O 设备。
图中还 显示了 **尽管 大部分 链路层是在 硬件中 实现的,但 部分链路层 是在 运行于主机 CPU 上的 软件中实现的。**链路层的 软件组件 实现了 高层链路层 功能,如 组装链路层寻址信息 和 激活控制器 硬件。
在 接收端,链路层软件响应 控制器 中断(例如,由于一个 或 多个帧的 到达),处理 差错 条件 和 将数据报 向上传递给 网络层。 所以,链路层是 硬件 和 软件的 结合体,即 此处 是 协议栈中软件 与 硬件交接的地方。
二、多路访问链路和协议
1. 综述
有 两种类型的 网络链路:点对点链路 和 广播链路。
点对点链路(point-to-point link) 由 ++链路一端的 单个发送方 和 链路另一端的单个接收方 组成。++许多链路层协议 都是为 点对点链路 设计的,如 点对点协议(point- to-point protocol,PPP) 和 高级数据链路控制 (high-level data link control,HDLC)就是 两种这样的 协议。
第二种类型的 链路是 广播链路(broadcast link) ,它能够 ++让 多个发送 和 接收节点 都连接到 相同的、单一的、共享的 广播信道上++ **。**这里 使用术语 "广播" 是因为 当任何一个节点传输 一个帧时,信道广播该帧,每个 其他节点 都收到一个 副本。
先 研究一个 对链路层 很重要的 问题:++如何 协调 多个发送 和 接收节点 对一个 共享广播信道的访问++ ,这就是 多路访问问题(multiple access problem) 。广播信道 通常 用于 局域网中,局域网 是一个 地理上集中在 一座建筑物中(或者 在一个 公司,或者在 大学校园)的网络。
计算机网络 广播信道上的 节点 既能够 发送也能够 接收。
举个例子,许多读者 都很熟悉的地方,即 一间教室,在那里 老师们 和 同学们 同样共享 相同的、单一的 广播媒体。在 这个例子中,一个中心问题是 确定谁以及 在什么时候 获得 说话权力(也就是 向信道传输)。作为人类,为了 共享这种 广播信道,我们 已经演化 得到了一个 精心设计 的 协议集了:
- "给每个人一个讲话的机会。"
- "该你讲话时你才说话。"
- "不要一个人独占整个谈话。"
- "如果有问题请举手。"
- "当有人讲话时不要打断。"
- '当其他人讲话时不要睡觉。"
计算机网络 有 类似的 协议,也就是所谓的 多路访问协议(multiple access protocol) ,即
++节点 通过这些协议来 规范它们 在共享的 广播信道上的 传输行为++。
下图中,在 各种各样的 网络环境下 需要 多路访问协议,包括 有线 和 无线接入网,以及 卫星网络。尽管 从技术上讲 每个节点 通过它的 适配器访问 广播信道,但在这里,我们 将把节点 作为 发送和接收设备。在实践中,++数以百计 或者 甚至 数以千计个 节点 能够通过一个 广播信道 直接通信++。
因为 所有的 节点都 能够 传输帧,所以 多个节点 可能会 同时传输帧。当发生 这种情况时,所有节点 同时接到 多个帧 ;这就是说,传输的帧 在所有的 接收方处 **碰撞 (collide)**了。
通常,当 碰撞发生 时,没有一个 接收节点 能够 有效地 获得任何 传输的帧;在 某种意义下,碰撞帧的信号 纠缠在 一起。因此,**++涉及 此次碰撞的 所有帧 都丢失了,在 碰撞时间间隔中的 广播信道 被浪费了。++**显然,如果 许多节点 要频繁地 传输帧,许多 传输将 导致碰撞,广播信道的大量 带宽 将被 浪费掉。
当 多个节点 处于活跃状态 时,为了 确保广播信道 执行有用的 工作,以 某种方式 协调 活跃节点的传输 是必要的。这种 协调工作由 多路访问协议 负责。
我们 能够将 任何多路访问协议 划分为 3 种 类型之一:信道划分协议(channel partitioning proto-col)、随机接入协议(random access protocol) 和 轮流协议(taking-turns protocol)。
在理想情况下,对于速率为 R bps 的 广播信道,多路访问协议 应该 具有以下 所希望的 特性:
- 1)++当仅有一个 节点发送数据时,该节点具有 R bps 的 吞吐量++;
- 2)++当有 M 个节点发送数据 时,每个节点 吞吐量为 R/M bps++。这 不必要求 M 个节点中的 每一个 节点总是 有 R/M 的 瞬间速率,而是 每个节点 在一些 适当定义的 时间间隔 内应该有 R/M 的平均传输速率。
- 3)协议是 分散的;这就是说 ++不会因 某主节点故障 而使整个 系统崩溃++。
- 4)协议是 简单的,使实现 不昂贵。
2. 协议划分
(1)信道划分协议
时分多路复用(TDM)和 频分多路复用(FDM) 是两种 能够用于 在所有 共享信道节点 之间划分 广播信道带宽的 技术。
举例来说,假设 一个支持 N 个节点的 信道且信道的 传输速率 为 R bps。TDM 将时间 划分为时间帧(timeframe) ,并进一步 划分 每个时间帧 为 N 个 时隙(slot) 。(不应当把 TDM 时间帧 与在 发送 和 接收适配器 之间 交换的 链路层数据单元 相混淆,后者也被 称为 帧。为了 减少混乱,这里 将链路层交换的 数据 单元称为 分组。)
然后把 每个时隙 分配给 N 个节点中的 一个。无论何时 某个节点 在有分组要 发送的 时候,它在循环的 TDM 帧中 指派给它的 时隙内 传输分组 比特。通常,**选择的 时隙长度 应使一个 时隙内 能够传输 单个分组。**下图 表示一个 简单的 4 个节点的 TDM 例子。
TDM 消除了碰撞 而且 非常公平:每个节点 在每个帧时间内 得到了 专用的 传输速率 R/N bps。然而 它有 两个主要 缺陷:
- 节点 被限制于 R/N bps 的 平均速率,即使当它是 唯一 有分组要发送的 节点时。
- 节点 必须 总是等待 它在 传输序列中的 轮次,即我们 再次看到,即使它是 唯一一个 有帧要 发送的节点。
TDM 在时间上 共享广播信道,而 FDM 将 R bps 信道 划分为 不同的 频段(每个 频段 具有 R/N 带宽),并把 每个频率 分配给 N 个节点 中的一个。因此 FDM 在 单个较大的 R bps 信道中 创建了 N 个较小的 R/N bps 信道。
FDM 也有 TDM 同样的 优点 和 缺点。 它 避免了碰撞,在 N 个节点之间 公平地 划分了带宽。然而,FDM 也有 TDM 所具有的 主要缺点,也就是 限制 一个节点 只能 使用 R/N 的带宽,即使 当它是 唯一一个 有分组要 发送的 节点时。
(2)随机接入协议
在 随机接人协议 中,一个 传输节点 总是以 信道的 全部速率(即 R bps)进行发送。当 有碰撞时,涉及碰撞的 每个节点 反复地 重发它的 帧(也就是分组),到 该帧无碰撞地 通过为止。
但是 当一个节点 经历一次 碰撞时,它 不必立刻 重发该帧。相反,它在 重发该帧 之前 等待一个 随机时延。涉及 碰撞的 每个节点独立地 选择随机 时延。
因为 该随机时延是 独立地 选择的,所以 下述现象是 有可能的:这些节点之一所 选择的时延 充分小于 其他碰撞节点的 时延,并 因此能够 无碰撞地 将它的帧 在信道中 发出。
(3)轮流协议
多路访问协议的 两个理想特性 是:① 当只有一个节点活跃吋,该活跃节点具有 R bps 的 吞吐量;② 当有 M 个节点活跃时,每个活跃节点的 吞吐量 接近 R/M bps。
第一种 轮流协议 是 轮询协议(polling protocol) 。这种协议 要求这些 节点之一 要被指 定为主节点。主节点 以循环的 方式 **轮询(poll)**每个节点。
- 特别的,主节点 首先 向 节点 1 发送一个报文,告诉它(节点1)能够传输的帧的 最多数量。
- 在 节点 1 传输了 某些帧后,主节点 告诉 节点 2 它(节点 2)能够 传输的帧的 最多数量。(++主节点 能够通过观察 在信道上 是否缺乏 信号,来决定一个节点 何时完成了 帧的 发送++)
- 上述过程 以这种方式 继续进行,主节点 以循环的 方式轮询了 每个节点。
轮询协议 消除了 困扰 随机接入协议 的 碰撞 和 空时隙,这使得 轮询 取得高得多的 效率。但是它也有一些 缺点:
- 第一个 缺点 是 该协议 引入了 轮询时延,即 通知一个 节点 "它可以传输" 所需的 时间。例如,如果 只有一个节点是 活跃的,那么 这个节点 将以 小于 R bps 的速率 传输,因为 每次 活跃节点 发送了 它 最多数量的帧 时,主节点 必须 依次 轮询每一个 非活跃的 节点。
- 第二个 缺点 可能 更为严重,就是 如果 主节点 有故障,整个 信道都 变得 不可操作。
第二种 轮流协议 是 令牌传递协议(token-passing protocol) 。在 这种协议中 没有 主节点。一个 称为 **令牌(token)**的 小的特殊帧 在节点之间 以 某种固定 的 次序 进行交换。
例如,节点 1 可能 总是 把令牌 发送给 节点 2,节点 2 可能 总是把 令牌发送 给 节点 3,而节点 N 可能总是 把 令牌发送 给节点 1。当一个 节点 收到令牌 时,仅 当它有一些帧 要发送 时,它才 持有 这个令牌;否则,它 立即向 下一个节点 转发 该令牌。
当一个 节点 收到令牌 时,如果 它确实 有帧要 传输,它 发送 最大数目的 帧数,然后 把令牌转发 给下一个 节点。
令牌传递 是分散的,并有 很高的 效率。但是 它也有 自己的一些 问题。
例如,++一个 节点的故障 可能会 使整个 信道崩溃++ 。或者 ++如果一个 节点偶然 忘记了 释放令牌,则 必须 调用 某些 恢复步骤 使令牌 返回 到循环中 来++。
三、交换局域网
1. 链路层寻址和 ARP
(1)MAC 地址
事实上,并不是 主机或路由器 具有 链路层地址,而是 ++它们的 适配器(即 网络接口)具有链路层地址。++
因此,具有 多个网络接口的 主机或路由器 将具有 与之相关联的 多个链路层地址,就像 它也具有与之相关联的 多个 IP 地址 一样。
注意的,链路层交换机 并不具有 与它们的 接口(这些接口是 与 主机和路由器 相连的)相关联的 链路层地址。 这是因为 ++链路层 交换机的任务 是在 主机与路由器 之间 承载数据报++;交换机 透明地执行 该项任务,这就是说,主机或路由器 不必明确地 将帧寻址到 其间的交换机。下图中说明了 这种情况。
链路层地址有各种不同的称呼:LAN 地址(LAN address)、物理地址(physicaladdress)或 MAC 地址(MAC address)。
对于大多数局域网(包括 以太网 和 802.11 无线局域网)而言,MAC 地址长度为 6 字节,共有 个可能的 MAC 地址。这些 6 个字节地址 通常用 十六进制 表示法,地址的 每个字节 被表示为 一对 十六进制数。
尽管 MAC 地址被 设计为 永久的,但用 软件改变一块 适配器的 MAC 地址现在是 可能的。
MAC 地址的一个 有趣性质 是没有 两块适配器 具有相同的 地址。特别是,当一个公司要 生产适配器 时,它 支付象征性的 费用 购买组成 个地址的 一块 地址空间。
IEEE 分配这块 个地址的 方式是:固定一个 MAC 地址的前 24 比特,让公司自己为 每个 适配器 生成后 24 比特的唯一组合。
适配器的 MAC 地址具有 扁平结构(这与 层次结构 相反),而且 不论适配器 到哪里用 都不会变化。带有 以太网接口的 便携机 总具有 同样的 MAC 地址,无论 该计算机 位于何方。具有802.11 接口的一台 智能手机 总是具有 相同的 MAC 地址,无论 该智能手机 到哪里。
++与之形成 对照的是,IP 地址具有 层次结构(即 一个网络部分 和 一个主机部分),而且当主机移动时,主机的 IP 地址 需要改变,即改变 它所连接到的 网络。++
适配器的 MAC 地址 与 人的社会保险号 相似,后者 也具有 扁平寻址 结构,而且 无论人 到哪里该 号码都不会 变化。IP 地址 则与一个人的 邮政地址 相似,它是有 层次的,无论何时 当人搬家 时,该 地址都 必须改变。就像 一个人可能发现邮政地址 和 社会保险号 都有用 那样,一台主机 具有一个网络层地址 和 一个 MAC 地址是 有用的。
当 某适配器 要向某些目的适配器 发送一个 帧时,发送适配器 将目的适配器的 MAC 地址 插人到该 帧中,并将 该帧发送到局城网 上。
一台交换机 偶尔 将一个 入帧 广播到 它的 所有接口,因此 一块适配器 可以 接收一个 并非向它 寻址的帧。这样,++当 适配器 接收到一个帧 时,将检查 该帧中的 目的 MAC 地址 是否 与 它自己的 MAC 地址匹配。如果匹配,该 适配器 提取出封装的 数据报,并将 该数据报 沿协议栈 向上传递。如果 不匹配,该 适配器 丢弃该帧,而 不会向上 传递该网络层 数据报。++ 所以,仅当 收到 该帧时,才会 中断目的地。
然而,有时 某发送适配器的确 要让 局域网上 所有其他 适配器 来接收 并处理 它打算 发送的帧。在这种情况下,发送适配器 在该帧的 目的地址字段中 插入一个特殊的 MAC 广播地址(broadeast address) 。对于 使用 6 字节 地址的 局域网(例如以太网和 802.11) 来说,广播地址是 48 个连续的 1 组成的 字符串(即以 十六进制 表示法 表示的 FF-FF-FF-FF-FF-FF)。
(2)地址解析协议(ARP)
因为 存在 网络层地址(例如,因特网的 IP 地址)和 链路层地址(即 MAC 地址),所以 需要在它们之间 进行转换。对于 因特网 而言,这是 **地址解析协议(Address ResolutionProtocol, ARP)**的任务。
举个例子,每台 主机 和 路由器 有一个单一的 IP 地址 和 单一的 MAC 地址。与 以往一样,IP 地址以点分 十进制 表示法 表示,MAC 地址以 十六进制 表示法 表示。++现在假设 IP 地址为 222.222.222.220 的主机要向主机 222.222.222.222 发送 IP 数据报。++
在本例中,源 和 目的 均位于相同的子网 中。为了发送数据报,该源 必须要向 它的适配器不仅 提供 IP 数据报,而且要 提供 目的主机 222.222.222.222 的 MAC 地址。然后 发送适配器 将构造一个 包含 目的地 的 MAC 地址的 链路层帧,并 把该帧发送进 局域网。
在这里的重要问题是,发送主机 如何确定 IP 地址为 222.222.222.222 的目的主机的 MAC 地址呢?
这里使用 ARP。++在发送主机中的 ARP 模块将 取在 相同 局域网 上的 任何 IP 地址作为输人,然后返回相应的 MAC 地址。++
在这个例子中,发送主机 222.222.222.220 向它的 ARP 模块提供了 IP 地址 222.222.222.222,并且其 ARP 模块返回了 相应的 MAC 地址 49-BD-D2-C7-56-2A。因此 我们 看到了 ARP 将一个 IP 地址解析为一个 MAC 地址。
在 很多方面它和 DNS 类似,DNS 将 主机名 解析为 IP 地址。然而,这 两种解析器 之间的一个 重要区别是,DNS 为在 因特网中 任何地方的 主机解析 主机名,而 ARP 只为 在同一个 子网上的 主机 和 路由器 接口解析 IP 地址。
如果 美国加利福尼亚州 的一个 节点试图用 ARP 为 美国密西西比州 的一个 节点解析 IP 地址,ARP 将返回 一个 错误。
它是如何工作的呢?
每台主机 或 路由器 在其内存中 具有一个 ARP 表(ARP table) ,这张表 包含 IP 地址到 MAC 地址的 映射关系。下图 显示了在主机 222.222.222.220 中可能看到的 ARP 表中的 内容。该 ARP 表也 包含一个 **寿命(TTL)**值,它 指示了 从表中 删除 每个映射的 时间。注意到 这张表 不必 为该子网上的 每台主机 和 路由器 都包含一个 表项;某些 可能从来 没有 进入到 该表中,某些可能 已经过期。从 一个表项 放置到 某 ARP 表中 开始,一个 表项 通常的 过期 时间是 20 分钟。
现在假设主机 222.222.222.220 要 发送一个 数据报,该 数据报 要 IP 寻址到 本子网上 另一台 主机 或 路由器。
发送主机 需要 获得给定 IP 地址的 目的主机的 MAC 地址。如果 发送方的 ARP 表 具有 该目的节点的 表项,这个任务是 很容易 完成的。但如果 ARP 表中 当前没有 该目的主机的 表项,又该怎么办 呢?
特别的,假设 222.222.222.220 要向 222.222.222.222 发送数据报。在这种情况下,发送方用 ARP 协议 来 解析这个 地址。
首先,发送方构造一个称为ARP 分组(ARP packet) 的 特殊分组。一个 ARP 分组 有几个字段,包括 发送 和 接收 IP 地址及 MAC 地址。ARP 查询分组 和 响应分组 都具有 相同的 格式。ARP 查询分组的 目的是 询问子网上 所有 其他主机 和 路由器,以确定 对应于要 解析的 IP 地址的那个 MAC 地址。
222.222.222.220 向它的 适配器 传递一个 ARP 查询分组,并且 指示适配器 应该用 MAC 广播地址(即 FF-FF-FF-FF-FF-FF)来 发送 这个分组。适配器在 链路层帧 中封装这个 ARP 分组,用 广播地址 作为帧的 目的地址,并将 该帧传输进 子网中。
使用 社会保险号 / 邮政地址 进行类比,一次 ARP 查询 等价于一个人 在 某公司(比方说 AnyCorp)一个 拥挤的 房间大喊:"邮政地址是 加利福尼亚州帕罗奥图市 AnyCorp 公司 112 房间13 室的 那个人的 社会保险号 是什么?"
包含该 ARP 查询的帧 能被 子网上 的所有 其他适配器 接收到,并且 每个适配器 都把在 该帧中的 ARP 分组 向上传递 给 ARP 模块。这些 ARP 模块中的 每个都检查它的 IP 地址是否与 ARP 分组中的目的 IP 地址 相匹配。++与之 匹配的一个 给查询主机 发送回一个 带有所 希望映射的 响应 ARP 分组++。
然后查询主机 222.222.222.220 能够 更新它的 ARP 表,并 发送 它的 IP 数据报,该 数据报封装 在一个 链路层帧 中,并且 该帧的 目的 MAC 就是 对先前 ARP 请求进行 响应的 主机 或 路由器 的 MAC 地址。
注意:
首先,查询 ++ARP 报文是 在 广播帧 中发送的,而 响应 ARP 报文在一个 标准帧 中发送++ 。其次,ARP 是 即插即用的,这就是说,一个 ARP 表是 自动建立的,即 它不需要 系统管理员来 配置。并且 如果 某主机 与 子网 断开连接,它的 表项最 终会从留在 子网中的 节点的表中 删除掉。
ARP 是一个 链路层协议 还是一个 网络层协议呢?
如我们 所看到的 那样,一个 ARP 分组 封装在 链路层帧 中,因而在 体系结构 上 位于链路层 之上。然而,一个 ARP 分组 具有包含 链路层地址的 字段,因而 可认为是 链路层协议 ,但它也 包含 网络层 地址,因而 也可 认为是为 网络层协议。
所以,可能最好把 ARP 看成是 跨越链路层 和 网络层边界 两边的 协议。
(3)发送数据报到子网外
当 子网中的 某主机要 向 子网之外(也就是 跨越路由器的 另一个子网)的 主机 发送网络层数据报 的情况。下图 显示了一个 由一台路由器 互联 两个子网所 组成的 简单网络。
每台 主机 仅有一个 IP 地址 和 一个 适配器。但是,++一台路由器 对它的 每个接口 都有一个 IP 地址。对 路由器的 每个接口,(在 路由器中)也有一个 ARP 模块 和 一个适配器。++
上图中的 路由器 有 两个接口,所以 它有 两个 IP 地址、两个 ARP 模块 和 两个适配器。当然,网络中的 每个适配器 都有 自己的 MAC 地址。
还要 注意到 子网 1 的 网络地址为 111.111.111/24,子网 2 的 网络地址 为 222.222.222/24。因此,与 子网 1 相连的 所有接口 都有 格式为 111.111.111.xxx 的地址,与 子网 2 相连的 所有接口都有格式为 222.222.222.xxx 的地址。
现在考察 子网 1 上的 一台主机 将向 子网 2 上的 一台主机 发送 数据报。假设 主机111.111.111.111 要向主机 222.222.222.222 发送一个 IP 数据报。
相同的,发送主机 向它的 适配器 传递 数据报。但是,发送主机 还 必须 向它的 适配器 指示一个 适当的目的 MAC 地址。
**该 适配器 应该 使用什么 MAC 地址呢 ?**有人也许 大胆猜测,这个 适当的 MAC 地址 就是 主机 222.222.222.222 的 适配器地址,即 49-BD-D2-C7-56-2A。然而,这个 猜测 是错误的!
如果 发送适配器 要用那个 MAC 地址,那么 子网 1 上所有的 适配器 都 不会费心 将该 IP 数据报 传递到 它的 网络层,因为 该帧的 目的地址 与 子网 1 上 所有 适配器的 MAC 地址都将 不匹配。这个 数据报将 只有死亡。
为了 使一个 数据报 从 111.111.111.111 到 子网 2 上的主机,该 数据报 必须 首先 发送 给路由器 接口 111.111.111.110,它是 通往 最终目的地 路径上的 第一跳 路由器的 IP 地址。因此,对于 该帧 来说,适当的 MAC 地址 是 路由器 接口 111.111.111.110 的 适配器地址,即 E6-E9-00-17-BB-4B。
发送主机 将 通过 ARP 获得111.111.111.110 的 MAC 地址。 一旦 发送适配器 有了 这个 MAC地址,它 创建一个 帧(包含了 寻址到 222.222.222.222 的 数据报),并把 该帧发送到 子网 1 中。
在 子网 1 上的 路由器适配器 看到 该链路层帧是 向它 寻址的,因此 把这个帧 传递给 路由器的 网络层。
接下 来要将 该数据报 从 路由器 移动到 目的地。路由器 现在 必须决定 该数据报 要被 转发的 正确接口。这是 通过查询路由器中的 转发表来完成的。转发表 告诉 这台路由器 该 数据报 要通过 路由器 接口 222.222.222.220 转发。然后 该接口 把这个 数据报传递 给它的 适配器,适配器把 该数据报 封裝到一个 新的帧 中,并且 将帧 发送进 子网 2 中。
这时,该帧的目的 MAC 地址 确实是 最终目的地 MAC 地址。
路由器 通过 ARP 获得这个 目的地址 的 MAC 地址。
2. 以太网
(1)以太网历史
Bob Metcalfe 和 David Boggs 在 20 世纪 70 年代中期 发明 初始的 以太局域网。初始的 以太局域网 使用 同轴电缆总线来 互联节点。以太网的 总线拓扑 实际上 从 20 世纪 80 年代 到 90 年代中期 一直 保持不变。使用 总线拓扑的 以太网 是一种 广播局域网,即 所有 传输的帧 传送到 与 该总线连接的 所有适配器 并被 其处理。
到了 20 世纪 90 年代 后期,大多数公司 和 大学使 用一种 基于集线器 的星形拓扑 以太网 安装替代了 它们的 局域网。在 这种安装中,主机(和 路由器)直接用 双绞对铜线 与 一台集线器 相连。**集线器(hub)**是一种 物理层设备,它 作用于 各个比特而不是 作用于帧。
当 表示一个 0 或 一个 1 的比特 到达一个 接口 时,集线器 只是 重新生成 这个比特,将 其能量强度 放大,并 将该比特 向其他 所有接口 传输出去。因此,**采用 基于集线器的 星形拓扑 的 以太网 也是一个 广播局域网,即 无论何时 集线器 从它的一个接口 接收到 一个比特,它 向其 所有其他接口 发送 该比特的 副本。**特别的,如果 某集线器 同时 从两个不同的 接口 接收到帧,将出现 一次 碰撞,生成该帧的 节点必须 重新 传输 该帧。
在 21 世纪初,以太网 又经历了 一次重要的 革命性 变化。以太网 安装 继续使用 星形拓扑,但是 位于中心的 集线器 被 交换机(switch) 所 替代。交换机 不仅是 "无碰撞的",而且 也是 名副其实的 存储转发 分组 交换机;但是 与运行在 高至 第三层 的路由器 不同,交换机 仅运行 在 第二层。
(2)以太网帧结构
考虑 从一台主机 向另一台 主机 发送一个 IP 数据报,且 这两台主机 在相同的 以太局域 网上。(尽管 以太网帧的 负载 是一个 IP 数据报,但我们 注意到 以太网帧 也能够 承载 其他网络层 分组)
设 发送适配器(即 适配器 A)的 MAC 地址是 AA-AA-AA-AA-AA-AA,接收 适配器(即 适配器 B)的 MAC 地址 是 BB-BB-BB-BB-BB-BB。发送适配器 在一个 以太网帧 中 封装了一个 IP 数据报,并把 该帧 传递到 物理层。接收适配器 从物理层 收到这个 帧,提取出 IP 数据报,并将该 IP 数据报 传递给 网络层。
① 数据宇段(46~1500 字节)
这个字段 承载了 IP 数据报。以太网的 **最大传输单元(MTU)**是 1500 字节。这意味着 如果 IP 数据报超过了 1500 字节,则 主机 必须将 该数据报 分片。数据字段的 最小长度 是 46 字节。这意味着如果 IP 数据报 小于 46 字节,数据报 必须 被填充到 46 字节。
当采用 填充时,传递 到网络层的 数据包括 IP 数据报 和 填充部分。网络层 使用 IP 数据报 首部中的 长度字段来 去除 填充部分。
② 目的地址(6 字节)
这个字段 包含 目的适配器 的 MAC 地址,即 BB-BB-BB-BB-BB-BB。当 适配器 B 收到一个以太网帧,帧的 目的地址 无论是 BB-BB-BB-BB-BB-BB,还是 MAC 广播地址,它 都将该帧的 数据字段 的内容 传递给 网络层;如果它 收到了 具有任何 其他 MAC 地址的帧,则丢弃之。
③ 源地址(6 字节)
这个字段 包含了 传输该帧 到局域网上的 适配器 的 MAC 地址,在本例中为 AA-AA-AA-AA-AA-AA。
④ 类型字段(2 字节)
类型字段 允许 以太网 复用 多种网络层 协议。主机 能够 使用 除了 IP 以外的 其他网络层协议。事实上,一台给 定的 主机可以 支持多种 网络层协议,以 对不同的 应用采用 不同的 协议。 因此,当 以太网帧 到达 适配器 B,适配器 B 需要知道 它应该 将数据字段的 内容传递 给哪个 网络层协议(即 分解)。IP 和 其他 链路层 协议(例如,Novell IPX 或 AppleTalk)都有 它们 各自的、标准化的 类型编号。
此外,ARP 协议 有自己的 类型编号,并且 如果 到达的帧 包含 ARP 分组(即 类型字段的 值为 十六进制 的 0806),则该 ARP 分组将 被多路分解 给 ARP 协议。
注意到 该类型字段 和 网络层 数据报 中的 协议字段、运输层报文段 的 端口号字段 相类似;所有 这些字段 都是 为了把一层中 的某协议 与上一层的 某协议 结合起来。
⑤ CRC (4 字节)
CRC(循环冗余检测)字段的 目的是 使得 接收适配器(适配器 B) 检测帧 中是 否 引人了差错。
⑥ 前同步码(8 字节)
以太网帧 以一个 & 字节 的 前同步码(Preamble)字段 开始。该 前同步码的 前 7 字节的 值都是 10101010;最后一个 字节是 10101011。
前同步码 字段的 前 3 字节 用于 "唤醒" 接收适配器,并且 将它们的 时钟 和 发送方 的时钟 同步。
为什么这些时钟会不同步呢?
适配器 A 的 目的 是 根据 以太局域网 类型的 不同,分别以 10Mbps、100Mbps 或者 1Gbps 的速率传输帧。然而,没有 什么是 完美无缺的,因此 适配器 A 不会 以精确的 额定速率 传输帧;相对于 额定速率 总有一些 漂移,局域网 上的 其他适配器 不会预先 知道 这种漂移的。
接收适配器 只需通过 锁定 前同步码的 前 7 字节 的比特,就 能够锁定 适配器 A 的 时钟。前同步码 的 第 8 个字节 的最后 两个比特(第一个 出现的 两个 连续的 1)警告 适配器 B,"重要的内容" 就要到来了。
**所有的 以太网技术 都向 网络层 提供 无连接服务。**这就是说,当 适配器 A 要向 适配器 B 发送一个 数据报 时,适配器 A 在一个 以太网帧中 封装该 数据报,并且 把该帧 发送到 局域网 上,没有 先与 适配器 B 握手。这种 第二层 的无连接服务 类似于 IP 的 第三层 数据报 服务 和 UDP 的第四层 无连接 服务。
**以太网技术 都向 网络层 提供 不可靠服务。**特别的,当 适配器 B 收到一个 来自 适配器 A 的帧,它对 该帧 执行 CRC 校验,但是 当该帧 通过 CRC 校验 时 它既 不发送 确认帧;而 当该帧 没有 通过 CRC 校验时 它也 不发送否定 确认帧。
++当 某帧 没有通过 CRC 校验,适配器 B 只是 丢弃该帧++ 。因此,适配器 A 根本 不知道 它 传输的帧 是否 到达了 B 并通过了 CRC 校验。(在链路层)缺乏 可靠的 传输 有助于 使得 以太网 简单和 便宜。但是 它也意味着 传递到 网络层的 数据报流 能够有 间隙。
如果 由于丢弃了 以太网帧 而存在 间隙,主机 B 上的 应用 也会看见 这个 间隙吗?
这只 取决于 该应用 是使用 UDP 还是 使用 TCP。如果 应用 使用的是 UDP,则 主机 B中的 应用的确 会看到 数据中的 间隙。另一方面,如果 应用 使用的是 TCP,则 主机 B 中的 TCP 将 不会确认 包含 在丢弃帧中的 数据,从而 引起 主机 A 的 TCP 重传。
注意:
当 TCP 重传数据 时,数据 最终将回到 曾经 丢弃它的 以太网适配器。因此,从这种 意义上 来说,以太网 的确重传了 数据,尽管 以太网 并不知道 它是正在 传输一个 具有 全新数据的 全新数据报,还是 一个包含 已经被 传输过 至少一次的 数据的 数据报。
3. 链路层交换机
交换机的 任务是 接收 入链路层帧 并将它们 转发到出 链路 。交换机自身 对子网中的 主机和路由器 是 透明的(transparent);这就是说,某 主机 / 路由器 向另一个 主机 / 路由器 寻址一个帧(而不是 向交换机 寻址该帧),顺利地 将该帧发送进 局域网,并不知道 某交换机将会 接收该帧并将它 转发到另一个 节点。
这些帧 到达该 交换机的 任何输出接口之一 的速率 可能暂时会 超过该接口的 链路容量。 为了解决 这个问题,交换机 输出接口 设有 缓存,这 非常类似于 路由器接口为 数据报 设有缓存。
(1)交换机转发和过滤
过滤(fltering)是决定一个 帧 应该转发到 某个接口 还是应当 将其丢弃的 交换机 功能。转发(forwarding)是决定 一个帧应该 被导向 哪个接口,并把 该帧 移动到 那些接口的 交换机功能。 交换机的 过滤 和 转发借助于 交换机表(switch table) 完成。该 交换机表 包含 某局域网上某些 主机 和 路由器 的但不必是 全部的 表项。
交换机 表中的一个 表项包含:
- ① 一个 MAC 地址。
- ② 通向 该 MAC 地址的 交换机接口。
- ③ 表项 放置在 表中的时间。
下图中 显示了 上图中最上方 交换机 的一个 交换机表的 例子。
为了 理解交换机 过滤 和 转发 的 工作过程,假定 目的地址为 DD- DD-DD-DD-DD-DD 的帧从 交换机接口 到达。交换机 用 MAC 地址 DD-DD-DD-DD-DD-DD 索引 它的表。有 3 种可能的 情况:
表中 没有对于 DD-DD-DD-DD-DD-DD 的表项。在 这种情况下,交换机向 除 接口 x 外的 所有接口 前面的 输出缓存 转发该帧的 副本。换言之,如果 没有对于 目的地址的 表项,交换机 广播该帧。
表中 有一个表项 将 DD-DD-DD-DD-DD-DD 与 接口 x 联系起来。在 这种情况下,该帧 从包括适配器 DD-DD-DD-DD-DD-DD 的 局域网网段 到来。无须 将该帧 转发到 任何 其他接口,交换机 通过 丢弃该帧 执行过滤功能 即可。
表中 有一个 表项 将 DD- DD-DD-DD-DD-DD 与 接口 联系 起来。在这种情况下,该帧需要 被 转发到 与 接口 y 相连的 局域网网段。交换机 通过 将该帧放到 接口 y 前面的 输出缓存 完成转发 功能。
结合交换机表 以及上述 规则。假设 目的地址 为 62-FE-F7-11-89-A3 的一个 帧 从 接口 1 到达该 交换机。交换机 检查它的表 并且发现 其目的地 是在 与 接口 1 相连的 局域网 网段上(即 电气工程系的 局域网)。这意味着 **该帧 已经在 包含目的地的 局域网网段 广播 过了。**因此该 交换机 过滤(即 丢弃)了 该帧。
现在 假设 有同样 目的地址 的 帧 从 接口 2 到达。交换机 再次检查它的表 并且 发现 其目的地址 在 接口 1 的方向上;因此它 向 接口 1 前面的 输出缓存 转发 该帧。
这个例子 清楚地 表明,++只要 交换机的表 是 完整 和 准确的,该交换机 无须 任何广播就向着 目的地 转发帧。++
(2)自学习
**交换机的表是 自动、动态 和 自治地 建立的,即 没有来自 网络管理员 或 来自配置协议的 任何干预。**换句话说,交换机是 **自学习(self-learing)**的。这种能力是以 如下方式 实现的:
- 1)交换机表 初始 为空。
- 2)对于 在每个接口 接收到的 每个帧,该交换机 在其表中 存储 :① 在该帧 源地址 字段中 的 MAC 地址;② 该帧 到达的 接口;③ 当前 时间。交换机 以这种方式 在它的表中 记录了 发送节点 所在的 局域网 网段。++如果 在局域网上的 每个主机 最终都 发送了一个 帧,则 每个 主机最终 将在 这张表中 留有 记录。++
- 3)如果 在一段时间(称为 老化期(aging time))后,交换机 没有接收到 以 该地址 作为 源地址的 帧,就在 表中删除 这个地址。以这 种方式,如果 一台 PC 被 另一台 PC(具有 不同的 适配器)代替,原来 PC 的 MAC 地址将 最终从该 交换机表中 被清 除掉。
现在假设 在时刻 9:39,源地址 为 01-12-23-34-45-56 的一个 帧从 接口 2 到达。假设 这个地址 不在交换机表 中。于是 交换机 在其表中 增加一个 新的 表项,如下图中 所示。
继续 这个例子,假设 该交换机的 老化 期是 60min,在 9:32~10:32 期间源 地址 是 62-FE-F7-11-89-A3 的帧 没有 到达该 交换机。那么在 时刻 10:32,这台 交换机 将从 它的表中 删除 该地址。
交换机 是 即插即用设备(plug-and-play device),因为 它们 不需要 网络管理员 或 用户的 干预。要 安装交换机的 网络管理员 除了 将局域网网段 与 交换机的 接口 相连外,不需要 做其他任何事。
管理员 在安装交换机 或者 当某主机从 局域网网段 之一 被去除时,他 没有必要 配置 交换机表。交换机 也是 双工 的,这意味着 任何交换机 接口 能够同时 发送和接收。
(3)交换机和路由器比较
路由器 是 使用 网络层地址 转发分组 的 存储转发 分组交换机。尽管 交换机 也是一个 存储转发 分组 交换机,但 它和 路由器 是根本 不同的,因为 它 用 MAC 地址 转发分组。
交换机是 第二层的 分组交换机 ,而 路由器是 第三层的 分组交换机。
使用 "匹配加动作" 的 现代交换机 能够 转发基于 帧 的 目的 MAC 地址的 第二层帧,也能 转发 使用数据报 目的 IP 地址的 第三层 数据报。
即使 交换机 和 路由器 从根本上是 不同的,网络管理员 在安装 互联设备 时也经常 必须 在它们之间 进行选择。例如,对于 上图的网络,网络管理员 本来 可以 很容易地 使用路由器 而不是 交换机来 互联各个系的 局域网、服务器 和 互联网网关 路由器。
路由器 的确 使得各系之间 通信而 不产生 碰撞。既然 交换机和路由器 都是 候选的 互联设备,那么 这两种方式的 优点和缺点 各是什么呢?
考虑 交换机的 优点和缺点。
- 交换机 是 即插即用的,这是 世界上 所有超负荷 工作的 网络管理员 都喜爱的 特性。
- 交换机 还能够 具有相对 高的分组过滤 和 转发速率,交换机 必须处理 高至 第二层的帧,而 路由器 必须处理 高至 第三层的 数据报。
- 在 另一方面,为了 防止广播帧的 循环,交换 网络的 活跃拓扑 限制为 一棵生成树。
- 另外,一个大型 交换网络将 要求在 主机 和 路由器中 有大的 ARP 表,这 将生成 可观的 ARP 流量 和 处理量。
- 而且,交换机 对于 广播风暴 并不提供 任何 保护措施,即 如果某主机出了 故障 并传输出 没完没了的以 太网广播 帧流,该 交换机将 转发 所有这些帧,使得 整个 以太网的崩溃。
考虑 路由器的 优点和缺点。
- 因为 网络寻址 通常是 分层次的(不像 MAC 寻址 那样是 扁平的),即使 当网络中 存在冗余路径 时,分组 通常 也不会 通过 路由器 循环。(然而,当 路由器表 被 误配置时,分组 可能 循环,IP 可以 用一个 特殊的 报文首部字段 来限制 循环。)所以,分组 就不会 被限制 到一棵 生成树上,并可以 使用源 和 目的地之间的 最佳路径。
- 因为 路由器 没有生成树 限制,所以 它们允许 以丰富的 拓扑结构 构建 因特网。
- 路由器的 另一个特色是 它们对 第二层的 广播风暴 提供了 防火墙保护。
- 尽管 也许 路由器 最重要的 缺点就是 它们不是 即插即用的,即 路由器 和 连接到 它们的 主机都需要 人为地 配置 IP 地址。而且 路由器 对每个分组的 处理时间 通常 比交换机 更长,因为 它们 必须 处理高达 第三层的 字段。
下图为流行的互联设备的典型特色的比较。
4. 虚拟局域网
(1)前言(局域网的 3 个缺点)
现代机构的 局城网 常常是 配置为 等级 结构的,每个 工作组(部门)有 自己的 交换局域网,经过 一个交换机 等级结构 与 其他工作组的 交换局域网 互联。虽然 这样的配置 在 理想世界中 能够很好地 工作,但在 现实世界常常 不尽如人意。
在上图中能够发现 3 个缺点:
① 缺乏流量隔离
尽管 该等级结构 把 组流量局域化 到一个 单一交换机 中,但 广播流量(例如携带 ARP 和 DHCP 报文 或 那些 目的地 还没有 被自学习 交换机学习 到的 帧)仍然 必须跨越 整个 机构网络。限制 这些 广播流量 的范围 将改善 局域网的 性能。
更为 重要的是,为了 安全 / 隐私 的目的也可能 希望 限制局域网 广播流量。
例如,如果 一个组 包括公司的 行政管理 团队,另一个组 包括 运行着 Wireshark 分组嗅探器的 心怀不满的 雇员,网络管理员 也许非常 希望行 政流量 无法到达 该雇员的 主机。
通过 用路由器 代替上图中的 中心交换机,能够 提供这种 类型的 隔离。
② 交换机的无效使用
如果 该机构 不止有 3 个组,而是有 10 个组,则将 要求有 10 个 第一级交换机。如果 每个组都 较小,比如说 少于 10 个人,则 单台 96 端口 的交换机 将足以 容纳每个人,但这 台单一的 交换机 将不能提 供 流量隔离。
③ 管理用户
如果 一个 雇员 在不同 组间移动,必须 改变 物理布线,以 将该雇员 连接到 上图中的 不同的交换机 上。属于 两个组的 雇员 将使问题 更为困难。
(2)虚拟局域网(VLAN)
上述难题中的 每个都能够 通过支持 **虚拟局域网(Virtula Local Network,VLAN)**的交换机来处理。
顾名思义,支持 VLAN 的交换机 允许经 一个 单一的 物理局域网 基础设施 定义 多个虚拟局域网。在一个 VLAN 内的 主机彼此 通信,仿佛它们(并且 没有 其他主机)与交换机连接。
在一个 基于端口的 VLAN 中,交换机的 端口(接口)由 网络管理员 划分为组。每个组 构成一个 VLAN,在每个 VLAN 中的 端口 形成一个 广播域(即 来自一个 端口的 广播流量 仅能 到达该组中的 其他端口)。下图 显示了 具有 16 个端口的 单一交换机。端口 2~8 属于 电气工程系(EE) VLAN,而端口 9~15 属于 计算机科学系(CS) VLAN(端口 1 和 16 未分配)。
这个 VLAN 解决了 上面提到的 所有困难,即 EE VLAN 帧 和 CS VLAN 帧彼此 隔离,上图中的 两台交换机 已由一台 交换机 替代,并且 在交换机 端口 8 的 用户 加入 计算机科学系时,网络操作员 只需重 新配置 VLAN 软件,使得 端口 8 与 CS VLAN 相关联 即可。
VLAN 交换机配置 和操作的方法,即 网络管理员 使用交换机 管理软件 声明一个 端口 属于某个给定的 VLAN(其中 未声明的 端口属于一个 默认的 VLAN),在 交换机中 维护一张 端口到 VLAN 的映射表;交换机软件 仅在 属于相同 VLAN 的端口 之间 交付帧。
但 完全隔离 两个 VLAN 带来了 新的困难,来自 电子工程系的 流量怎样才能 发送到计算机科学系 呢?
解决 这个问题 的 一种方式是 **将 VLAN 交换机的一个端口(例如 在上图中 的 端口 1)与 一台外部 的路由器 相连,并且 将 该端口 配置为 属于 EE VLAN 和 CS VLAN。**在此 情况下,即使 电子工程系 和 计算机科学系 共享 相同的 物理交换机,其 逻辑配置 看起来 也仿佛是 电子工程系 和 计算机科学系 具有分离的 经路由器 连接的 交换机。
从 电子工程系 发往计算机 科学系 的数据报 将首先 跨越 EE VLAN 到达 路由器,然后由 该 路由器 转发 跨越 CS VLAN 到达 CS主机。
网络管理员 通过 构建包含一台 VLAN 交换机 和 一台路由器的 单一设备,这样就 不再 需要分离的 外部路由器 了。
现在 假设 计算机工程系 没有分离 开来,某些 电子工程 和 计算机科学教职员工 位于一座 建筑物中,他们 当然需要 网络接人,并且 他们 希望成为 他们系 VLAN 的一部分。下图 显示了 第二台 8 端口交换机,其中 交换机端口 已经根据需要 定义为属于 EE VLAN 或 CS VLAN。但是 这两台交换机 应当如何 互联呢?
一种容易的 解决方案是 在每台交换机上 定义一个 属于 CS VALN 的端口(对 EE VLAN 也类似处理),并且 上图所示 将这两个端口 彼此 互联起来。然而,这种 解决方案不具有 扩展性,因为在 每台交换机 上 N 个 VLAN 将要 求 N 个端口 直接互联 这两台交换机。
一种 更具扩展性 互联 VLAN 交换机的方法 称为 VLAN 干线连接(VLAN trunking) 。在 上图所示 的 VLAN 干线方法中,每台 交换机上的 一个 特殊端口(左侧交换机 上的 端口 16,右侧交换机上的 端口 1)被配置为 干线端口,以 互联 这两台 VLAN 交换机。该 干线端口 属于 所有 VLAN,发送到 任何 VLAN 的帧 经过 干线链路转发到 其他交换机。
但 这会引起 另外的 问题:一个 交换机怎样 知道到 达干线端口的 帧 属于 某个特定的 VLAN 呢?
IEEE 定义了一种 扩展的 以太网帧 格式------802.1Q,用于跨越 VLAN 干线的帧。如下图中 所示,802.1Q 帧由标准 以太网帧 与 加进首部的 4 字节 VLAN 标签(VLAN tag)组成,而 VLAN标签 承载着 该帧 所属的 VLAN 标识符。
VLAN 标签由在 VLAN 干线发送侧的 交换机 加进帧中,解析后 并由在 VLAN 干线 接收侧的交换机 删除。VLAN 标签 自身 由一个 2 字节的 **标签协议标识符(Tag Protocol Identifier,TPID)**字段(具有 固定的 十六进制值 81-00)、一个 2 字节 的标签 控制信息字段(包含一个 12 比特的 VLAN 标识符字段)和一个 3 比特 优先权字段(具有 类似于 IP 数据报 TOS 字段的 目的)组成。
在基于 MAC 的 VLAN 中,网络管理员 指定 属于每个 VLAN 的 MAC 地址的 集合。无论何时,一个 设备 与一个端口 连接时,端口 基于 设备的 MAC 地址 将其连接进 适当的 VLAN。
VLAN 也能 基于 网络层协议(例如 IPv4、IPV6 或 Appletalk)和 其他准则进行 定义。VLAN 跨越 IP 路由器扩展 也是可能的,这使得 多个 LAN 孤岛 能被连接 在一起,以形成能够 跨越全局的 单一 LAN。