3.1 概述
链路(Link):是从一个结点到相邻结点的一段物理线路,中间没用任何其他的交换结点。
数据链路(Data Link):把实现通信协议的硬件和软件加到链路上,就构成了数据链路。
数据链路层以帧为单位传输和处理数据。
数据链路层使用的信道主要有以下两种类型:
- 点对点信道
- 这种信道使用一对一的点对点通信方式。
- 广播信道
- 使用一对多的广播通信方式
- 因此必须使用专用的共享信道协议来协调这些主机的数据发送。
注:不同数据链路层可能采用不同的数据链路层协议。
局域网属于数据链路层
局域网虽然是个网络,但在同一个局域网中,分组怎么从一台主机传送到另一台主机,并不经过路由器转发。
从整个互联网来看,局域网仍属于数据链路层的范围。
3.2 封装成帧
封装成帧是指数据链路层将上层交付的协议数据单元添加帧头和帧尾使之成为帧。
帧头和帧尾中包含有重要的控制信息

问题来了,封装成帧后还要将数据由比特转为电信号提高传输媒体传输,接收方如何从物理层得到的比特流中提取出一个个的帧呢?
方法一:数据链路层使用帧头帧尾实现帧定界,如PPP帧

方法二:物理层加前导码,如以太网

帧到物理层以后,物理层为其添加前导码(包括 前同步码 和 帧开始定界符)
- 前同步码:作用是使接收方的时钟同步;
- 帧开始定界符:表明后面紧跟着的就是MAC帧
另外以太网还规定了帧间间隔为96比特时间,因此,MAC帧不需要帧结束定界符

我们希望数据链路层能实现透明传输,所谓透明传输,就是指数据链路层对上层交付的传输数据没有任何限制,好像数据链路层不存在一样。
问题来了,之前说到的帧定界符其实就是一个特定的比特串,如果在上层交付的PDU中,恰好也包含这个特定数值,那不就没法正确定界了吗。
这样一来,数据链路层对上层交付的PDU就由限制,也就不能实现透明传输。
解决方法:
- 面向字节的物理链路使用字节填充 (byte stuffing) 或字符填充 (character stuffing);
- 发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B);
- 接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
- 如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
- 面向比特的物理链路使用比特填充的方法实现透明传输;
- 在帧的数据部分,每遇到5个连续的比特1就在其后插入一个0,这样就不会和帧定界符01111110重复了,接收方收到后每5个1去掉后面的0即可
为了提高帧的传输速率,应当使帧的数据部分的长度尽可能大些。
但是考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分长度上限,即 最大传送单元MTU(Maximum Transfer Unit)
3.3 差错控制技术
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1。这称为比特差错。
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)。
使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
下面介绍几种常用的差错检测码
奇偶校验码
在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中“1"的个数为 奇数(奇校验) 或 偶数(偶校验)。
- 如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码;
- 如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检) ;
循环冗余校验码CRC
循环冗余校验CRC(Cyclic Redundancy Check)
- 收发双方约定好一个生成多项式G(x);
- 发送方基于待发送的数据 和 生成多项式 计算出 差错检测码(冗余码),将其添加到待传输数据的后面一起传输;
- 接收方通过生成多项式来计算收到的数据是否产生了误码。

计算CRC步骤:
- 构造被除数:在待发送数据后面添加生成多项式最高次个0
- 构造除数:生成多项式各项系数构成的比特串
- 做除法
- 检查余数:余数的位数应该与生成多项式最高次相同,若不同则在前补0凑足位数。
- 将余数加到待发数据之后
验证CRC步骤:
- 构造被除数:接收到的数据就是被除数
- 构造除数:生成多项式各项系数构成的比特串
- 做除法
- 检查余数:余数为0,可认为传输过程无误码;否则可认为传输过程产生误码
小结:
- 检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误;
- 要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用;
- 循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于硬件实现,因此被广泛应用于数据链路层;
- 帧校验序列FCS便是添加在数据后面的冗余码
- 在计算机网络中通常采用检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。
3.4 可靠传输
- 使用差错检测技术(例如循环冗余校验CRC),接收方的数据链路层就可检测出帧在传输过程中是否产生了误码(比特错误)
- 数据链路层向上层提供的服务类型:
- 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做;
- 可靠传输服务:想办法实现发送端发送什么,接收端就收到什么。
一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题可由其上层处理。
而无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
扩展:
之前讨论的差错是比特差错,其实比特差错只是传输差错的一种,传输差错还包括分组丢失、分组失序、分组重复。
- 分组丢失:路由器输入队列快满了,主动丢弃收到的分组
- 分组失序:数据并未按照发送顺序依次到达接收端
- 分组重复:由于某些原因,有些分组在网络中滞留了,没有及时到达接收端,这可能会造成发送端对该分组的重发,重发的分组到达接收端,但一段时间后,滞留在网络的分组也到达了接收端,这就造成分组重复的传输差错
分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层。
因此可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输。由于可靠传输的实现比较复杂,开销也比较大,是否使用还是要取决于应用需求。

