数据链路层
概述
数据链路层在网络体系结构中的地位
主机 H1 给主机 H2 发送数据,中间要经过 3 个路由器和电话网、局域网以及广域网等多种网络。从五层协议原理体系结构角度来看
为了专注数据链路层内容,这里我们只考虑数据链路层,而不考虑其他层
主机 H1 到 H2 的通信可以看作在 4 个不同链路上组成
链路
(LINK)就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点
要在链路上传输数据,仅有链路还不够,还需要一些通信协议来控制数据的传输
数据链路
(Data Link)是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路
在数据链路层上传输的数据包又称为 帧
- 数据链路层以 帧 为单位传输和处理数据
数据链路层三个重要问题
-
封装成帧
数据在应用层被封装成为应用层数据单元
运输层==>为其添加运输层协议首部(成为运输层协议数据单元)
网络层==>添加网络层协议首部(成为网络层协议数据单元)
数据链路层==>添加帧头帧尾(即封装成帧)
-
差错检测
检错码和检错算法对数据进行校验(如下图FCS)
- 可靠传输
这三个问题针对于点对点信道的数据链路层,使用广播信道的数据链路层除了这三个问题外,还有一些其他问题
封装成帧
封装成帧
是指数据链路层给上层交付的协议数据单元添加 帧头 和 帧尾 的过程
-
帧头和帧尾中包含有重要的控制信息
-
帧头和帧尾的作用之一就是帧定界
发送方的数据链路层将上层交付下来的协议数据单元封装成帧后,还要通过物理层将构成帧的各比特转换成电信号发送到传输媒体。
帧定界
如下图,红色字段为帧定界标志
并不是每一种数据链路层协议的帧都包含帧定界标志。例如,以太网 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” 的个数为奇数(奇校验)或 偶数(偶校验)
- 如果有 奇数个位 发生误码,则奇偶性发生变化,可以检查出误码
- 如果有 偶数个位 发生误码,则奇偶性不发生变化,不能检查出误码(漏检)
这种检错方法漏检率比较高,计算机网络的数据链路层一般不会采用这种检测方法
循环冗余校验
具体步骤:
-
收发双方约定好一个 生成多项式 G(x)
-
发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输
-
接收方通过生成多项式来计算收到的数据是否产生了误码
需要注意,CRC算法要求生成多项式必须包含最低次项
分析
注意:
- 检错码只能检测帧在传输过程中是否出现差错,无法定位错误、纠正错误
- 循环冗余校验CRC有漏检率低,易于硬件实现,广泛应用于数据链路层
可靠传输
基本概念
使用差错检验技术,接收方的数据链路层就可检测出帧在传输过程中是否产生了误码(比特错误)。那么接下来如何处理呢?
这取决于数据链路层向其上层提供的服务类型:
- 不可靠传输服务:仅仅丢弃有误码的帧,其他什么都不做
- 可靠传输服务:想办法实现发送端发送什么,接收端接收什么
对有线链路而言
- 一般情况下,有线链路的误码率比较低,为了减少开销,并不要求数据链路层向其上层提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理
对于无线链路
- 无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务
传输差错
- 比特差错只是传输差错的一种
- 从整个计算机网络体系结构来看,传输差错还包括 分组丢失、分组失序 以及 分组重复
- 分组丢失、分组失序、分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层
- 可靠传输服务并不仅局限在数据链路层,其他各层均可选择实现可靠传输
例如:TCP/IP四层体系结构中:
可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求
可靠传输的三种实现机制
停止 - 等待协议SW
回退N帧协议GBN
选择重传协议SR
需要注意的是,这三种可靠传输实现机制的基本原理 可以应用到计算机网络体系结构的各层协议 中
停止 - 等待协议SW
示意图
- ACK:接收方收到数据分组后进行差错检测,若没有误码,则接收该分组,并给发送方 发送确认分组,简称为ACK
- NAK:若差错检测发现误码,则丢弃该分组,并给发送方 发送否认分组,简称为 NAK
停止等待的过程
- 发送方每发送完一个数据分组后,就 停止 发送下一个数据分组,等待 来自接收方的 确认分组或否认分组。若收到确认分组,则可以继续发送下一个数据分组;若收到否认分组,则重发之前发送的那个数据分组。
传输过程出现的三个问题
- 上述只是发送过程中数据分组产生误码的情况,如果数据分组在传输过程中丢失了呢 ?
两点说明:
- 接收方接收不到数据分组,就不会发送 ACK 或 NAK 。如果不采取其他措施,发送方就会一直处于等待状态。
- 这里说明一下,对于数据链路层点对点信道而言,不太容易出现此情况。但对多网络多路由器的互连网环境而言,经常出现此情况
为解决该问题,可采用 超时重传 实现数据分组的重新传输
- 超时重传:在发送方发送完一个数据分组后,启动一个 超时计时器。到了超时计时器所设置的重传时间而发送方仍接收不到ACK或NAK,则重传原分组
- 一般可将重传时间选为略大于 “ 从发送方到接收方的平均往返时间 ”
- 发送方发送的确认分组丢失,如何确定超时重传后的数据分组 是否为重复的数据分组 呢?
为 避免重复分组 这种传输错误,必须给每个分组 带上序号。
- 只需要保证与上个分组的序号不同即可,因此只需 1 个比特编号即可,即 0 或 1
- 如果确认分组迟到,导致了超时重传,接收方再次发送确认分组,如何区分同一确认分组的重复发送呢 ?
- 对于数据链路层的点对点信号,往返时间比较固定,不会出现确认迟到的情况。因此,如果只在数据链路层实现 停止-等待协议,可以不用给确认分组编号
对确认分组也进行编号,就可以使发送方避免这种误判
停止 - 等待协议的 信道利用率
- 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。
- 发送方收到重复的确认,就知道之前发送的分组出现差错,于是就可以不等超时计时器超时就立刻重传。至于收到几个重复确认分组后开始重传,由具体实现决定。
选择重传协议
通过前文可知,一个数据分组的误码就会导致后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,对通信资源产生极大浪费,因此引入选择重传协议。
概念
设法 只重传出现误码的数据分组。因此,接收窗口的尺寸WR不再等于 1 (而是 大于 1),以便 接收方先收下窗口内无误码的数据分组 ,等所缺部分收齐后一并递交上层,这就是 选择重传协议
- 接收方不能再采取累积确认,而是 逐一确认
示例分析:
传输条件:
但在传输过程中 2 号数据分组丢失
过程分析:
- 接收方将接收 0 号和 1 号数据分组,并发送确认分组,之后接收窗口向前滑动两个位置。接收方再接收 3 号数据分组,并发送 3 号确认分组,但是接收窗口不能向前滑动,因为这是一个未按序到达的数据分组.
- 发送方接收 0 号 和 1 号确认分组,发送窗口向前滑动两个位置。再将落入的 4 号 和 5 号数据分组发送出去。发送方接收 3 号数据分组,但是窗口不能向前滑动,因为这个是一个未按序到达的确认分组。
- 等待 2 号数据分组超时重传后,接收方接收到按序到达的数据分组,并发送确认分组,接收窗口才可以向前滑动。
- 发送方收到按序到达的 2 号确认分组,发送窗口向前滑动 4 个位置。
点对点协议ppp
基础概念:
-
点对点协议 PPP(Point-to-Point Protocal)是目前使用最广泛的点对点数据链路层协议
另外,PPP协议也广泛用于广域网路由器之间的专用线路
-
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成:
- 对各种协议报的封装方法(封装成帧)
- 链路控制协议LCP (用于建立、配置以及测试数据链路的连接)
- 一套网络控制协议NCPs(其中的每一个协议支持不同的网络层协议)
帧格式:
透明传输:
-
面向字节的异步链路
-
面向比特的同步链路
差错检测:
PPP帧尾部包含有 1 个两字节的帧检验序列 FCS 字段,使用循环冗余校验 CRC 来计算该字段的取值
生成多项式
接收方每收到一个PPP帧,就进行 CRC 检验。若 CRC 检验正确,就收下这个帧;反之,就丢弃这个帧。使用PPP的数据链路层 向上提供不可靠传输服务。
工作状态:
以拨号接入为例,简单介绍PPP协议的工作状态
媒体介入控制
基本概念
共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即 媒体接入控制 MAC (Medium Access Control)
媒体接入控制主要分类
静态划分信道
- 静态划分信道也就是预先固定分配好信道,这类方法非常不灵活,对于突发性数据传输信道利用率会很低
- 通常在无线网络的物理层中使用,而不是在数据链路层中使用
动态接入控制
-
在 集中控制 的多点轮询协议中,有一个主站以循环方式 轮询 每个站点有无数据发送,只有被轮询到的站点才能发送数据。集中控制的最大缺点,就是存在单点故障问题 (已淘汰)
-
在 分散控制 的令牌传递协议中,各站点是平等的,并连接成一个环型网络。令牌(一种特殊的控制帧)沿环逐站传递,接收到令牌的站点才有权发送数据,并在发送完数据后,将令牌传给下一个站点(已淘汰)
-
采用 令牌协议 的典型网络有:IEEE 802.5 令牌环网,IEEE 802.4 令牌总线网,光线分布式数据接口FDDI(已淘汰)
-
随机接入 的特点是 所有站点通过竞争,随机的在信道上发送数据。如果有两个或以上站点在同一时刻发送数据,那么信号在共享媒体上就要 产生碰撞,使得站点的发送都失败。因此,这类协议要解决的关键问题是如何 避免冲突,以及发生冲突后如何 尽快恢复通信
-
著名的共享式以太网采用的就是 随机接入
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享技术
静态划分信道
信道复用:
- 复用(Multiplexing)就是通过一条物理线路同时传输多路用户的信号
- 当网络中的传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽
- 常见的信道复用技术有
- 频分复用 FDM
- 时分复用 TDM
- 波分复用 WDM
- 码分复用 CDM
频分复用 FDM
- 频分复用的所有用户同时占用不同的频带资源并行通信
时分复用
- 时分复用的所有用户在不同的时间占用同样的频带宽度
- 每对用户只在所分配的时隙里使用线路传输数据
波分复用 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
应用
随机接入(CSMA/CD协议)
早期的共享式以太网采用 载波监听多址接入/碰撞检测 ,即 CSMA/CD协议 来解决碰撞冲突问题
多址接入
- 多个站连接在一条总线上,竞争使用总线
载波监听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/CA协议
- 在无线局域网中,仍然可以使用载波监听多址接入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(Media Access Control),因此这类地址被称为 MAC地址
-
MAC 地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器 EEPROM 中,因此 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 地址作用 举例说明
主机 A 要发送多播帧给给多播地址。将该多播地址的左起第一个字节写成 8 个比特,可以看到最低比特位是 1,这就表明该地址是多播地址。
假设主机 B、C、D 支持 MAC 多播,各用户给自己的主机配置的多播组列表如下:
- 主机 A 首先要构建该多播帧。在帧首部中的目的字段填入该多播地址,源地址字体填入自己的 MAC 地址,再加上帧首部中的其他字段、数据载荷以及帧尾部,就构成了该多播帧
- 主机 A 将该多播帧发送出去,主机 B、C、D 收到该多播帧后,将该多播帧的目的 MAC 地址与自己的多播组列表中地址匹配。主机 B、C匹配成功后,接收该帧,并交予上层处理;而主机 D 则丢弃该多播帧
-
快速判断mac地址是否为多播地址
-
需要注意:给主机配置多播组列表进行私有应用时,不得使用公有的标准多播地址
IP地址
-
IP 地址是因特网上的主机和路由器所使用的地址,用于标识两部分信息:
- 网络编号:标识因特网上数以百万计的网络
- 主机编号:标识同一网络上不同主机(或路由器各接口)
-
很显然,之前介绍的 MAC 地址不具备区分不同网络的功能,而 IP 地址具备此种功能
- 如果只是一个单独的网络,不接入因特网,可以只使用 MAC 地址(这不是一般用户的应用方式)
- 如果主机所在的网络要接入因特网,则 IP 地址和 MAC 地址都需要使用
网络体系结构中的ip地址和MAC地址
数据包转发过程中的IP与MAC的变化情况
假设主机 H1 要向主机 H2 发送数据包
过程
- 数据包转发过程中 源 IP 地址和目的 IP 地址保持不变
- 数据包转发过程中 源 MAC 地址和目的 MAC 地址逐个链路(或逐个网络)改变
ARP协议
每一台主机都维护着一张ARP高速缓存表,用于记录ip地址与mac地址的对应关系
主机B发送数据包的时候,主机会在ARP高速缓存表中查询目的地址的mac地址,如果不存在,就发送ARP请求报文(局域网内广播)
其他主机收到广播之后会交付上层处理,上层的arp进程发现需要的不是自己的ip地址,会将其直接忽略,如果是自己的ip地址,则将B的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后给B发送ARP响应,告知自己的mac地址
ARP缓存的类型:
动态
:自动获取,生命周期默认为两分钟;
静态
:手工设置,不同操作系统下的生命周期不同,例如系统重启后不存在或系统重启后依然有效。
集线器与交换机的区别
早起总线型以太网
使用双绞线和集线器hub的星型以太网
使用集线器的以太网在逻辑上仍是一个总线网,各站共享总线资源,使用的还是CSMA/CD协议;
集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测(由各站的网卡检测);
集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个网卡出了故障,不停地发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作。
使用集线器可以在物理层扩展以太网
以太网交换机
以太网交换机通常都有多个接口。每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式。
以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞(不使用CSMA/CD协议)。
以太网交换机一般都具有多种速率的接口,例如:
10Mb/s、100Mb/s、1Gb/s、10Gb/s接口的多种组合。
以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
以太网交换机是一种即插即用设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的。
帧的两种转发方式:
-
存储转发
-
直通交换:采用基于硬件的交叉矩阵(交换时延非常小,但不检查帧是否右差错)
对比
单播帧对比
集线器:
与集线器链接的所有主机都会收到消息,然后对比目的地址,发现不是自己的地址就拒绝接收
交换机:
会查询自身的帧交换表发送给目的主机
广播对比
基本没有区别
扩展以太网:
发送单播帧
发送广播帧
碰撞比较
总结
以太网交换机自学习和转发帧的流程
以太网交换机工作在数据链路层(也包括物理层)
以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表。
小结
以太网交换机的生成树协议STP
如何提高以太网的可靠性?
添加冗余链路可以提高以太网的可靠性
但是,冗余链路也会带来负面效应——形成网络环路
网络环路会带来以下问题:
-
广播风暴
大量消耗网络资源,使得网络无法正常转发其他数据帧;
-
主机收到重复的广播帧
大量消耗主机资源
-
交换机的帧交换表震荡(漂移)
以太网交换机使用生成树协议STP(Spanning Tree Protocol),可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题。
- 不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路);
- 最终生成的树型逻辑拓扑要确保连通整个网络;
- 当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树的重新计算。
虚拟局域网VLAN
概述
-
以太网交换机工作在数据链路层(也包括物理层)
-
使用一个或多个以太网交换机互连起来的交换式以太网,其所有站点都属于同一个广播域。
-
随着交换式以太网规模的扩大,广播域相应扩大。
-
巨大的广播域会带来很多弊端:
-
广播风暴
-
难以管理和维护
-
潜在的安全问题
-
网络中会频繁的出现广播信息
TCP/IP协议栈中的很多协议都会使用广播:
地址解析协议ARP
(已知IP地址,找出其相应的MAC地址)路由信息协议RIP
(一种小型的内部路由协议)动态主机配置协议DHCP
(用于自动配置IP地址)
NetBEUI
:Widnows下使用的广播型协议
IPX/SPX
:Novell网络的协议栈
Apple Talk
:Apple公司的网络协议栈
如何分割广播域?
- 使用路由器(成本高昂)
- 虚拟局域网VLAN
同一个vlan中的主机才能收到彼此之间的广播
实现机制
IEE802.1Q
交换机的端口类型
交换机的端口类型有以下三种:
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取值相等。
- 接收“已打标签的帧”;