本文为计算机网络系列第三章笔记,陆续会更新余下内容。文章参考:计算机网络微课堂
系列文章:
计算机网络「一」计算机网络概述 ? 确定不进来看看??
计算机网络「二」物理层 ? 多图详解 ?
需要说明:文章中图片多来自于网络和网课,本文只用作后期学习时参考
一、数据链路层概述
数据链路层在网络体系结构中的地位
主机 H1 给主机 H2 发送数据,中间要经过 3 个路由器和电话网、局域网以及广域网等多种网络。从五层协议原理体系结构角度来看:
为了专注数据链路层内容,这里我们只考虑数据链路层,而不考虑其他层
主机 H1 到 H2 的通信可以看作在 4 个不同链路上组成
- 链路(LINK)就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点
要在链路上传输数据,仅有链路还不够,还需要一些通信协议来控制数据的传输
- 数据链路(Data Link)是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路
在数据链路层上传输的数据包又称为 帧
数据链路层的三个重要问题
这里先简单了解一下三个问题,后续内容详细介绍
说明:这三个问题针对于点对点信道的数据链路层,使用广播信道的数据链路层除了这三个问题外,还有一些其他问题
二、封装成帧
发送方的数据链路层将上层交付下来的协议数据单元封装成帧后,还要通过物理层将构成帧的各比特转换成电信号发送到传输媒体。
那么,接收方的数据链路层如果从物理层交付的比特流中提取一个个的帧呢?
帧定界
如下图,红色字段为帧定界标志
- 说明:并不是每一种数据链路层协议的帧都包含帧定界标志。例如,以太网 V2 的 MAC 帧:
- 前导码中的前7个字节为前同步码,作用是使接收方的时钟同步。之后1字节为帧开始定界符,表明后面紧跟的为MAC帧
- 此外,以太网定义了帧间间隔为 96 比特的发送时间,因此,MAC 帧不需要帧结束定界符
透明传输
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
要实现透明传输就要思考一个问题,如果上层交付的协议数据单元中含有帧定界标志应该怎么办?
两种方法:
-
面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输 在发送数据前,对帧的数据部分进行扫描,每出现一个帧定界符或转义字符,就在其前面插入一个转义字符。这里的转义字符是一个特殊的控制字符,长度为 1 个字节,十进制值为 27。 -
面向比特的物理链路使用 比特填充 的方法实现透明传输 在发送前对数据部分进行扫描每 5 个连续的比特 1 后面就插入 1 个比特 0,这样就确保了帧定界在整个帧中的唯一性,也就可以实现透明传输。接收方数据链路层将每5个连续比特 1 后比特 0 剔除即可。 -
为了提高帧的传输效率,应当使 帧的数据部分的长度尽可能大些
最大传送单元MTU
考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即 最大传送单元MTU (Maximum TransferUnit)
?
三、差错检测
-
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1 可能会变成 0,而 0 也可能变成 1,这称为 比特差错 -
在一段时间内,传输错误的比特占所传输比特总数的比率称为 误码率BER (Bit Error Rate) -
使用 差错检测码 来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一 如上述两种帧格式中,FCS字段的作用就是检查帧传输过程中是否产生误码
下面介绍两种检错方法:奇偶校验、循环冗余校验 ?
1. 奇偶校验
具体步骤
- 在待发送的数据后面添加 1 位奇偶校验位,使整个数据(包括所添加的校验位在内)中 “1” 的个数为奇数(奇校验)或 偶数(偶校验)
- 如果有 奇数个位 发生误码,则奇偶性发生变化,可以检查出误码
- 如果有 偶数个位 发生误码,则奇偶性不发生变化,不能检查出误码(漏检)
这种检错方法漏检率比较高,计算机网络的数据链路层一般不会采用这种检测方法
?
2. 循环冗余校验
循环冗余校验CRC (Cyclic Redundancy Check) 具体步骤
-
收发双方约定好一个 生成多项式 G(x) -
发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输 -
接收方通过生成多项式来计算收到的数据是否产生了误码
- 生成多项式举例
- 常用的生成多项式
需要注意,CRC算法要求生成多项式必须包含最低次项
示例分析
注意:
- 检错码只能检测帧在传输过程中是否出现差错,无法定位错误、纠正错误
- 循环冗余校验CRC有漏检率低,易于硬件实现,广泛应用于数据链路层
?
四、 可靠传输
1. 可靠传输基本概念
使用差错检验技术,接收方的数据链路层就可检测出帧在传输过程中是否产生了误码(比特错误)。那么接下来如何处理呢?
- 这取决于数据链路层向其上层提供的服务类型:
- 不可靠传输服务:仅仅丢弃有误码的帧,其他什么都不做
- 可靠传输服务:想办法实现发送端发送什么,接收端接收什么
对有线链路而言
- 一般情况下,有线链路的误码率比较低,为了减少开销,并不要求数据链路层向其上层提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理
对于无线链路
- 无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务
传输差错
-
比特差错只是传输差错的一种 -
从整个计算机网络体系结构来看,传输差错还包括 分组丢失、分组失序 以及 分组重复 -
分组丢失、分组失序、分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层 -
可靠传输服务并不仅局限在数据链路层,其他各层均可选择实现可靠传输 例如:TCP/IP四层体系结构中:
可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求 ?
2. 可靠传输的三种实现机制
下面将讲述可靠传输的三种实现机制:
- 停止 - 等待协议SW
- 回退N帧协议GBN
- 选择重传协议SR
需要注意的是,这三种可靠传输实现机制的基本原理 可以应用到计算机网络体系结构的各层协议 中 ?
「一」停止 - 等待协议SW
ACK 和 NAK
- ACK:接收方收到数据分组后进行差错检测,若没有误码,则接收该分组,并给发送方 发送确认分组,简称为ACK
- NAK:若差错检测发现误码,则丢弃该分组,并给发送方 发送否认分组,简称为 NAK
停止等待的过程
- 发送方每发送完一个数据分组后,就 停止 发送下一个数据分组,等待 来自接收方的 确认分组或否认分组。若收到确认分组,则可以继续发送下一个数据分组;若收到否认分组,则重发之前发送的那个数据分组。
下面讲述一下 传输过程出现的三个问题(不仅针对数据链路层)
问题 1 :上述只是发送过程中数据分组产生误码的情况,如果数据分组在传输过程中丢失了呢 ?
两点说明:
- 接收方接收不到数据分组,就不会发送 ACK 或 NAK 。如果不采取其他措施,发送方就会一直处于等待状态。
- 这里说明一下,对于数据链路层点对点信道而言,不太容易出现此情况。但对多网络多路由器的互连网环境而言,经常出现此情况
为解决该问题,可采用 超时重传 实现数据分组的重新传输
- 超时重传:在发送方发送完一个数据分组后,启动一个 超时计时器。到了超时计时器所设置的重传时间而发送方仍接收不到ACK或NAK,则重传原分组
- 一般可将重传时间选为略大于 “ 从发送方到接收方的平均往返时间 ”
问题 2 : 发送方发送的确认分组丢失,如何确定超时重传后的数据分组 是否为重复的数据分组 呢?
为 避免重复分组 这种传输错误,必须给每个分组 带上序号。
- 只需要保证与上个分组的序号不同即可,因此只需 1 个比特编号即可,即 0 或 1
问题 3 :如果确认分组迟到,导致了超时重传,接收方再次发送确认分组,如何区分同一确认分组的重复发送呢 ?
说明:
- 对于数据链路层的点对点信号,往返时间比较固定,不会出现确认迟到的情况。因此,如果只在数据链路层实现 停止-等待协议,可以不用给确认分组编号
解决方式就是 对确认分组也进行编号,就可以使发送方避免这种误判
停止 - 等待协议的 信道利用率
- TD:发送方发送数据分组的发送时延
- RTT:收发双方之间的往返时间
- TA:接收方发送确认分组所耗费的发送时延
- 图中忽略了接收方对数据分组的处理时延,以及发送方对确认分组的处理时延
- 当往返时延RTT远大于发送时延TD时(例如使用卫星链路),信道利用率非常低
- 为了克服停止-等待协议信道利用率很低的缺点,就产生了另外两种协议,即 后退N帧协议GBN 和 选择重传协议SR
相关练习题
?
「二」回退N帧协议GBN
如果发送发在收到接收方的确认分组之前,可以连续发送多个数据分组,则可大大提高信道利用率,这是一种流水线式的传输,如下图所示 为此,我们引入 回退 N 帧协议 GBN
- 在 流水线传输 的基础上利用 发送窗口 来限制发送方可连续发送数据分组的数量
- 在协议的工作过程中发送窗口和接收窗口不断向前滑动,因此这类协议又称为 滑动窗口协议
示例分析
-
发送方将序号落在发送窗口内的 0~4 号数据分组依次连续发送出去,通过互连网的传输正确到达接收方 -
接收方按序接收它们,每接收一个,接收窗口就向前滑动一个位置,并给发送方发送确认分组 -
0~4 号确认分组通过互连网的传输正确到达发送方,发送方每接收一个,发送窗口就向前滑动一个位置,这样就有新序号落入发送窗口。发送方可以将已收到确认的数据分组从缓存中删除,发送方将已接收的数据分组交付上层处理
累计确认
累计确认: 接收方 不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后(由具体实现决定),对按需到达的 最后一个数据分组发送确认
ACKn: 表示序号为 n 及以前的所有数据分组都已正确接收
当接收完 0 号和 1 号数据分组后,给发送方发送一个累积确认 ACK1,接受完 2~4 号分组后,发送累积确认ACK4。假设ACK1在传输过程中丢失,而ACK4正确到达发送方,发送方接收后就知道序号4及之前的分组都已正确接收。
- 即使确认分组丢失,发送方也可能不必重传
- 减少了接收方的开销和对网络资源的占用
上述是无差错情况,下面说一下遇到差错时的传输过程:
- 如图 5 号数据分组出现误码被丢弃,后续到达的 4 个数据分组的序号与接收窗口不匹配,同样也不能接收,将它们丢弃。并返回之前最后一个确认分组 ACK4,每丢弃一个分组就发送一个 ACK4,也就是会连续发送 4 个 ACK4。
- 发送方收到重复的确认,就知道之前发送的分组出现差错,于是就可以不等超时计时器超时就立刻重传。至于收到几个重复确认分组后开始重传,由具体实现决定。
在本例中,尽管序号为 6,7,0,1 的数据分组正确到达接收方,但由于 5 号数据分组误码不被接受,它们也 “受到牵连” 而不被接受,发送方还要重传这些数据分组,这就是所谓的 Go-back-N (回退 N 帧)
相关真题
?
「三」选择重传协议
通过前文可知,一个数据分组的误码就会导致后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,对通信资源产生极大浪费,因此引入选择重传协议。
选择重传协议
设法 只重传出现误码的数据分组。因此,接收窗口的尺寸WR不再等于 1 (而是 大于 1),以便 接收方先收下窗口内无误码的数据分组 ,等所缺部分收齐后一并递交上层,这就是 选择重传协议
示例分析
传输条件如下图
但在传输过程中 2 号数据分组丢失
- 接收方将接收 0 号和 1 号数据分组,并发送确认分组,之后接收窗口向前滑动两个位置。接收方再接收 3 号数据分组,并发送 3 号确认分组,但是接收窗口不能向前滑动,因为这是一个未按序到达的数据分组。
- 发送方接收 0 号 和 1 号确认分组,发送窗口向前滑动两个位置。再将落入的 4 号 和 5 号数据分组发送出去。发送方接收 3 号数据分组,但是窗口不能向前滑动,因为这个是一个未按序到达的确认分组。
- 等待 2 号数据分组超时重传后,接收方接收到按序到达的数据分组,并发送确认分组,接收窗口才可以向前滑动。
- 发送方收到按序到达的 2 号确认分组,发送窗口向前滑动 4 个位置。
相关真题
?
五、点对点协议PPP
1. 基本概念
- 点对点协议 PPP(Point-to-Point Protocal)是目前使用最广泛的点对点数据链路层协议
另外,PPP协议也广泛用于广域网路由器之间的专用线路 - PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成:
- 对各种协议报的封装方法(封装成帧)
- 链路控制协议LCP (用于建立、配置以及测试数据链路的连接)
- 一套网络控制协议NCPs(其中的每一个协议支持不同的网络层协议)
2. 帧格式
3. 透明传输
- 实现透明传输的方法
- 面向字节的异步链路
- 面向比特的同步链路
4. 差错检测
PPP帧尾部包含有 1 个两字节的帧检验序列 FCS 字段,使用循环冗余校验 CRC 来计算该字段的取值。
- 采用的生成多项式如下
接收方每收到一个PPP帧,就进行 CRC 检验。若 CRC 检验正确,就收下这个帧;反之,就丢弃这个帧。使用PPP的数据链路层 向上提供可靠传输服务。 ?
5. 工作状态
以拨号接入为例,简单介绍PPP协议的工作状态
?
六、媒体介入控制
1. 基本概念
- 共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即 媒体接入控制 MAC (Medium Access Control)
- 媒体接入控制主要分类
静态划分信道
- 静态划分信道也就是预先固定分配好信道,这类方法非常不灵活,对于突发性数据传输信道利用率会很低
- 通常在无线网络的物理层中使用,而不是在数据链路层中使用
动态接入控制
- 在 集中控制 的多点轮询协议中,有一个主站以循环方式 轮询 每个站点有无数据发送,只有被轮询到的站点才能发送数据。集中控制的最大缺点,就是存在单点故障问题 (已淘汰)
- 在 分散控制 的令牌传递协议中,各站点是平等的,并连接成一个环型网络。令牌(一种特殊的控制帧)沿环逐站传递,接收到令牌的站点才有权发送数据,并在发送完数据后,将令牌传给下一个站点(已淘汰)
- 采用 令牌协议 的典型网络有:IEEE 802.5 令牌环网,IEEE 802.4 令牌总线网,光线分布式数据接口FDDI(已淘汰)
- 随机接入 的特点是 所有站点通过竞争,随机的在信道上发送数据。如果有两个或以上站点在同一时刻发送数据,那么信号在共享媒体上就要 产生碰撞,使得站点的发送都失败。因此,这类协议要解决的关键问题是如何 避免冲突,以及发生冲突后如何 尽快恢复通信
- 著名的共享式以太网采用的就是 随机接入
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享技术 ?
2. 静态划分信道
信道复用
「一」 频分复用 FDM
「二」 时分复用 TDM
- 时分复用的所有用户在不同的时间占用同样的频带宽度
- 每对用户只在所分配的时隙里使用线路传输数据
「三」波分复用 WDM
- 波分复用其实就是光的频分复用
- 光复用器和光分用器之间可以放入 4 个掺铒光纤放大器,使得光复用器和光分用器之间的无线电转换的距离可达 600km
「四」 码分复用 CDM
- 实际上,由于该技术主要用于多址接入,人们更常用的名词是 码分多址 CDMA
- 同理,频分复用 FDM 和时分复用 TDM 同样可用于多址接入,相应的名词是频分多址 FDMA 和时分多址 TDMA
- 这里,我们不严格区分复用和多址的概念。可简单理解如下:
复用 是将单一媒体的频带资源分成很多子信道,这些子信道之间独立,互不干扰多址 (更确切的应该称为多点接入)处理的是动态分配信道给用户。这在用户仅仅暂时性地占用信道的应用中是必须的,而所有的移动通信系统基本上都属于这种情况。相反,在信道永久性地分配给用户的应用中,多址是不需要的(无线广播或电视广播)
- 与 FDM 和 TMD 不同,CMD 的每一个用户可以在 同样的时间使用同样的频带进行通信
- 由于 各用户使用经过特殊挑选的不同码型,因此用户之间 不会造成干扰
码片
-
在 CMDA 中,每一个比特时间再划分为 m 个短的间隔,称为 码片(Chip)。通常 m 的值是 64 或 128 -
使用 CMDA 的每一个站被指派一个唯一的 m bit 码片序列(Chip Sequence)
- 一个站如果要发送比特 1,则发送它自己的 m bit 码片序列
- 一个站如果要发送比特 0,则发送它自己的 m bit 码片序列反码
-
码片序列的挑选原则如下:
- 分配给每个站的 码片序列必须各不相同,实际常采用伪随机码序列
- 分配给每个站的 码片序列必须相互正交(规格化内积为 0)
令向量 S 表示站 S 的码片序列,令向量 T 表示其他任何站的码片序列 两个不同站 S 和 T 的码片序列正交,就是向量 S 和 T 的规格化内积为 0 -
应用
相关练习题
? ?
3. 随机接入 —— CSMA/CD协议
早期的共享式以太网采用 载波监听多址接入/碰撞检测 ,即 CSMA/CD协议 来解决碰撞冲突问题
多址接入MA
载波监听CS
- 每一个站在发送帧之前先要检测一下总线上是否有其他站点在发送帧(先听后说):
- 若检测到总线空闲 96 比特时间,则发送这个帧
- 若检测到总线忙,则继续检测并等待总线转为空闲 96 比特时间,然后发送这个帧
- 96 比特时间 是指发送 96 比特所耗费的时间,也称为 帧间最小间隔。其作用是使接收方可以检测出一个帧的结束,同时也使得其他站点有机会平等竞争信道并发送帧
碰撞检测CD
举例分析 载波监听多址接入/碰撞检测 过程
- 假设在主机 B 发送帧的过程中,主机 C 也要发送帧。主机 C 进行载波监听,发现总线空闲 96 比特后立即发送帧,这必然导致碰撞
- 碰撞信号沿总线传播,主机 C 比主机 B 更早检测到碰撞并停止发送,退避一段随机时间后,重新发送之前所发送的帧
- 当主线 B 检测到碰撞后,同样也停止发送退避一段随机时间,重新发送之前所发送的帧
以太网还采用了一种 强化碰撞 的措施,这就是当发送帧的站点一旦检测到碰撞,除了立即停止发送帧外,还要继续 发送 32 比特或 48 比特的人为干扰信号(Jamming Signal),以便有足够多的碰撞信号使所有站点都能检测出碰撞。
CSMA/CD协议 —— 争用期(碰撞窗口)
- 经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞
- 每一个主机在自己发送帧之后的一小段时间内,存在着偶遇碰撞的可能性。这一小段时间取决于另一个发送帧的主机到本主机的距离,但不会超过总线端到端的往返传播时延,也就是一个争用期时间
- 显然,在以太网中发送帧的主机越多,端到端往返传播时延越大,发生碰撞的概率就越大。因此,共享式以太网不能连接太多的主机,使用的总线也不能太长
CSMA/CD协议 —— 最小帧长
- 以太网规定最小帧长为 64 字节,即 512 比特(512 比特时间即为争用期)
- 如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不少于 64 字节
- 以太网的 最小帧长确保了主机可在帧发送完成之前就检测到该帧的发送过程中是否遭遇了碰撞
- 如果在争用期(共发送 64 字节)没有检测到碰撞,那么后续发送的数据就一定不会发生碰撞
- 如果在争用期内检测到碰撞,就立即中止发送,这时已经发送出去的数据一定小于 64 字节。因此,凡长度小于 64 字节的帧都是由于碰撞而异常中止的无效帧
CSMA/CD协议 —— 最大帧长
- 示例
CSMA/CD协议 —— 截断二进制指数退避算法
- 若连续多次发生碰撞,就表明可能有较多的主机参与竞争信道。但使用上述退避算法可 使重传需要推迟的平均时间随重传次数而增大(这也称为 动态退避),因而 减小发生碰撞的概率,有利于整个系统的稳定
- 当 重传 16 次仍不能成功 时,表明同时打算发送帧的主机太多,以至于发生碰撞,则 丢弃该帧,并向高层报告
CSMA/CD协议 —— 信道利用率
CSMA/CD协议 —— 帧发送流程
CSMA/CD协议 —— 帧接收流程
相关练习题
注意:CSMA/CD协议曾经用于各种总线结构以太网和双绞线以太网的早期版本中。 现在的以太网基于交换机和全双工连接,不会有碰撞,因此没有必要使用CSMA/CD协议。 ?
4. 随机接入 —— CSMA/CA协议
本节介绍无线局域网使用的媒体接入协议 CSMA/CA,也就是 载波监听多址接入/碰撞避免
思考:既然 CSMA/CD协议已经成功地应用于使用广播信道的有线局域网,那么同样使用广播信道的无线局域网能不能也使用 CSMA/CD协议呢?
- 在无线局域网中,仍然可以使用载波监听多址接入CSMA,即在发送帧之前先对传输媒体进行载波监听。若发现有其他站在发送帧,就推迟发送以免发生碰撞
- 在无线局域网中,不能使用碰撞检测CD,原因如下:
- 由于无线信道的传输条件特殊,其信号强度的动态非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度(可能相差百万倍)。如果要在无线网卡上实现碰撞,对硬件要求非常高
- 即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性(存在隐蔽站问题),进行碰撞检测的意义也不大
这种未能检测到信道上其他站点信号的问题叫做隐蔽站问题
IEEE 802.11是现今无线局域网通用的标准,虽然经常将 Wi-Fi 与 802.11 混为一谈,但两者并不等同
- 802.11无线局域网使用CSMA/CA协议,在CSMA的基础上增加了一个碰撞避免CA功能,而不再实现碰撞检测功能
- 由于不能避免所有的碰撞,并且无线信道误码率较高,802.11标准还使用了数据链路层确认机制(停止-等待协议)来保证数据被正确接收
- 802.11的MAC层标准定义了两种不同的媒体接入控制方式:
- 分布式协调功能DCF:在DCF方式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权,这是802.11定义的默认方式
- 点协调功能PCF:CF方式使用集中控制的接入算法,是802.11定义的可选方式,实际中较少使用
帧间间隔IFS
- 802.11标准规定,所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔IFS
- 帧间间隔的长短取决于该站点要发送的帧的类型:
- 高优先级帧需要等待的时间较短,因此可优先获得发送权
- 低优先级帧需要等待的时间较长,若信道被高优先级帧占用,低优先级帧则推迟发送,减少碰撞
- 常用的两种帧间间隔如下:
- 短帧间间隔SIFS(28μs),是最短的帧间间隔,用来分隔开属于一次对话的各帧
- DCF帧间间隔DIFS(128μs)。在DCF方式中用来发送数据帧和管理帧
CSMA/CA 协议工作原理
三个问题
- 源站为什么在检测到信道空闲后还要再等待一段时间 DIFS ?
- 考虑到可能有高优先级的帧要发送,若有,应先让高优先级帧发送
- 目的站为什么正确接收数据帧后还要等待一段时间 SIFS 才能发送 ACK 帧呢?
- SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧
- 在这段时间内,一个站点应当能从发送方式切换到接收方式
- 信道由忙转为空闲且经过DIFS时间后,为什么还要退避一段随机时间才能使用信道?
- 防止多个站点同时发送数据而产生碰撞
何时采用退避算法?
- 当站点检测到信道是空闲的,并且所发送的数据帧紧接上次发送时,不使用退避算法
- 但以下情况必须使用退避算法:
- 在发送数据帧之前检测到信道处于忙状态
- 在每一次重传一个数据帧时
- 在每一次成功发送后要连续发送下一个帧时(避免一个站点长时间占用信道)
CSMA/CA 协议的退避算法
- 在执行退避算法时,站点为退避计时器设置一个随机的退避时间:
- 当退避计时器的时间减少到零时,就开始发送数据
- 当退避计时器的时间还未减少到零时而信道又转为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过时间DIFS后,继续启动退避计时器
- 在进行第 i 次退避时,退避时间在时隙编号 { 0,1,…,2 ^(2+i) - 1 } 中随机选择一个,然后乘以基本退避时间(也就是一个时隙的长度)就可以得到随机的退避时间。这样做是为了使不同站点选择相同退避时间的概率减少。当时隙编号达到 255 时(对应于第6次退避)就不再增加了。
CSMA/CA 协议的信道预约和虚拟载波监听
- 为了尽可能减少碰撞的概率和降低碰撞的影响,802.11 标准允许要发送数据的站点对信道进行预约
- 源站在发送数据帧之前先发送一个短的控制帧,称为 请求发送RTS(Request To Send),它包括源地址、目的地址以及这次通信(包括相应的确认帧)所需的持续时间
- 若目的站正确收到源站发来的RTS帧,且媒体空闲,就发送一个响应控制帧,称为 允许发送CTS(Clear To Send),它也包括这次通信所需的持续时间(从RTS帧中将此持续时间复制到CTS帧中)
- 源站收到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帧或数据帧中的任何一个,就能知道信道被占用的持续时间,而不需要真正监听到信道上的信号,因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题
- 如下图所示隐蔽站
- 主机 C 接收到主机 B 发送来的CTS,就知道了信道将被占用时间,在这段时间内不能发送帧
相关练习
七、MAC地址、IP地址以及 ARP 协议
- MAC 地址是以太网的 MAC 子层所使用的地址 (数据链路层内容)
- IP 地址是 TCP/IP 体系结构网际层所使用的地址(网际层内容)
- ARP 协议属于 TCP/IP 体系结构的网际层,其作用是已知设备所分配到的 IP 地址,使用 ARP 协议可以通过该 IP 地址获取到设备的 MAC 地址(网际层内容)
尽管 IP 地址和 ARP 协议属于 TCP/IP 体系结构的网际层(而不属于数据链路层),但是它们和 MAC 地址存在一定关系,因此放在一起讨论。 ?
1. MAC 地址
-
使用点对点信道的数据链路层不需要使用地址 -
使用广播信道的数据链路层必须使用地址来区分各主机 -
当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址 -
在每个主机发送的帧中必须携带发送主机和接收主机的地址。由于这类地址是用于媒体接入控制 MAC(Media Access Control),因此这类地址被称为 MAC地址
-
MAC 地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器 EEPROM 中,因此 MAC 地址也被称为 硬件地址 -
MAC 地址有时也被称为 物理地址。但这不意味着 MAC 地址属于网络体系中的物理层 -
每个网络适配器都有一个全球唯一的 MAC 地址。而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的 MAC 地址。严格来说,MAC 地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识
IEEE 802 局域网的 MAC 地址格式
它由 48 个比特构成,每 8 个比特为一字节,从左右依次为第一到第六字节。这种地址标识符称为 扩展的唯一标识符 EUI,对于 48 比特的 MAC 地址,可称为 EUI - 48。
IEEE 802 局域网的 MAC 地址表示方法
- 每 4 个比特写成 1 个十六进制的字符,共 12 个字符,每两个字符分为一组。
- 如下图
IEEE 802 局域网的 MAC 地址类型
- 对于使用 EUI-48 空间的应用程序,IEEE 的目标寿命为 100 年(直到 2080 年),但是鼓励采用 EUI-64 作为代替
IEEE 802 局域网的 MAC 地址发送顺序
- 字节发送顺序: 第一字节 -----→ 第七字节
- 字节内的比特发送顺序:b0 -----→ b7
单播 MAC 地址作用 举例说明
下图为一个拥有三台主机的总线型以太网,各主机网卡上固化了全球单播 MAC 地址。假设,主机 B 要给主机 C 发送单播帧
- 过程分析
- 主机 B 首先要构建该单播帧,在帧首部中目的地址字段填入主机 C 的 MAC 地址,源地址字段填入自己的 MAC 地址,再加上帧首部中的其他字段、数据载荷以及帧尾部,就构成了该单播帧
- 主机 B 将该单播帧发送出去,主机 A 和 C 都会收到该单播帧。主机 A 的网卡发现该单播帧的 MAC 地址和自己不匹配,于是丢弃该帧;主机 C 发现其匹配,接收该帧,并将其交给上层处理
广播 MAC 地址作用 举例说明
如下图所示,主机 B 要发送广播帧
- 主机 B 首先要构建该广播帧,在帧首部的目的地址字段填入广播地址,源地址字段填入自己的 MAC 地址,再加上帧首部中的其他字段、数据载荷以及帧尾部,就构成了该广播帧
- 主机 B 将该广播帧发送出去,主机 A 和 C 收到后,发现该广播帧首部中目的地址字段的内容是广播地址,就知道该帧是广播帧,于是接收该帧,并交给上层处理
多播 MAC 地址作用 举例说明
如下图,主机 A 要发送多播帧给给多播地址。将该多播地址的左起第一个字节写成 8 个比特,可以看到最低比特位是 1,这就表明该地址是多播地址。 假设主机 B、C、D 支持 MAC 多播,各用户给自己的主机配置的多播组列表如下:
- 主机 A 首先要构建该多播帧。在帧首部中的目的字段填入该多播地址,源地址字体填入自己的 MAC 地址,再加上帧首部中的其他字段、数据载荷以及帧尾部,就构成了该多播帧
- 主机 A 将该多播帧发送出去,主机 B、C、D 收到该多播帧后,将该多播帧的目的 MAC 地址与自己的多播组列表中地址匹配。主机 B、C匹配成功后,接收该帧,并交予上层处理;而主机 D 则丢弃该多播帧
- 这里介绍一个判断 MAC 地址是否为多播地址的方法
- 需要注意:给主机配置多播组列表进行私有应用时,不得使用公有的标准多播地址
?
2. IP 地址
- IP 地址是因特网上的主机和路由器所使用的地址,用于标识两部分信息:
- 网络编号:标识因特网上数以百万计的网络
- 主机编号:标识同一网络上不同主机(或路由器各接口)
- 很显然,之前介绍的 MAC 地址不具备区分不同网络的功能,而 IP 地址具备此种功能
- 如果只是一个单独的网络,不接入因特网,可以只使用 MAC 地址(这不是一般用户的应用方式)
- 如果主机所在的网络要接入因特网,则 IP 地址和 MAC 地址都需要使用
从网络体系结构看 IP 地址与 MAC 地址
数据包转发过程中 IP 地址与 MAC 地址的变化情况
假设主机 H1 要向主机 H2 发送数据包 发送过程如下(只考虑网络层和链路层,IP地址、MAC地址用字符标识)
- 数据包转发过程中 源 IP 地址和目的 IP 地址保持不变
- 数据包转发过程中 源 MAC 地址和目的 MAC 地址逐个链路(或逐个网络)改变
?
3. ARP 协议
问题: 如果通过 IP 地址找到相应的 MAC 地址呢 ?
ARP 协议的工作原理
假设主机B要给主机C发送数据包。主机B知道主机C的 IP 地址,但不知道主机C的 MAC 地址,因此主机B的数据链路层封装 MAC 帧时,无法填写目的 MAC 地址,进而无法构建要发送的 MAC 帧。
- 实际上,每台主机都会有一个 ARP 高速缓存表,ARP高速缓存表中记录有IP地址和MAC地址的对应关系
- 过程分析
-
当主机B要给主机C发送数据包时,会首先在自己的ARP高速缓存表中查找主机C的IP地址所对应的 MA 地址,但是未找到。因此,主机B需要发送ARP请求报文来获取主机C的MAC地址 ARP 请求报文被封装在 MAC 帧中发送,目的地址为广播地址 -
主机B发送封装有ARP请求报文的广播帧,总线上的其他主机都能收到该广播帧。主机A对此不予理会,主机C进行响应 -
主机C将B的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后给B发送ARP响应报文,以告知自己的MAC地址 ARP响应报文被封装在MAC帧中发送,目的地址为主机B的MAC地址 -
主机C给主机B发送封装ARP响应报文的单播帧,总线上的其他主机都能收到该单播帧。主机A丢弃该帧;主机B收到发现匹配后交予上层处理,上层解析后,将其记录到ARP缓存表中 -
于是,主机B就可以向主机C发送数据包了
- ARP 高速缓存表中的每一条记录都有其类型,分为 动态 和 静态 两种:
- ARP 协议只能在一段链路或一个网络上使用,而不能跨网络使用
?
八、集线器与交换机的区别
早期的总线型以太网
这种使用无源电缆和大量机械接头的总线型以太网,并不可靠
使用双绞线和集线器HUB的星型以太网
实践证明,使用双绞线和集线器比使用具有大量机械接头的无源电缆可靠得多,而且价格便宜、使用方便。因此,粗缆和细缆的以太网早已成为历史。
- 使用集线器的以太网在逻辑上仍是一个总线网,各站共享总线型资源,使用的还是CSMA/CD协议
- 集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测(由各站的网卡检测)
- 集线器一般都具有少量的容错能力和网络管理功能。例如,若网络中某个网卡出了故障,不停地发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作
使用集线器HUB在物理层扩展以太网
假设某学院下设三个系部,每个系部有一个使用集线器作为互联设备的以太网,这三个以太网相互独立,各自共享自己的总线资源 为了使各系的以太网相互通信,可再使用一个集线器将它们互连起来,形成一个更大的总线型以太网
以太网交换机 SWITCH
在集线器之后,发展出了更先进的网络互连设备,也就是以太网交换机
-
以太网交换机与集线器的区别 -
以太网交换机通常都有多个接口。每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式,发送和接收帧可以同时进行 注意:使用集线器的以太网在逻辑上是共享总线的,需要使用CSMA/CD协议来协调各主机争用总线,只能工作在半双工模式,收发帧不能同时进行 -
以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞(不使用CSMA/CD协议) -
以太网交换机一般都具有多种速率的接口,如:10Mb/s、100Mb/s、1Gb/s、10Gb/s接口的多种组合 -
以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧 -
以太网交换机是一种即插即用的设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的 -
帧的两种转发方式:
- 存储转发
- 直通交换:采用基于硬件的交叉矩阵(交换时延非常小,但不检查帧是否有差错)
对比集线器和交换机
- 主机发送单播帧时
???????????????????????????????? - 主机发送广播帧时
????????????????? - 多台主机同时向另一台主机发送单播帧
???????????????????????????????????????? - 扩展以太网下发送单播帧
- 扩展以太网下发送广播帧
- 扩展以太网下多主机发送单播帧
总结集线器与交换机区别
?
九、以太网交换机自学习和转发帧的流程
- 以太网交换机工作在数据链路层(也包括物理层)
- 以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧
- 以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表
举例分析
如图所示,相互连接的两台以太网交换机各自连接了三台主机,构成了一个交换式以太网。 注意:本案例重点说明自学习和转发帧流程,假设前提是各主机知道网络中其他各主机的MAC地址(无需进行ARP)
假设主机A给主机B发送帧,下面分析一下流程:
- 该帧从交换机1的接口1进入交换机1,交换机1首先进行登记工作,将该帧的源MAC地址A记录到自己的帧交换表中,将该帧进入自己的接口的接口号1相应地也记录到帧交换表中,上述登记工作就称为交换机的自学习
- 之后,交换机1对该帧进行转发。该帧的目的MAC地址是B,在帧交换表中查找MAC地址B,发现找不到。于是对该帧进行盲目转发,也称为泛洪,也就是向除该帧进入交换机接口外的其他所有接口转发该帧
- 主机B的网卡收到该帧后,根据帧的目的MAC地址B就知道这是发送给自己的帧,于是接收该帧;而主机B和主机C收到该帧后将其丢弃
- 该帧从交换机2的接口2进入交换机2,交换机2首先进行登记的工作,之后对该帧进行转发,但是在帧交换表中找不到MAC地址B,于是盲目转发。主机D、E和F都不能接收该帧因而将其丢弃
-
接下来,主机B给主机A发送帧,该帧从交换机1的接口3进入交换机1。交换机1首先继续登记,将该帧源MAC地址B记录到自己的交换表中,将该帧进入自己的接口号3也记录下来 -
之后交换机1对该帧进行转发,在帧转换表中可以找到目的MAC地址A,于是从接口1转发该帧(明确的转发,交换机2不会收到该帧)
下面我们给交换机1的接口1再连接一台主机G,主机A、G和交换机的接口1共享同一根总线。下面分析主机G向主机A发送帧的过程:
- 该帧通过总线传输,主机A和交换机1的接口1都可以收到。主机A的网卡收到该帧后接收该帧;交换机1收到该帧后,首先进行登记工作,之后对该帧进行转发
- 在帧交换表中查找目的MAC地址A,发现所对应的接口号是1,而该帧正是从此接口进入的,因此交换机1不会再从此接口将帧转发出去,于是丢弃该帧
需要注意:帧交换表中的每条记录都有自己的有效时间,到期自动删除!这是因为MAC地址与交换机接口的对应关系并不是永久性的。如,交换机接口改接其他主机;主机更换网卡
相关习题
十、以太网交换机的生成树协议STP
思考一个问题:如何去提高以太网的可靠性呢?
如下图,如果交换机A与B直接链路故障,则导致交换机B上连接的所有主机无法与交换机A、C上所连主机通信
生成树协议STP
以太网交换机使用生成树协议STP,可以在增加冗余链路提高网络可靠性的同时又避免网络环路带来的问题。
- 无论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路)
- 最终生成的树型逻辑拓扑要确保连通整个网络
- 当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树的重新计算
?
十一、虚拟局域网VLAN
1. 虚拟局域网VLAN概述
分隔广播域的方法
虚拟局域网VLAN技术
虚拟局域网VLAN是一种将局域网内的设备划分成与物理位置无关的逻辑组技术,这些逻辑组具有某些共同的需求。
如下图,根据应用需求将某局域网划分成两个VLAN:VLAN1 和 VLAN2。此后,VLAN1中的广播数据包不会传给VLAN2,VLAN2中的广播数据包也不会传给VLAN2。 那么,如何才能实现VLAN呢 ?我们下面介绍实现机制。
?
2. 虚拟局域网VLAN的实现机制
虚拟局域网VLAN技术是在交换机上实现的,需要交换机能实现以下两大功能:
- 能够处理带有VLAN标记的帧,即 IEEE 802.1Q帧
- 交换机的各端口可以支持不同的端口类型,不同类型的端口对帧的处理方式不同
IEEE 802.1Q 帧
- IEEE 802.1Q帧(也称Dot One Q帧)对以太网的MAC帧格式进行了扩展,插入了4字节的VLAN标记
- VLAN标记的最后12比特称为 VLAN标识符VID,它唯一地标识了以太网帧属于哪一个VLAN
- 802.1Q 帧是由交换机来处理的,而不是用户主机来处理的
- 当交换机收到普通的以太网帧时,会向其插入4字节的VLAN标记转变为 802.1Q 帧,简称 “ 打标签 ”
- 当交换机转发 802.1Q 帧时,可能会删除其4字节VLAN标记转变为普通以太网帧,简称 “ 去标签 ”
交换机的端口类型
- 交换机的端口类型有以下三种
- Access
- Trunk
- Hybrid
- 交换机各端口的缺省VLAN ID
-
在思科交换上称为 Native VLAN, 即本征 VLAN 例如,思科交换机在用户未配置VLAN时,所有端口都默认属于 VLAN1,即所有端口的本征VLAN都是VLAN1 -
在华为交换机上称为 Port VLAN ID,即端口 VLAN ID,简记为 PVID 需要注意,交换机的每个端口有且仅有一个PVID
Access 端口
- Access端口一般用于连接用户计算机
- Access端口只能属于一个VLAN
- Access端口的PVID值与端口所属VLAN的ID相同(默认为 1)
如图所示,交换机首次上电时,默认配置各端口属于 VLAN1,也就是各端口的PVID值等于1;默认配置各端口的类型为 Access
-
Access 端口接收处理方法: 一般只接受 “ 未打标签 ” 的普通以太网MAC帧。根据接收帧的端口的PVID给帧 “ 打标签 ”,即插入 4 字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等 由于端口1的PVID值等于 1,因此所插入4字节VLAN标记字段中的VID值也为 1 -
Access 端口发送处理方法: 若帧中的VID与端口的PVID相等,则 “ 去标签 ” 并转发该帧;否则不转发 广播帧中的VID取值与端口2,3,4 的PVID取值都等于 1,因此,交换机会从这三个端口对帧进行 “去标签” 转发
举例分析 —— Access 端口功能
应用需求:将主机 A 和 B 划归到 VLAN2,主机 C 和 D 划归到 VLAN3,VLAN2 中广播帧不会传送到 VLAN3
为实现此应用,可以在交换机上创建 VLAN2 和 VLAN3,将交换机的端口 1 和 2 划归到 VLAN2,端口 3 和 4划归到 VLAN3。
下图为主机 A 发送广播帧的情况: 同样,主机 C 发送广播帧时:
Trunk 端口
- Trunk 端口一般用于交换机之间或交换机与路由器之间的互连
- Trunk 端口可以属于多个 VLAN。也就是说 Trunk 端口可以接收和发送多个 VLAN 的帧
- 用户可以设置 Trunk 端口的 PVID 值。默认情况下,Trunk 端口的 PVID 值为 1
- Trunk 端口发送处理方法:
- 对于 VID 等于 PVID 的帧, “ 去标签 ” 再转发
- 对于 VID 不等于 PVID 的帧,直接转发
- Trunk端口接收处理方法:
- 接收 “ 未打标签 ” 的帧,根据接收帧的端口的 PVID 给帧 “ 打标签 ”
- 接收 “ 已打标签的帧 ”
更准确的说法:
Trunk 端口收报文: 收到一个报文,判断是否有 VLAN 信息,如果没有则打上端口的 PVID,并进行交换转发;如果有判断该 Trunk 端口是否允许该 VLAN 的数据进入:如果允许则报文携带原有 VLAN 标记进行转发,否则丢弃该报文。 ? Trunk端口发报文: 比较端口的 PVID 和将要发送报文的 VLAN 信息,如果两者相等则剥离 VLAN 信息再发送,否则报文将携带原有的 VLAN 标记进行转发。
举例说明 ——Trunk 端口功能
应用需求: 将主机 A、B、E、F 划归到 VLAN1,主机 C、D、G、H 划归到 VLAN2。
- 由于交换机首次上电时默认配置各端口属于 VLAN1,其相应的 PVID 值等于 1,端口类型为 Access。因此,需要对交换机进行相应的配置才能满足需求
- 分别在两个交换机上创建 VLAN2,并将它们的端口 3 和 4 都划归到 VLAN2,其相应的 PVID 值等于 2。而两个交换机的端口 1 和 2 默认配置即可,也就是其相应的 PVID 值等于 1
- 需要注意,两个交换机互连的端口 5,需要将它们的类型更改为 Trunk 类型,而它们的 PVID 值保持默认的 1 即可
下面是主机 A 发送广播帧的情况:
下面是主机 C 发送广播帧的情况:
看一个习题
结论:互连的 Trunk 端口的PVID值不等,可能会造成转发错误
Hybrid 端口(华为交换机私有)
-
Hybird 端口既可用于交换机之间或交换机与路由器之间的互连(同 Trunk 端口),也可用于交换机与用户计算机之间的互连(同 Access 端口) -
Hybird 端口可以属于多个 VLAN(同 Trunk 端口) -
用户可以设置 Hybird 端口的 PVID 值。默认情况下,Hybird 端口的 PVID 值为 1(同 Trunk 端口) -
Hybird 端口发送处理方法(与 Trunk 端口不同) 查看帧的 VID 是否在端口的 “ 去标签 ” 列表中:
- 若存在,则 “ 去标签 ” 后再转发
- 若不存在,则直接转发
-
Hybird 端口接收处理方法(同 Trunk 端口)
- 接收 “ 未打标签 ” 的帧,根据接收帧的端口的 PVID 给帧 “ 打标签 ” ,即插入 4 字节VLAN标记字段,字段中的 VID 取值与端口的 PVID 取值相等
- 接收 “ 已打标签 ” 的帧
应用实例 —— Hybrid 端口
- 主机 B 向主机 C 发送数据帧时
- 主机 A 向主机 B 发送数据帧时
主机 B 无法识别带 VLAN 标记的 802.1Q 帧(主机 B 可以识别普通以太网 MAC 帧,不能识别 802.1Q 帧),而将其丢弃
|