为实现可靠传输,下面介绍三种可靠传输协议
- 停止-等待协议SW
- 回退N帧协议GBN
- 选择重传协议SR
注:这三种可靠传输实现机制的基本原理并不仅限于数据链路层,可以应用到计算机网络体系结构的各层协议中。
停止-等待协议
所谓停止-等待,就是发送方发送数据后需等到接收方的回应后才继续发送数据。
- 接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。
- 一般可将重传时间选为略大于 从发送方到接收方的平均往返时间;
- 但对于误码率较高的点对点链路,为使发送方尽早重传,也可给发送方发送NAK分组。
- 为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。
- 由于停止-等待协议的停等特性,只需1个比特编号就够了,即编号0和1
- 为了让发送方能够判断所收到的ACK分组是否是重复的,需要给ACK分组编号,所用比特数量与数据分组编号所用比特数量一样。
- 数据链路层一般不会出现ACK分组迟到的情况,因此在数据链路层实现停止等待协议可以不用给ACK分组编号。
停止-等待协议的信道利用率
假设收发双方之间是一条直通的信道
- TD:是发送方发送数据分组所耗费的发送时延
- RTT:是收发双方之间的往返时间
- TA:是接收方发送确认分组所耗费的发送时延
- 信道利用率 U=TD/(TD+RTT+TA)
TA一般都远小于TD,可以忽略。
当RTT远大于TD时(如卫星链路),信道利用率会非常低。
若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低。
为了克服停止-等待协议信道利用率很低的缺点,就产生了另外两种协议,即后退N帧协议GBN和选择重传协议SR。
像停止-等待协议这样通过确认和重传机制实现的可靠传输协议,常称为自动请求重传协议ARQ(Automatic Repeat reQuest),意思是重传的请求是自动进行的,不需要接收方显式地请求发送方重传某个发送的分组
回退N帧协议GBN
为什么用回退N帧协议:在相同的时间内,使用停止-等待协议的发送方只能发送一个数据分组,而采用流水线传输的发送方,可以发送多个数据分组,采用流水线传输可提高信道利用率。

回退N帧协议在流水线传输的基础上,利用发送窗口来限制发送方可连续发送数据分组的个数。
- 若采用n比特给分组编号,即有序号0~2^n-1;
- 发送窗口的尺寸WT的取值:1<WT≤2^n-1;
- 接收窗口的尺寸WR=1.
举例说明:
用3比特给分组编号,WT=5,WR=1。
无差错情况流程:
- 发送方将序号落在发送窗口内的0~4号数据分组,依次连续发送出去;
- 数据分组经过互联网传输正确到达接收方,也就是没有乱序和误码,接收方按序接收它们,每接收一个,接收窗口就向前滑动一个位置,并给发送方发送针对所接收分组的确认分组,在通过互联网的传输正确到达发送方;
- 发送方每接收一个、发送窗口就向前滑动一个位置,这样就有新的序号落入发送窗口,发送方可以将收到确认的数据分组从缓存中删除了,而接收方可以择机将已接收的数据分组交付上层处理。
接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后(由具体实现决定),对按序到达的最后一个数据分组发送确认。ACKn表示序号为n及以前的所有数据分组都已正确接收。
这种方法称为 累计确认
其优点在于:
- 即使部分确认分组丢失,发送方也可能不必重传
- 减小接收方的开销
- 减小对网络资源的占用
其缺点在于:
- 不能向发送方及时反映出接收方已经正确接收的数据分组信息
经过之前的无差错传输,现在发送窗口起始位置在5号位置
有差错情况流程:
- 在传输数据分组时,5号数据分组出现误码,接收方通过数据分组中的检错码发现了错误;
- 于是丢弃该分组,而后续到达的剩下四个分组与接收窗口的序号不匹配;
- 接收方同样也不能接收它们,将它们丢弃,并对之前按序接收的最后一个数据分组进行确认,发送ACK4,每丢弃一个数据分组,就发送一个ACK4;

