计算机网络 3 -数据链路层
数据链路层概述
数据链路层在网络体系中所处的地位
研究数据链路层的问题时, 可以认为数据包只在数据链路层沿水平方向传送.
如下图, 两台主机之间的通信可以看作是在 4 条不同的链路上的通信组成的.
- 链路(Link) 从一个结点到相邻结点的一段物理线路, 而中间没有任何其他的交换结点
- 数据链路(Data Link) 把实现通信协议的硬件和软件加在链路上, 形成数据链路
- 数据链路层以帧(Frame)为单位传输和处理数据
使用点对点信道的数据链路层
- 封装成帧
- 差错检测
- 可靠传输
使用广播信道的数据链路层(共享式局域网)
代表帧的信号会通过总线传输到总线上的其他各主机. 如何分辨帧是发给自己的呢? 在帧中添加地址字段
总线上多台主机同时使用总线传输帧的时候, 传输信号产生碰撞
- 以太网: CSMA/CD
交换式局域网
使用点对点链路和链路层交换机的交换式局域网已经在(有线)局域网的领域取代了共享式局域网
- 网桥和交换机工作原理
无线局域网
- 802.11 局域网的媒体介入控制协议 CSMA/CA
封装成帧
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧
帧头和帧尾包含重要控制信息
帧头和帧尾的作用之一就是帧定界
MAC帧中无帧定界标志, 而是添加前导码. MAC 帧的发送间隔为 96 比特时间
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样
面向字节的物理量链路使用字节填充(字符填充), 如: 插入转义字符 ESC (0x1B, 0b00011011)
面向比特的数据链路使用比特填充, 如下图每 5 个比特 1 填充一个比特 0
为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些.
考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元 MTU (Maximum Transfer Unit)。
差错检测
- 实际的通信链路都不是理想的, 比特在传输过程中可能会产生差错: 1可能会变成0, 而0也可能变成1. 这称为比特差错.
- 在一段时间内, 传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate).
使用差错检测码来检测数据在传输过程中是否产生了比特差错, 是数据链路层所要解决的重要问题之一.
帧尾中包含的 FCS (检错码)字段
奇偶校验
见计组
循环冗余校验 (CRC)
见计组
循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层。
局限
- 检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误.
- 要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用.
可靠传输
基本概念
数据链路层向上提供的服务
- 不可靠传输服务: 仅仅丢弃有误码的帧, 其他什么都不做
- 可靠传输服务: 想办法实现发送端发送什么, 接收端就收到什么
一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务
传输差错除了数据链路层的比特差错, 还包括分组丢失, 分组失序,分组重复. 后三者一般出现在上层, 这就意味着可靠传输不仅仅局限在数据链路层
- TCP 向其上层提供面向连接的可靠传输服务
- UDP 向上层提供无连接, 不可靠传输服务
- 可靠传输实现复杂, 开销较大, 是否实现取决于具体的应用需求
停止-等待协议 (Stop-and-Wait, SW)
正常情况下, 接收方每收到一个 DATA 分组, 就会返回一个 ACK 分组. 发送方接收到 ACK 分组后, 继续发送下一个 DATA 分组
接收端检测到数据分组有误码时, 将其丢弃并等待发送方的超时重传。但对于误码率较高的点对点链路, 为使发送方尽早重传,也可给发送方发送NAK 分组。
为了让接收方能够判断所收到的数据分组是否是重复的, 需要给数据分组编号。由于停止等待协议的停等特性, 只需1个比特编号就够了, 即编号0和1。
为了让发送方能够判断所收到的ACK分组是否是重复的, 需要给ACK分组编号,所用比特数量与数据分组编号所用比特数量一样。数据链路层一般不会出现ACK分组迟到的情况, 因此在数据链路层实现停止-等待协议可以不用给ACK分组编号。
超时计时器设置的重传时间应仔细选择, 一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”。
- 在数据链路层点对点的往返时间比较确定,重传时间比较好设定。
- 然而在运输层, 由于端到端往返时间非常不确定, 设置合适的重传时间有时并不容易。
当往返时延RTT远大于数据帧发送时延To时(例如使用卫星链路) .信道利用率非常低。
若出现重传, 则对于传送有用的数据信息来说, 信道利用率还要降低。
为了克服停止等待协议信道利用率很低的缺点, 就产生了另外两种协议, 即后退N帧协议GBN和选择重传协议SR。
回退 N 帧协议 GBN (Go-Back-N)
发送方
- 发送窗口尺寸 $W_T$ 的取值范围是 $1<W_T<2^n-1$ , $n$ 为构成分组序号的比特数量
- $W_T$ = 1 停止等待协议
- $W_T\geq2^n-1$ 无法辨认新旧分组, 如累积确认分组丢失后, 发送方重发的数据分组会被接收方认为是新的的组
- 发送方可以在未收到接收方确认分组的情况下, 将序号落在发送窗口中的多个数据分组全部发送出去
发送方收到已发送数据分组的确认时, 发送窗口才能向前移动
发送方收到多个重复确认时, 可在重传超时计时器前尽早开始重传, 由具体实现决定
- 发送方发送窗口内某个已发送的数据分组超时重发时, 其后续在发送窗口内已发送的数据分组也必须全部重传
接收方
接收方的接收窗口 $W_R$ 大小为 1, 接收方只能按序接收数据分组
接收方只接受序号落在接收窗口且无误码的数据分组, 之后接收窗口滑动一个位置.
- 不一定每收到一个按需到达无误码的数据分组就发回一个确认分组
- 可以接收到连续几个数据分组后, 针对最后一个数据分组发送确认分组, 称为累积确认. ACKn 表示序号为 n 以及之前的数据分组全部正确接收. 这意味着即使确认分组丢失了一部分, 发送方也不一定需要重传.
- 或者在自己有数据分组要发送时捎带确认
- 接收方收到未按序到达的分组, 丢弃后对最近按序到达的数据分组进行确认
总结
- 回退 N 帧协议在流水线传输的基础上通过发送窗口限制发送方连续发送数据分组的数量, 是一种自动重传请求(Automatic Repeat-reQuest,ARQ)协议
- 协议工作过程中发送窗口和接收窗口不断向前滑动, 因此又被称为滑动窗口协议
- 由于回退 N 帧的特性, 通信线路质量不好时, 信道利用率不必 SW 协议高
选择重传协议 SR(Selective Request)
与 GBN 相比
GBN 一个数据分组误码会导致其后续的多个数据分组被丢弃, 尽管它们可能没有乱序和误码
SR 的接收窗口尺寸 $W_R$ 不再是 1, 以便接收失序到达但无误码并且序号落在接收窗口内的数据分组, 等到所缺分组收齐后再一并送交上层
- 选择重传协议不能使用累计确认, 因为不是按照组好顺序顺序接收的
发送方
- 发送窗口尺寸: $1<W_T\leq2^{n-1}$
- $W_T=1$ 与停止等待协议相同
- $W_T>2^{n-1}$ 接收方无法辨认新旧分组(比如接收方确认分组丢失了, 发送方重传)
- 发送方可以在未收到接收方确认分组的情况下, 将序号落在发送窗口中的多个数据分组全部发送出去
- 发送方按序收到确认分组时, 发送窗口前移; 若收到未按序到达的确认分组, 对其记录防止超时重发, 发送窗口不移动
接收方
- 接收窗口尺寸:$1<W_R\leq W_T$
- $W_R>W_T$ 无意义
- 接收方可以接收未按序到达但没有误码且序号落在接收窗口的数据分组
- 为了使得发送方仅重传出现差错的分组, 接收方不使用累积确认
- 接收方在按序接收数据分组后, 接收窗口才能滑动
点对点协议 PPP(Point-to-Point Protocol)
目前使用最广泛的点对点数据链路层协议
- 用户计算机与 ISP 进行通信时, 数据链路层的协议就是 PPP 协议
- 广泛应用于广域路由器之间的专用线路
PPP 协议在点对点链路传输各种协议数据报提供了标准方法
对各种协议数据报的封装方法 (封装成帧)
链路控制协议 LCP: 用于建立, 配置以及测试数据链路的连接
一套网络控制协议 NCPs: 其中的每一个协议支持不同的网络层协议
PPP 协议帧格式
- 标志 ( Flag ) 字段: PPP 帧的定界符, 取值为 0x7E
- 地址 ( Address ) 字段: 取值为 0xFF, 目前无作用
- 控制 ( Control ) 字段: 取值为 0x03, 目前无作用
- 协议 ( Protocol ) 字段: 指明帧的数据部分分别送交哪个协议处理
- 取值为 0x0021: IP数据报
- 取值为 0xC021: LCP 分组
- 取值为 0x8021: NCP 分组
- 帧检验序列 ( Frame Check Sequence ) 字段: CRC 校验位
透明传输
面向字节的异步链路采用插入转义字符的字节填充法
发送方的处理:
- 每出现一个7E (PPP 帧的定界符) , 在前面插入转义字符 7D并减去 0x20, 变成 7D 5E
- 每出现一个7D (转义字符), 在前面插入 7D , 并减去 0x20, 变成 7D 5D
- 每出现一个 ASCII 码控制字符 (小于 0x20 的字符), 在前面插入7D, 并给该字符编码加上 0x20
接收方只要进行反变化即可恢复原来的帧的数据部分
面向比特的同步链路采用插入比特 0 的比特填充法
发送方的处理:
- 对帧的数据部分进行扫描, 每发现 5 个连续的比特 1, 立即填充 1 个比特 0
接收方的处理:
- 反过来
差错检测
生成多项式
工作状态
媒体接入控制 (Medium Access Control, MAC)
基本概念
共享信道着重考虑的问题: 协调多个发送和接受站点对一个共享传输媒体的占用, 即 MAC
分类
点对点链路和链路层交换机的交换式局域网在有限领域已经取代了共享式局域网, 无线局域网仍然使用共享媒体技术
静态划分信道
- 复用 (Multiplexing) :一条物理线路同时传输多路用户的信号
- 用复用技术可以在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽
频分复用 (Frequency Division Multiplexing, FDM)
- 传输线路频带资源划分为多个子频带, 形成多个子信道, 之间有隔离频带, 以免干扰
- 复用器将每一路信号调整到不同频率的载波上, 接收端通过分用器将各路信号分开, 恢复原信号
- 频分复用所有用户同时占用不同的频带资源并行通信
时分复用 (Time Division Multiplexing, TDM)
- TDM 将带宽资源按时隙轮流分配给不同的用户, 每对用户只在分配的时隙里使用线路传输数据
- TDM 将时间划分为等长的 TDM 帧, 每个 TDM 用户在每一帧中占用的时隙的序号是固定的, 周期即 TDM 帧的长度
- 时分复用的所有用户在不同的时间占用同样的频带宽度
波分复用 (Wavelength Division Multiplexing, WDM)
码分复用 (Code Division Multiplexing,CDM)
CDM 是一种共享信道的方法, 多用于多址接入, 更常用的名词是码分多址 (Code Division Multiple Access, CDMA)
FDM 和 TDM 同样可以用于多址接入
复用和多址
- 复用: 单一媒体频带资源划分为多个相互独立, 互不干扰的子信道. 每个子信道只占用媒体频带资源的一部分
- 多址 (多点接入) 处理将信道动态分配给用户, 用户暂时占用信道的应用必须,信道永久性分配给用户的应用则不需要
- FDMA, TDMA, CDMA 可分别看作 FDM, TDM, CDMA 的应用
CDM 的每一个用户可以在同样的时间内使用同样的频带进行通信
各个用户使用经过特殊挑选的不同码型, 不会造成干扰
CDMA 中每一个比特时间被分为 m 个短间隔, 称为码片(Chip) 通常是 64 或 128
使用CDMA 的每一个站点被指派唯一的 m 位码片序列 (Chip Sequence)
- 一个站点若要发送比特1, 则发送自身的 m 位码片序列
- 若要发送比特0, 则发送发送自身的 m 位码片序列的二进制反码
举个例子: 某站点码片序列为 00011011, 则发送比特1: 发送00011011, 发送比特 0: 11100100.
按惯例将码片序列中的 0 写为 -1, 1 写为 +1, 则该站点码片序列为: (-1, -1, -1, +1, +1, -1, +1, +1)
码片序列挑选原则
- 每个站点的码片序列必须各不相同, 常采用伪随机码序列
- 每个站点的码片序列必须互相正交, 即规格化内积为 0 ($S\cdot T=\displaystyle \frac 1 m \sum_{i=1}^{m}S_i T_i=0$)
要判断某个站点发送信号的情况, 只需要将叠加信号和该站点码片序列做规格化内积, 为 1 则发x送 1,为 -1 则发送 0, 为 0 则未发送
动态接入控制
随机接入 (Random Access)
载波监听多址接入/碰撞 检测 (Carrier Sense Multiple Access/Collision Detection,CSMA/CD)
多址接入 MA
- 多个站点连接在一条总线,竞争使用总线
载波监听 CS
- 每个站点发送帧之前检测一下总线上是否有其他站点再发送帧
- 检测到总线空闲 96 比特时间后, 则发送帧, 96 bit 是帧间最小间隔, 使接收方可以检测出一个帧的结束, 也使得其他站点公平竞争信道
- 若总线忙, 继续检测并等待
- 每个站点发送帧之前检测一下总线上是否有其他站点再发送帧
碰撞检测 CD
- 每一个正在发送帧的站点边发送帧边检测碰撞
- 一旦碰撞, 立即停止, 退避一段时间后择机发送
- 以太网有强化碰撞机制, 即一旦发生碰撞, 立即停止发送帧, 并发送 32 bit 或者 48 bit 的人为干扰信号 (Jamming Signal), 使足够多的站点检测出碰撞
- 每一个正在发送帧的站点边发送帧边检测碰撞
争用期 (碰撞窗口)
- 最多经过 2τ 时间可知本次发送是否遭遇碰撞, 以太网端到端往返传播时延 2τ 就称为争用期或者碰撞窗口
- 争用期内未检测到碰撞, 这次发送必定无碰撞
- 主机越多, 端到端往返时延越大, 碰撞几率越高. 共享式连接主机数量有限, 总线长度也不能太长
最小帧长
- 由于是边检测边发送, 若帧长过短, 传输过程中遭遇碰撞发送方不会重发
- 以太网规定最小帧长为 64 字节(512 bit 时间即争用期)
- 若发送数据少, 需要填充字节
- 最小帧长保证主机可以在帧发送完毕前确定是否发生碰撞
- 若在争用期未检测到碰撞, 则后续的数据一定不会发生碰撞
- 若在争用期检测到碰撞, 立即终止发送. 此时发送出去的帧长度一定小于 512 bit. 规定长度小于 64 byte 的帧都是碰撞引起的无效帧
最大帧长
- 过长的帧会长时间占用总线
- 过长的帧可能会导致接收方缓冲区溢出
截断二进制指数退避算法
退避时间 = 基本退避时间( 争用期 2τ ) × 随机数 r (r ∈ {0, 1, …2k-1}, k=min{重传次数, 10})
举例:
该算法可以使重传需要推迟的时间随重传次数而增大, 减小发生碰撞概率
重传 16 次仍然失败, 丢弃该帧, 向上层报告
信道利用率
理想情况
各个主机发送的帧无碰撞
总线一旦空闲, 某主机立即发送帧
发送一帧占用总线 τ0+τ, 帧本身发送时间为 τ0
- 极限信道利用率 $\displaystyle S_{max}=\frac {\tau_0}{\tau_o+\tau}=\frac{1}{1+\frac{\tau}{\tau_0}}$
- 提高利用率, 以太网端到端距离受到限制, 以太网帧长度应尽量长
帧发送流程
帧接收流程
发展
- CSMA/CD 协议曾用于各种总线结构以太网和双绞线以太网早期版本
- 现在以太网基于交换机和全双工连接, 没有碰撞, 因此没有必要使用 CSMA/CD 协议
载波监听多址接入/碰撞避免 (Carrier Sense Multiple Access/Collision Avoidance,CSMA/CA)
无线局域网不能使用碰撞检测 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 (Inter Frame Space)
- 802.11 标准规定,所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔 IFS。
- 帧间间隔长短取决于发送帧类型:
- 高优先级帧需要等待的时间较短,因此可优先获得发送权
- 低优先级帧需要等待的时间较长。若某个站的低优先级帧还没来得及发送,而其他站的高优先级帧已发送到信道上,则信道变为忙态,因而低优先级帧就只能再推迟发送了。这样就减少了发生碰撞的机会。
- 常用的两种帧间间隔:
- 短帧间间隔 SIFS (28μs) , 是最短的帧间间隔,用来分隔开属于一次对话的各帧。一个站点应当能够在这段时间内从发送方式切换到接收方式。使用 SIFS 的帧类型有 ACK 帧、CTS 帧、 由过长的 MAC 帧分片后的数据帧、以及所有回答 AP 探询的帧和在 PCF 方式中接入点 AP 发送出的任何帧
- DCF 帧间间隔 DIFS (128 μs) 发送数据帧和管理帧
工作原理
- 源站为什么在检测到信道空闲后还要等待一段时间 DIFS?
目的站为什么正确接收数据帧后还要等待一段时间 SIFS 才能发送 ACK 帧?
使用退避算法的时机?
CSMA/CA 协议的退避算法
- 执行退避算法时, 站点为退避计时器设置一个随机的退避时间
- 退避计时器时间减为 0, 开始发送数据
- 退避计时器尚未减少到 0, 信道又转变为忙状态, 则冻结退避计时器的数值, 待信道空闲并经过 DIFS 时间后继续启动退避计时器
- 在进行第 i 次退避时, 退避时间在时隙编号 {0, 1, …, 22+i -1} 中随机选择一个, 然后乘以基本退避时间(一个时隙的长度), 就可以得到随机的退避时间. 时隙编号达到 255 (第 6 次退避) 就不再增加
- 执行退避算法时, 站点为退避计时器设置一个随机的退避时间
CSMA/CA 协议的信道预约和虚拟载波监听
- 为了减少碰撞概率和降低碰撞的影响, 802.11 标准允许要发送数据的站点对信道进行预约.
- 源站在发送数据帧之前先发送一个短的控制帧, 称为 请求发送 RTS (Request To Send) , 包含源地址, 目的地址以及这次通信(包括相应的确认帧)所需要的持续时间
- 若目的站正确收到 RTS 帧, 且媒体空闲, 就发一个响应控制帧, 称为允许发送 CTS (Clear To Send) , 包含此次通信所需要的持续时间
- 源站收到 CTS 帧后, 在等待一段时间 SIFS 后, 就可以发送数据帧
- 目的站正确接收数据帧后, 等待 SIFS 后发送确认帧 ACK
- 除了目的站和源站, 在收到 CTS 帧 (或者数据帧) 后, 就推迟接入到无线局域网中, 保证源站和目的站之间通信不受干扰
- 若 RTS 帧发生碰撞, 源站就收不到 CTS 帧, 需要执行退避算法重传 RTS 帧
- 由于 RTS帧 和 CTS 帧很短,发送碰撞的概率、碰撞产生的开销及本身的开销都很小。而对于一般的数据帧,其发送时延往往大于传播时延(因为是局域网) .碰撞的概率很大, 且一旦发生碰撞而导致数据帧重发, 则浪费的时间就很多, 因此用很小的代价对信道进行预约往往是值得的. 802.11 标准规定了 3 种情况供用户选择:
- 使用 RTS 和 CTS
- 不使用 RTS 和 CTS
- 当数据帧长度超过某一数值才使用 RTS 和 CTS 帧
- 除了 RTS 帧和 CTS 帧携带通信所需要的时间, 数据帧也能携带通信所需要的时间, 这称为 802.11 的虚拟载波监听机制
- 借助这个机制, 站点只需要监听到 RTS, CTS 或者数据帧中的一个, 就可以知道信道被占用的时间, 进而减少隐蔽站问题带来的碰撞问题
- 为了减少碰撞概率和降低碰撞的影响, 802.11 标准允许要发送数据的站点对信道进行预约.
本节测试题
【2011 年题 36】下列选项中,对正确接收到的数据帧进行确认的 MAC 协议是
A. CSMA B. CDMA C. CSMA/CD D. CSMA/CA
【2013 年题 36】下列介质访问控制方法中,可能发生冲突的是
A. CDMA B. CSMA C. TDMA D. FDMA
MAC 地址,IP 地址以及 ARP 协议
MAC 地址
- 使用点对点信道的数据链路层不需要使用地址
- 使用广播信道的数据链路层必须使用地址区分各主机
每个主机发送的帧中 必须携带标识发送主机和接收主机的地址 , 这类地址用于媒体接入控制 ( MAC )的, 因此被称为 MAC 地址
- MAC 地址一半固化在网卡的 EEPROM 中, 因此 MAC 地址也被称为 硬件地址
- 有时候也被称为 物理地址
每个网络适配器拥有一个全球唯一的 MAC地址, 用户主机一半包括有线网卡与无向网卡两个网络适配器. 严格来说 MAC 地址是对网络上各接口的唯一标识, 而不是各设备
MAC 地址格式
表示方法
- Windows:
00-0C-CF-93-8C-92
- Linux:
00:0C:CF:93:8C:92
- Windows:
发送顺序
字节发送顺序: 第一字节到第六字节
字节内发送顺序: $b_0$ 到 $b_7$
MAC 地址举例
- 单播
- 广播
多播
- B, C, D 主机都会收到该多播帧
- 若该多播帧的目的 MAC 地址在自己的多播列表, 接受并上交上层, 否则丢弃
IP 地址
IP 地址的内容实际上属于网络层 , 因为在日常生活中, 大多数网络应用 MAC 地址和 IP 地址都在使用, 以下主要介绍 IP 地址的作用
IP 地址是因特网上的主机和路由器所使用的地址, 用于标识两部分信息
网络编号: 标识因特网上数意百万计的网络
主机编号: 标识同一网络上的不同主机以及路由器各个接口
MAC 地址不具备区分不同网络的功能
- 单独网络不介入因特网, 可以只使用 MAC 地址
- 如果需要接入因特网, IP 地址和 MAC 地址都需要使用
数据包转发过程中 IP 地址和 MAC 地址变化情况
- 源 IP 地址和目的 IP 地址不变
- 源 MAC 地址和目的 MAC 地址逐链路(网络)改变
主机和路由器发送数据包的时候都有一个问题: 知道 IP 地址 (网络层中详解), 但是不知道 MAC 地址, 如何通过 IP 地址找到 MAC 地址这就需要 ARP 协议
ARP (Address Resolution Protocol) 协议
每台主机都有一个 ARP 高速缓存表, 记录 IP 地址和 MAC 地址的对应关系, 例如
每次发送 MAC 帧的时候, 首先在自己的 ARP 高速缓存表中查找, 若未找到, 则发送 ARP 请求报文
- ARP 请求报文(广播)
封装在 MAC 帧中
目的地址 FF-FF-FF-FF-FF-FF
内容 (大致)
- 我的 IP 地址为: 192.168.0.2
- 我的 MAC 地址为 00-E0-F9-A3-43-77
- 我想知道 IP 地址为 192.168.0.3 的主机的 MAC 地址
各主机收到 ARP 请求报文后, 上交给上层处理, 若 IP 地址相符
- 将 B 的 IP 地址和 MAC 地址记录到自己的 ARP 高速缓存表中
- 给源主机发送 ARP 响应, 以告知自己的 MAC 地址
- ARP 响应报文(单播)
内容
- 我的 IP 地址是: 192.168.0.3
- 我的 MAC 地址是: 00_0C-CF-B8-4A-82
总线上的各个主机都能收到该单播帧, 若网卡的 MAC 地址与响应报文不匹配, 直接丢弃; 否则交付给上层处理
- ARP 缓存表中的记录有两种类型
- 动态: 自动获取, 生命周期默认 2 分钟
- 静态: 手动配置, 不同操作系统生命周期不一样
- ARP 协议没有安全验证机制, 存在 ARP 欺骗, 攻击等问题
问题: 下图中主机 H1 是否可以使用 ARP 协议获取到主机 H2 的 MAC 地址?
集线器和交换机
早期总线型以太网
使用大量机械接头的总线型以太网没有人们想象的可靠, 被淘汰
使用双绞线和集线器 HUB 的星型以太网
集线器使用大规模集成电路, 可靠性更高, 并且使用更便宜更灵活的双绞线作为传输媒体.
- 使用集线器的以太网在逻辑上仍然是一个总线网, 各站共享资源, 使用的还是 CSMA/CD 协议
- 集线器只工作在物理层, 网络中某个网卡出了故障, 不停地发送帧, 集线器可以断开这个故障网卡的连线
使用集线器 HUB 在物理层扩展以太网
集线器可以将各个小型以太网互连形成一个更大的以太网, 同时合并成一个更大的碰撞域. 一台主机发送的数据帧的信号会传输到整个网络中的其他各主机.
以太网交换机
- 以下内容忽略了 ARP 过程
- 假设交换机的帧交换表已经配置好
对比
发送单播帧
- 一台主机通过集线器向另一主机发送单播帧, 这个单播帧会沿着共享总线传输到总线上的其他各个主机
- 而单播帧进入交换机后, 交换机会将该单播帧转发给目的主机, 而非网络中其他各个主机
发送广播帧
- 从效果上看无差别, 使用交换机的交换式以太网中的各主机属于同一个广播域, 使用集线器的共享式以太网中的各主机也属于同一个广播域
同时向一台主机发送单播帧
- 集线器: 遭遇碰撞的帧传播到总线上的各主机
- 交换机: 收到多个帧会将它们缓存起来, 然后逐个转发给目的主机
扩展以太网
交换机和集线器均可以扩大广播域, 但是集线器会同时扩大冲突域, 增加了竞争总线的主机; 交换机不会扩大碰撞域 (VLAN 除外)
交换机简介
- 以太网交换机有多个接口. 每个接口与另一台交换机或者主机连接. 一般工作在全双工方式 (发送与接收同时进行). 交换机工作在半双工方式
- 以太网交换机具有并行性, 同时连通多对接口, 使多对主机同时通信, 无碰撞 (无需使用 CSMA/CD 协议)
- 以太网交换机一般具有多种速率的接口, 例如 10 Mbps, 100 Mbps, 1Gbps, 10Gbps 接口的多种组合
- 以太网交换机工作在 数据链路层 (也包括物理层), 收到帧后, 在帧交换表中查找 帧的 MAC 地址所对应的接口号, 然后通过该接口转发帧.
- 以太网交换机是一种即插即用设备, 帧交换表是通过自学习算法建立起来的
- 帧的两种转发方式:
- 存储转发:延时大,速度慢,可靠性高,可检错纠错
- 直通交换: 交换时延小, 不检测差错
以太网交换机自学习和转发帧的流程
假设各主机知道网络中的其他各主机的 MAC 地址 无需进行 ARP
流程
当 MAC 帧通过交换机的接口进入交换机后, 首先进行登记工作 (若帧交换表中没有这条记录)
- 将该帧的源 MAC 地址记录到自己的帧交换表中
- 将该帧进入自己的接口号记录到自己的帧交换表中
之后, 交换机对该帧进行转发
- 若帧交换表中找到了目的 MAC 地址, 把帧由对应的接口转发出去
- 否则对该帧进行盲目转发 (盲目泛洪), 除该帧进入交换机的接口外所有接口转发该帧
主机的网卡接收到帧后, 根据帧的目的 MAC 地址判断是否为转发给自己的帧
- 若是, 交付给上层处理
- 否则丢弃
有效时间
帧交换表中的每条记录都有有效时间, 到期自动删除. 这是因为 MAC 地址与接口的对应关系不是永久性的
本节习题
以太网交换机的生成树协议 STP (Spanning Tree Protocol)
提高以太网的可靠性
- 添加冗余链路
- 冗余链路的负面效应
- 广播风暴: 大量消耗网络资源, 使得网络无法正常转发其他数据帧
- 主机收到重复的广播帧: 大量消耗主机资源
- 交换机的帧交换表震荡 (漂移)
生成树协议 STP
- 以太网交换机使用生成树协议可以在增加冗余链路提高网络可靠性的同时又避免网络环路带来的各种问题
- 不论交换机之间采用怎么样的物理连接, 交换机都能自动计算并构建一个逻辑上没有环路的网络, 其逻辑拓扑结构必须是树形的(无环路)
- 最终生成的树型逻辑结构确保连通整个网络
- 当首次连接交换机, 或者网络物理拓扑结构发生变化时(人为改变或故障), 交换机都会进行生成树的重新计算
虚拟局域网 VLAN
- 以太网交换机工作在数据链路层(包括物理层)
- 使用一个或者多个以太网交换机互连起来的交换式以太网, 其所有站点都属于同一个广播域
随着交换式以太网规模的扩大, 广播域相应扩大
巨大的广播域会带来很多弊端
- 广播风暴: 浪费网络资源和各主机的 CPU 资源
- TCP/ IP 协议栈中的很多协议都会使用广播
- 地址解析协议 ARP
- 路由信息协议 RIP
- 动态主机配置协议 DHCP
- TCP/ IP 协议栈中的很多协议都会使用广播
- 难以管理和维护
- 潜在安全问题
- 广播风暴: 浪费网络资源和各主机的 CPU 资源
分割广播域
使用路由器可以隔离广播域, 但成本高
虚拟局域网技术 VLAN 应运而生
- 虚拟局域网 VLAN (Virtual Local Area Network) 是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术吗这些逻辑组具有某些共同的需求
虚拟局域网 VLAN 的实现机制
IEEE 802.1Q 帧
IEEE 802.1Q 帧对以太网 MAC 帧格式进行了扩展, 插入了 4 字节的 VLAN 标记
VLAN 标记的最后 12 位 被称为 VLAN 标识符 VID, 它唯一地标识了以太网帧属于哪一个 VLAN
- VID 取值范围 0 ~ 4095
- 0 和 4095不用来表示 VLAN , 因此用于表示 VLAN 的 VID 的有效范围是 1 ~ 4094
- 802.1Q 帧是由交换机来处理的而不是用户主机来处理的
- 打标签: 交换机给普通的 MAC 帧插入 4 字节的 VLAN 标记
- 去标签: 删除 802.1Q 帧的 VLAN 标记
交换机的端口类型
- 端口类型有以下三种
- Access
- Trunk
- Hybrid
- 交换机各端口的缺省 VLAN ID
- 思科交换机上称为 Native VLAN, 即本征 VLAN, 默认都是 VLAN1
- 在华为交换机上称为 Port VLAN ID, 即端口 VLAN ID, 简记为 PVID
Access 端口
一般连接用户计算机
只能属于一个 VLAN
Access 端口的 PVID 值与端口所属的 VLAN ID 相同(默认为 1)
接收
- 一般只接受 “未打标签” 的普通以太网 MAC 帧, 根据接收帧的端口 PVID 给帧 “打标签“, 插入的 VLAN 标记字段与 PVID 取值相等
发送
若帧中的 VID 与 PVID 相等, 则去标签并转发该帧, 否则不转发
Trunk 端口
- 一般用于交换机之间或者交换机与路由器之间互连
- Trunk 端口可以属于多个 VLAN
用户可以设置 Trunk 的 PVID 值, 默认情况下Trunk 端口的 PVID 值位 1
发送
- 对 VID 等于 PVID 的帧, 去标签再转发.
- 对于 VID 不等于 PVID 的帧, 直接转发.
接收
- 接收未打标签的帧, 根据自己的 PVID 给帧打标签.
- 接收到已经打标签的帧.