- 当接收方收到重复的ACK4时,它就知道之前所发送的数据分组出现了差错;
- 于是可以不等超时计时器超时就立刻开始重传 (至于具体收到几个重复确认就立刻重传,根据具体实现决定)
- 如果收到这4个重复的确认并不会触发发送立刻重传,一段时间后,超时计时器超时,也会将发送窗口内以发送过的这些数据分组全部重传
思考:
为什么WT不能超过2^n-1,如果超过会是什么情况?
- 还是按之前的例子来,假如发送窗口为8,即一次发送了07数据分组,接收方收到后要发送确认ACK7,但是由于某些原因ACK7丢失了,那么发送方待计时器超时后就会重传07数据分组,而此时接收窗口以及来到了第二个0号,接收方依然会将其看作新的数据分组接收下来,这就导致了数据重复接收。
- 可见发送窗口超过2^n-1会导致接收方无法分辨新、旧数据分组。
小结:
- 回退N帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续ARQ协议;
- 在协议的工作过程中发送窗口和接收窗口不断向前滑动,因此这类协议又称为滑动窗口协议;
- 由于回退N帧协议的特性,当通信线路质量不好时,其信道利用率并不比停止-等待协议高
对于发送方:
- 发送方可在未收到接收方确认分组的情况下,将序号落在发送窗口内的多个数据分组全部发送出去;
- 发送方只有收到对已发送数据分组的确认时,发送窗口才能向前相应滑动;
- 发送方收到多个重复确认时,可在重传计时器超时前尽早开始重传,由具体实现决定;
- 发送方发送窗口内某个已发送的数据分组产生超时重发时,其后续在发送窗口内且已发送的数据分组也必须全部重传,这就是回退N帧协议名称的由来。
对于接收方:
- 接收方只接收序号落在接收窗口内且无误码的数据分组,并且将接收窗口向前滑动一个位置,与此同时给发送方发回相应的确认分组。
- 为了减少开销,接收方不一定每收到一个按序到达且无误码的数据分组就给发送方发回一个确认分组。
- 接收方收到未按序到达的数据分组,除丢弃外,还要对最近按序接收的数据分组进行确认;
选择重传协议SR
回退N帧协议的接收窗口尺寸WR只能等于1,因此接收方只能按序接收正确到达的数据分组。
一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大浪费。
为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸WR不应再等于1 (而应大于1) ,以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层。这就是选择重传协议。
注意:
选择重传协议为了使发送方仅重传出现差错的分组,接收方不能再采用累计确认,而需要对每个正确接收到的数据分组进行逐一确认!
小结:
若采用n比特给分组编号,即有序号0~2^n-1;
对于发送方:
- 发送窗口的尺寸WT的取值:1<WT≤2^n-1;
- 若WT=1,则与停止-等待协议相同
- 若WT>2^n-1,接收方无法分辨新、旧数据分组
- 发送方可在未收到接收方确认分组的情况下,将序号落在发送窗口内的多个数据分组全部发送出去;
- 发送方只有按序收到对已发送数据分组的确认时,发送窗口才能向前相应滑动;
- 若收到未按序到达的确认分组时,对其进行记录,以防止其相应数据分组的超时重发,但发送窗口不能向前滑动。
对于接收方:
- 接收窗口的尺寸WR的取值:1<WR≤WT
- WR=1,则与停止-等待协议相同
- 若WR>WT,则没有意义,接收窗口太大没用
- 接收方可接收未按序到达但没有误码并且序号落在接收窗口内的数据分组;
- 接收方只有在按序接收数据分组后,接收窗口才能向前相应滑动。
3.5 点对点协议PPP
- 点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议。
- PPP协议是因特网工程任务组IEIF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC1661,RFC1662]
- PPP是数据链路层使用的一种协议,它的特点是:简单;只检测差错,而不是纠正差错;不使用序号,也不进行流量控制;可同时支持多种网络层协议。
- PPPoE 是为宽带上网的主机使用的链路层协议
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成:
- 一套网络控制协议NCPs:其中的每一个协议支持不同的网络层协议
- 封装成帧:对各种协议数据报的封装方法
- 链路控制协议LCP:用于建立、配置以及测试数据链路的连接
帧格式

- 标志(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检验。若CRC检验正确,就收下这个帧;反之,就丢弃这个帧。
使用PPP的数据链路层向上不提供可靠传输服务。
3.6 媒体接入控制
媒体接入控制(介质访问控制)使用一对多的广播通信方式
Medium Access Control翻译成媒体接入控制,有些翻译成介质访问控制
局域网的数据链路层
- 局域网最主要的特点是:
- 网络为一个单位所拥有;
- 地理范围和站点数目均有限。
- 局域网具有如下主要优点:
- 具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
- 便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变。
- 提高了系统的可靠性、可用性和残存性。
数据链路层的两个子层
为了使数据链路层能更好地适应多种局域网标准,IEEE 802 委员会就将局域网的数据链路层拆成两个子层:
- 逻辑链路控制 LLC (Logical Link Control)子层;
- 媒体接入控制 MAC (Medium Access Control)子层。
与接入到传输媒体有关的内容都放在 MAC子层,而 LLC 子层则与传输媒体无关。
不管采用何种协议的局域网,对 LLC 子层来说都是透明的。
共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC(Medium Access Control)。
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术。
静态划分信道
信道复用:
- 复用(Multiplexing) 是通信技术中的一个重要概念。复用就是通过一条物理线路同时传输多路用户的信号。
- 当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时, 可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽。
频分复用FDM (Frequency Division Multiplexing)
- 将整个带宽分为多份,用户在分配到一定的频带后,在通信过程中自始至终都占用这个频带。
- 频分复用的所有用户同时占用不同的频带资源进行通信。
时分复用TDM (Time Division Multiplexing)
- 时分复用则是将时间划分为一段段等长的时分复用帧(TDM帧)。每一个时分复用的用户在每一个 TDM 帧中占用固定序号的时隙。
- 每一个用户所占用的时隙是周期性地出现(其周期就是TDM帧的长度)的。
- TDM 信号也称为等时 (isochronous) 信号。
- 时分复用的所有用户在不同的时间占用同样的频带宽度。
波分复用 WDM(Wavelength Division Multiplexing)
- 波分复用就是光的频分复用,使用一根光纤来同时传输多个光载波信号。
- 光信号传输一段距离后会衰减,所以要用 掺铒光纤放大器 来放大光信号。
码分复用 CDM (Code Division Multiplexing)
- 码分复用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设备的价格和体积都大幅度下降,因而现在已广泛用于民用的移动通信中。
随机接入(CSMA/CD协议)
以上所讨论的是静态划分信道,此外还有动态接入控制,其中包括 受控接入与随机接入,受控接入在局域网中使用较少,在此不作讨论。下面重点讨论随机接入。
总线局域网使用协议:CSMA/CD
工作原理
载波监听 多址接入/碰撞检测 CSMA/CD (Carrier Sense Multiple Access/Collision Detection)
-
多址接入MA:多个主机连接在一条总线上,竞争使用总线。
-
载波监听CS:发送帧前线检测总线,若总线空闲96比特时间,则立即发送;若总线忙,则持续检测总线直到总线空闲96比特时间后再重新发送;
-
碰撞检测CD:边发送边检测碰撞,若检测到碰撞,则立即停止发送(以免继续浪费网络资源),退避一段随机时间后再重新发送。
以太网还采取一种叫做强化碰撞的措施。这就是当发送帧的站点一旦检测到碰撞,除了立即停止发送帧外,还要再继续发送32比特或48比特的人为干扰信号(Jamming Signal) ,以便有足够多的碰撞信号使所有站点都能检测出碰撞。
一旦冲突,立即停说,等待时机,重新再说。
争用期

- 发送帧的主机最多经过以太网的端到端往返传播时延2τ(即δ→0 )的时长,就可检测到本次传输是否发生了碰撞。2τ称为争用期或碰撞窗口;
- 只有经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞;
- 显然,在以太网中发送帧的主机越多,端到端往返传播时延越大,发生碰撞概率就越大。因此,共享式以太网不能连接太多的主机,使用的总线也不能太长。
- 10Mb/s以太网把争用期2τ 定为512比特发送时间,即51.2μs, 因此其总线长度不能超过5120m,但考虑到其他一些因素,如信号衰减等,以太网规定总线长度不能超过2500m。
最小帧长
- 最小帧长=争用期 * 数据发送速率
- 以太网规定最小帧长为64字节,即512比特(512比特时间即为争用期);
- 即保证发送时间不小于往返传输延时
- 以太网的最小帧长确保了主机可在帧发送完成之前就检测到该帧的发送过程中是否遭遇了碰撞;
- 如果在争用期(共发送64字节)没有检测到碰撞,那么后续发送的数据就一定不会发生碰撞;
- 如果在争用期内检测到碰撞,就立即中止发送,这时已经发送出去的数据一定小于64字节,因此凡长度小于64字节的帧都是由于碰撞而异常中止的无效帧。
最大帧长
为了防止主机长时间占用总线,以太网的帧也不能太长;以太网V2的MAC帧最大长度为1518字节(1500字节数据载荷,18字节首尾字段);插入VLAN标记的802.1Q帧最大长度为1522字节(1500字节数据载荷,22字节首尾字段) ;

截断二进制指数退避算法

- 若连续多次发生碰撞,就表明可能有较多的主机参与竞争信道。
但使用上述退避算法可使重传需要推迟的平均时间随重传次数而增大(这也称为动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。 - 当重传达16次仍不能成功时,表明同时打算发送帧的主机太多,以至于连续发生碰撞,则丢弃该帧并向高层报告。
信道利用率
一个帧成功发送可能会经历多次碰撞和退避,下面考虑极限信道利用率,也就是理想情况下的信道利用率:
- 帧本身的发送时间是T0,端到端的传输时间为t,则发送一帧占用总线的时间为T0+t
- 极限信道利用率Smax=T0/( T0+t )
- 因此要提高信道利用率,需要增大T0,也就是以太网帧长度应尽量长些;减小t,也就是以太网端到端的举例因受限制。
协议特点
- 使用 CSMA/CD 协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)
- 每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。
- 这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率。
CSMA/CD协议曾经用于各种总线结构以太网和双绞线以太网的早期版本中。
现在的以太网基于交换机和全双工连接,不会有碰撞,因此没有必要使用CSMA/CD协议
随机接入(CSMA/CA协议)
无线局域网使用的协议:CSMA/CA
载波监听 多址接入/碰撞避免 CSMA/CA (Carrier Sense Multiple Access/Collision Avoidance)
- 802.11无线局域网在MAC层使用CSMA/CA协议,以尽量减小碰撞发送的概率。
- 802.11无线局域网使用CSMA/CA协议,在CSMA的基础上增加了一个碰撞避免CA功能,而不再实现碰撞检测功能。
- 不能使用CSMA/CD协议的原因是在无线局域网中无法实现碰撞检测。在使用CSMA/CA协议的同时,还使用停止-等待协议来实现可靠传输。
- 在无线局域网中,不能使用碰撞检测CD,原因如下:
- 由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度(可能相差百万倍)。如果要在无线网卡上实现碰撞检测CD,对硬件的要求非常高。
- 即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性(存在隐蔽站问题),进行碰撞检测的意义也不大。
- 在无线局域网中,不能使用碰撞检测CD,原因如下:
- 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方式中用来发送数据帧和管理帧。
工作原理
源站在检测到信道空闲后还要再等待一段时间DIFS后,再决定发送数据。
- 这是因为考虑到可能有其他的站有高优先级的帧要发送。若有,就要让高优先级帧先发送。
目的站正确接收数据帧后还要等待一段时间SIFS才能发送ACK帧。
- 这是因为SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧,在这段时间内,一个站点应当能够从发送方式切换到接收方式。
信道由忙转为空闲且经过DIFS时间后,还要退避一段随机时间才能使用信道
- 这是为了防止多个站点同时发送数据而产生碰撞
使用退避算法的时机:
- 在发送数据帧之前检测到信道处于忙状态时;
- 在每一次重传一个数据帧时;
- 在每一次成功发送后要连续发送下一个帧时(这是为了避免一个站点长时间占用信道)。
扩展:退避算法
在执行退避算法时,站点为退避计时器设置一个随机的退避时间:
- 当退避计时器的时间减小到零时,就开始发送数据;
- 当退避计时器的时间还未减小到零时而信道又转变为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过时间DIFS后,继续启动退避计时器。
在进行第i次退避时,退避时间在时隙编号{0, 1, ... , 2^(2+i)-1}中随机选择一个, 然后乘以基本退避时间(也就是一个时隙的长度)就可以得到随机的退避时间。这样做是为了使不同站点选择相同退避时间的概率减少。当时隙编号达到255时(对应于第6次退避)就不再增加了。
- 为了尽可能地避免各种可能的碰撞,CSMA/CA协议采用了一种不同于CSMA/CD协议的退避算法。当要发送帧的站点检测到信道从忙态转为空闲时,都要执行退避算法。
- 802.11标准规定,所有的站在完成发送后,必须再等待一段帧间间隔时间才能发送下一帧。帧间间隔的长短取决于该站要发送的帧的优先级。
- 在802.11无线局域网的MAC帧首部中有一个持续期字段,用来填入在本帧结束后还要占用信道多久时间,其他站点通过该字段可实现虚拟载波监听。
- 802.11标准允许要发送数据的站点对信道进行预约,即在发送数据帧之前先发送请求发送RTS帧。在收到响应允许发送CTS帧后,就可发送数据帧。
3.7 MAC地址、IP地址以及ARP协议
数据链路层:
- MAC地址是以太网的MAC子层所使用的地址;
网际层:
- IP地址是TCP/IP体系结构网际层所使用的地址;
- ARP协议属于TCP/IP体系结构的网际层,其作用是已知设备所分配到的IP地址,使用ARP协议可以通过该IP地址获取到设备的MAC地址;
尽管IP地址和ARP协议属于TCP/IP体系结构的网际层(而不属于数据链路层),但是它们与MAC地址存在一定的关系,并且我们日常的网络应用都离不开MAC地址、IP地址以及ARP协议。因此,我们将这三者放在一起讨论。
MAC地址
- 当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识, 即一个数据链路层地址;
- 在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(Media Access Control),因此这类地址被称为MAC地址;
- MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址;
- 一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡)。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址。
- 综上所述,严格来说,MAC地址是对网络上各接口的唯一标识, 而不是对网络上各设备的唯一标识。
IEEE 802局域网的MAC地址格式

对于使用EUI-48空间的应用程序,IEEE的目标寿命为100年(直到2080年),但是鼓励采用EUI-64作为替代
注:在MAC地址发送顺序中,字节发送顺序为从第一字节到第六字节,而字节内的比特发送数据则是从b0到b7.
IP地址
- IP地址是因特网(Internet) 上的主机和路由器所使用的地址,用于标识两部分信息:
- 网络编号:标识因特网上数以百万计的网络
- 主机编号:标识同一网络上不同主机(或路由器)
- 很显然,之前介绍的MAC地址不具备区分不同网络的功能。
- 如果只是一个单独的网络,不接入因特网,可以只使用MAC地址(这不是一般用户的应用方式)。
- 如果主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用。
- 数据包转发过程中IP地址与MAC地址的变化情况:
- 源IP地址和目的IP地址保持不变;
- 源MAC地址和目的MAC地址逐个链路(或逐个网络)改变。
ARP协议
ARP协议:地址解析协议
- 源主机在自己的ARP高速缓存表中查找目的主机的IP地址所对应的MAC地址,若找到了,则可以封装MAC帧进行发送;若找不到,则发送ARP请求(封装在广播MAC帧中) ;
- 目的主机收到ARP请求后,将源主机的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后给源主机发送ARP响应(封装在单播MAC帧中)。ARP响应中包含有目的主机的IP地址和MAC地址;
- 源主机收到ARP响应后,将目的主机的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后就可以封装之前想发送的MAC帧并发送给目的主机;
- ARP协议只能在一段链路或一个网络上使用,而不能跨网络使用;
- 除ARP请求和响应外,ARP还有其他类型的报文(例如用于检查IP地址冲突的“无故ARP、免费ARP(Gratuitous ARP)”);
- ARP没有安全验证机制,存在ARP欺骗(攻击)问题。
高速缓存表中的表项有动态和静态两种,动态的生命周期默认为两分钟,因此IP地址与MAC地址的对应关系记录是会定期自动删除的。
3.8 集线器与交换机
- 广播域(broadcast domain):指这样一部分网络,其中任何一台设备发出的广播通信都能被该部分网络中的所有其他设备所接收。
- 碰撞域(collision domain):又称为冲突域,是指网络中一个站点发出的帧会与其他站点发出的帧产生碰撞或冲突的那部分网络。
- 碰撞域越大,发生碰撞的概率越高。
集线器-在物理层扩展以太网
- 早期以太网的互连设备
- 工作在OSI体系结构的物理层
- 对接收到的信号进行放大、转发
- 集线器是也可以看做多口中继器,每个端口都可以成为一个中继器,中继器是对减弱的信号进行放大和发送的设备。
- 使用集线器作为互连设备的以太网仍然属于共享总线式以太网。集线器互连起来的所有主机共享总线带宽,属于同一个碰撞域和广播域。
- 扩大了广播域,同时也扩大的冲突域
交换机-在数据链路层扩展以太网
- 扩展以太网更常用的方法是在数据链路层进行。
- 早期使用网桥,现在使用以太网交换机。
网桥
- 工作在数据链路层。
- 它根据 MAC 帧的目的地址对收到的帧进行转发和过滤。
- 当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的MAC 地址,然后再确定将该帧转发到哪一个接口,或把它丢弃。
交换机
- 1990 年问世的交换式集线器 (switching hub) 可明显地提高以太网的性能。
- 交换式集线器常称为以太网交换机 (switch) 或第二层交换机 (L2 switch),强调这种交换机工作在数据链路层。
- 以太网交换机实质上就是一个多接口的网桥
- 交换机是目前以太网中使用最广泛的互连设备
- 工作在OSI体系结构的数据链路层(也包括物理层)
- 根据MAC地址对帧进行转发
- 使用交换机作为互连设备的以太网,称为交换式以太网。交换机可以根据MAC地址过滤帧,即隔离碰撞域。
- 交换机的每个接口是一个独立的碰撞域
- 交换机扩大了广播域,但隔离了冲突域(VLAN除外)
分析区别:
多台主机同时给另一台主机发送单播帧
- 集线器以太网:会产生碰撞,遭遇碰撞的帧会传播到总线上的各主机
- 交换机以太网:会将它们缓存起来,然后逐个转发给目的主机,不会产生碰撞
工作在数据链路层的以太网交换机,其性能远远超过工作在物理层的集线器,而且价格并不贵,这就使得集线器逐渐被市场淘汰
3.9 以太网交换机自学习和转发帧
- 以太网交换机工作在数据链路层(也包括物理层)
- 以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
- 以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表。
- 以太网交换机自学习和转发帧的流程:
- 收到帧后进行登记。 登记的内容为帧的源MAC地址及进入交换机的接口号;
- 根据帧的目的MAC地址和交换机的帧交换表对帧进行转发, 有以下三种情况:
- 明确转发: 交换机知道应当从哪个(或哪些)接口转发该帧(单播,多播,广播)
- 盲目转发:交换机不知道应当从哪个端口转发帧,只能将其通过除进入交换机的接口外的其他所有接口转发(也称为泛洪)。
- 明确丢弃: 交换机知道不应该转发该帧,将其丢弃。
- 帧交换表中的每条记录都有自己的有效时间,到期删除。原因如下:
- 交换机的接口改接了另一台主机;
- 主机更换了网卡。
3.10 生成树协议STP
IEEE 802.1D 标准制定了一个生成树协议 STP (Spanning Tree Protocol)
为提高以太网的可靠性,可添加冗余链路来提高以太网的可靠性。
但是,冗余链路也会带来负面效应形成网络环路,网络环路会带来以下问题:
-
广播风暴
大量消耗网络资源,使得网络无法正常转发其他数据帧;
-
主机收到重复的广播帧
大量消耗主机资源
-
交换机的帧交换表震荡(漂移)
以太网交换机使用生成树协议STP(Spanning Tree Protocol),可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题。
- 不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑没有环路的网络,其逻辑拓扑结构是无环路的树状结构;
- 最终生成的树型逻辑拓扑要确保连通整个网络;
- 当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树的重新计算。
为了分割广播域,虚拟局域网VLAN技术应运而生,在此不展开。
