计算机网络第三章:数据链路层
第三章:数据链路层
一些概念

因为物理层不理解也无须理解帧的结构,我们可以看作是信息在链路层的水平传输。注意,这里的链路层协议不同是因为已经不再是直接相连的两个节点,不要认为对等实体的性质是错误的。
- 链路:指从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点。图中有三段链路,而H1-R2叫通信路径
- 数据链路:基于链路,当在一条链路上传送数据时,除需要链路本身,还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
- 网卡和对应的软件驱动已经实现了这些协议,网卡包含了物理层和数据链路层这两层的功能。
- 帧:是数据链路层对等实体之间在水平方向进行逻辑通信的协议数据单元PDU。
封装成帧

如图,帧是数据链路层将下放的数据单元加上链路层首部和尾部形成的。
所以我们就得到了定义。
封装成帧是指数据链路层给上层交付下来的协议数据单元PDU添加一个首部和一个尾部,使之成为帧。
帧的首部和尾部包含重要的控制信息,比如帧定界标识,标识某一段是帧(但并不是每一种协议都有帧定界标志,如以太网V2的MAC帧)
以太网V2的MAC帧会在物理层加上前导码,前导码会同步接收方的CLK,这使得帧能够被时间自动分组。
为了提高数据链路层传输帧的效率,应当使帧的数据载荷的长度尽可能地大于首部和尾部的长度。
但是考虑到对缓存空间的需求以及差错控制等诸多因素,每一种数据链路层协议都规定了帧的数据载荷的长度上限,即最大传送单元(Maximum Transfer Unit,MTU)。例如,以太网的MTU为1500个字节。
透明传输

如果数据载荷中出现了和帧定界相同的字段,可能导致帧被错误识别,对此我们需要透明传输。
透明传输是指数据链路层对上层交付下来的协议数据单元PDU没有任何限制,就好像数据链路层不存在一样。
实现透明传输有很多方法:
- 字节填充:对于面向字节的物理链路,发送前扫描帧的数据载荷,如果有和帧定界相同的字段就在前加上转义符,接收方读取到转义符就能够正确识别帧
- 比特填充:对于面向比特的物理链路就是用比特填充,大同小异

差错传输

由于物理等因素,数据在传输的过程中往往不可避免地会出现错误,数据域中可能出现失真,二进制位取反等问题,这被称为比特差错
在一段时间内,传输错误的比特数量占所传输比特总数的比率称为误码率(Bit Error Rate,BER)。
提高链路的信噪比可以降低误码率。
但在实际的通信链路上,不可能使误码率下降为零。因此使用差错检测技术是必要手段。
发送方根据数据载荷算出检错码放在帧尾部,接收方再提取帧尾部,用与发送方相同的计算方式验证传输是否有误。检错码被称为帧检验序列FCS
奇偶检验
奇校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为奇数。
偶校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为偶数。

如果产生了两位误码,导致比特1奇性不改变,就无法检测出错误。这就被称为漏检。
循环冗余校验
数据链路层广泛使用漏检率极低的**循环冗余校验(Cyclic Redundancy Check,CRC)**检错技术。
基本思想
- 收发双方约定好一个生成多项式G(X)。
- 发送方基于待发送的数据和生成多项式G(X),计算出差错检测码(冗余码),将冗余码添加到待发送数据的后面一起传输。
- 接收方收到数据和冗余码后,通过生成多项式G(X)来计算收到的数据和冗余码是否产生了误码。


缺一条冗余码计算
可靠传输与不可靠运输
- 可靠传输服务
如果是可靠,接收方检验出错误包的时候会发送信息让发送方重传,确保每个包都能无误送到。
- 不可靠传输服务
如果是不可靠,接收方在检验出有分组的包会直接丢弃而不会采取任何补救措施。
在一般情况下,有线链路的误码率比较低。为了减小开销,并不要求数据链路层向其上层提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向其上层提供可靠传输服务。
值得一提的是,误码只是传输差错中的一种,差错类型还有分组丢失,分组失序,分组重复,这三种情况发生在数据链路层的上层
可靠传输服务并不局限于数据链路层,其他各层均可选择实现可靠传输。可靠传输的实现比较复杂,开销比较大,是否使用可靠传输取决于应用需求。
下面将介绍三种可靠传输的协议,这三种协议并不局限于数据链路层,也可以用在数据链路层的上层。
停止-等待协议

发送方在发送一个分组之后,不会将该分组从发送缓存中立即删除,而是会等待接收方传回ACK确认分组才会删除。接收方在确认传输无误的情况下会返回确认分组。
接收方在发现收到的分组出错之后,向发送方发送否认分组NAK,发送方察觉到否认分组之后重发该分组,直到接收方确认传输无误传回ACK。
但是这种机制,如果出现了分组丢失情况,接收方不会发回确认分组。所以,发送方会内置一个计时器RTO,如果在应当传回ACK的时间内没有接到回复,就会重发分组,直到接收方回复ACK确认分组
否认机制是为了可以使发送方在超时计时器超时前就尽快重传,保证传输效率

但是如果ACK确认分组在返回的过程中丢失,发送方会重发一次分组,这就造成了分组重复。需要再加一个分组编号机制。
只要保证每发送一个新的数据分组,其序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了,序号有0和1这两个。

同理,确认分组也是需要编号的,不然如果ACK迟到的情况:

这就导致的对第二个分组的传输情况忽视了,所以需要编号。
实际上数据链路层极少出现ACK迟到的情况,可以不给确认分组编号

至此,使用停止-等待协议就能够在不可靠信道上实现可靠传输了。
注意:停止-等待协议属于自动请求重传(Automatic Repeat reQuest,ARQ)协议。即重传的请求是发送方自动进行的,而不是接收方请求发送方重传某个误码的数据分组。
信道利用率

所以,当RTT远大于发送时间TD时(如卫星链路),会导致信道利用率很低。如果是超时重传,还要更低。
反之如果在无线局域网的情况下,那信道利用率还是挺高的。
所以这种协议不是很实用,往往使用其他的两个协议。
停止-等待协议的局限
停止-等待协议的等待接收方传回确认分组的时间属于死时间,使用流水线运输可以优化,即发送方连续发送数据分组。

但是在使用流水线传输方式时,发送方不能无限制地连续发送数据分组,否则可能会导致网络中的路由器或接收方来不及处理这些数据分组,进而导致数据分组的丢失,这实际上是对网络资源的浪费。因此,必须采取措施来限制发送方连续发送数据分组的数量。
回退N帧协议采用流水线传输方式,并且利用发送窗口来限制发送方连续发送数据分组的数量,这属于连续ARQ协议。
回退N帧协议
采用n个比特给分组编序号,序号范围是0~(2n-1)。本例假设采用3个比特给分组编序号则序号范围是0~7。
发送方需要维护一个发送窗口Wt,在未收到接收方确认分组的情况下,发送方可将序号落入Wt内的所有数据分组连续发送出去。
采用n个比特给分组编序号,则Wt的取值范围是1<Wt≤(2的n次方-1)。本例假设采用3个
比特给分组编序号,则W的取值范围是2~7,本例取Wt=5。
同样地,接收方需要维护一个接收窗口WR,只有正确到达接收方(无误码)且序号落入WR内的数据分组才被接收方接收。
WR的取值只能是1,这一点与停止等待协议是相同的。

接收方每正收到一个序号落入接收窗口的数据分组,就将接收窗口向前滑动一个位置,
这样就有一个新的序号落入接收窗口。与此同时,接收方还要给发送方发送针对该数据分组的确认分组。
发送方每收到一个按序确认的确认分组,就将发送窗口向前滑动一个位置,这样就有一个新的序号落入发送窗口,序号落入发送窗口内的数据分组可继续被发送。
在回退帧协议的工作过程中,发送方的发送窗口和接收方的接收窗口按上述规则不断向前滑动。因此,这类协议又称为滑动窗口协议。
看一个无传输差错的例子:

发送方将0-4划分为发送窗口,将0-4连续发送出去,分组经过链路到达接收端,接收方确认传输过程中没有误码失序等情况后就将确认分组ACK传回,每传回一个ACK,接收窗口就向前移动一个分组,发送方每接收一个确认分组,就向前移动一个位置,已发送且不在窗口内的分组就可以从发送分组中删除了。
在无传输差错的情况下,回退N帧协议的信道利用率比停止.等待协议的信道利用率有显著提高。提高的程度取决于发送窗口的大小。
如果出现超时重传:

如图,2号分组出现传输错误,接收方将损坏分组二号丢弃,为了保证接受顺序,无论三号和四号是否损坏都会被丢弃。此处,接收窗口只会移动两次到2的位置就停止。随即,在照例发送完0号和1号的ACK分组之后,接收方会发送针对最近已按序接收的数据分组的确认分组,在这里是发送一号分组。发送方接收到发送的0和1分组后将发送窗口后移两位。随即发送方两个1号的ACK的重复确认。随即在新的发送窗口中发送5号和6号分组。接收方接到后因为2号缺失导致接收窗口无法移动,又会发送两次1号分组。随即发送方知道有四个分组(3,4,5,6)未能正确传输,那么发送方可立即重发或者等到计时器超时再重发发送窗口内的所有分组(在这里是2,3,4,5,6),即使3,4,5,6此前未出现错误,但是2的缺位导致无法被正确接收。
这就是回退N帧的由来,一旦出错就要回退N个帧。所以,一个数据分组的差错就可能呙引起大量数据分组的重传在信道质量较差(容易出现误码)的情况下,回退N帧协议的信道利用率并不比停止-等待协议的信道利用率高。
值得一提的是,回退N帧协议的接收方采取积累确认的方式。
- 接收方不必对收到的每一个数据分组都发送一个确认分组,而是可以在收到几个序号连续的数据分组后,对按序到达的最后一个数据分组发送确认分组。
- 接收方何时发送累积确认分组,由具体实现决定。
- 确认分组ACKn表明序号为n及之前的所有数据分组都已正确接收。比如,ACK4表示0-4的数据分组都已被正确接收。
累积确认能够减少向网络中注入确认分组的数量,且即使确认分组丢失,也可能不必重传数据分组。但是不能向发送方及时准确地反映出接收方已正确接收的所有数据分组的数量。
我们来看一个例子,如果发送窗口的取指大于比特位的范围。

发送方连续发送0-7分组,接收方接收并将接收窗口向后移动8个单位,移动到0的位置,传回ACK确认分组。但是ACK在传输中丢失,发送方重传计时器超时重传0-7分组,接收方根据分组号认定为是0号数据可以接受。这就重复传输了8个数据分组造成传输错误。
所以,如果发送窗口大小超过了比特位的范围会导致接收方无法分辨出新旧分组而导致传输错误。
回退N帧协议对出错分组之后的重传依旧会浪费通信资源,是一个可以优化的点。
我们希望发送方能够仅仅重发出现发错的分组,节省信道资源。
选择-重传协议

为了使发送方仅重传出现差错的数据分组接收方不再采用累积确认,而需要对每一个正确接收的数据分组进行逐一确认。

如图,发送方连续发送0-3分组,但是0号数据分组在传输过程中出错,接收方接收到0-3分组,并检查0号分组出错将其丢弃,并将1-3分组缓存(不交付给上层),接收窗口无法向前滑动 。随即,接收方发回1-3号ACK,发送方收到后无法滑动发送窗口,开始确认1-3号分组已被接受,开始重传0号数据分组。接收方收到后传回ACK0,双方滑动窗口开始下一阶段。

如果是接收窗口小于发送窗口,就会出现接收方无法分辨新旧数据分组的错误。
发送方一次性连续发送0-4,被正确传输并接受,接收方滑动窗口并传回0-4号ACK但是0号丢失。随即发送方的0号重传计时器超时,重传0号,接收方发现收到的0号分组处于滑动窗口内,开始接受不属于这里的0号数据分组,这就乱套了。
点对点协议PPP
点对点协议(Point-to-Point Protocol,PPP)是目前使用最广泛的点对点数据链路层协议。
PPPoE协议是基于PPP开发的针对以太网的传输协议。
PPP协议包含了:
- 一套网络控制协议NCPs
- 一个网络层PDU封装到串行链路的方法
- 一个链路控制协议LCP
PPP帧结构

PPP协议的透明传输


差错检测

帧检验序列FCS字段:其值是使用循环冗余校验CRC计算出的检错码。CRC采用生成的多项式为
$$
CRC-CCITT=X^{16}+X^{12}+X^{5}+1
$$
接收方每收到一个PPP帧,就进行CRC检验。
若CRC检验正确,就收下这个帧;否则,就丢弃这个帧。
使用PPP的数据链路层,向上提供的是不可靠
数据传输服务
PPP的工作状态
以用户主机拨号接入因特网服务提供者ISP的拨号服务器的过程为例

共享式以太网
以太网(Ethernet)以曾经被假想的电磁波传播介质一以太(Ether)来命名。
以太网最初采用无源电缆(不包含电源线)作为共享总线来传输帧,属于基带总
线局域网,传输速率为2.94Mb/s。
以太网目前已经从传统的共享式以太网发展到交换式以太网,传输速率已经从10Mb/s提高到100Mb/s、1Gb/s甚至10Gb/s。
我们会首先介绍最早流行的传输速率
为10Mb/s的共享式以太网的相关知识。
网络适配器和MAC地址
要将计算机连接到以太网,需要使用相应的网络适配器(Adapter),网络适配器一般简称为“网卡”。

在计算机内部,网卡与CPU之间的通信,一般是通过计算机主板上的IO总线以并行传输方式进行。
网卡与外部以太网(局域网)之间的通信,一般是通过传输媒体(同轴电缆、双绞线电缆、光纤)以串行方式进行的。
网卡除要实现物理层和数据链路层功能,其另外一个重要功能就是要进行并行传输和串行传输的转换。
由于网络的传输速率和计算机内部总线上的传输速率并不相同,因此在网卡的核心芯片中都会包含用于缓存数据的存储器。
MAC地址
在以太网集群中,多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址。
所以,在每个主机发送的帧的首部中,都携带有发送主机(源主机)和接收主机(目的主机)的数据链路层地址。由于这类地址是用于媒体接入控制(Medium Access Control,MAC)的,因此被称为MAC地址。
MAC地址一般被固化在网卡的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址或物理地址
一般情况下,普通用户计算机中往往会包含两块网卡:
- 一块是用于接入有线局域网的以太网卡
- 一块是用于接入无线局域网的Wi-Fi网卡
每块网卡都有一个全球唯一的MAC地址。
某些服务器,交换机或者路由器内置多个网卡,有多个MAC地址。
所以,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
在IEEE 802局域网中,MAC地址格式如下:

我们能够根据OUI查询到该网卡所属的厂商。

单播:一对一通信,信息从一台设备准确发送到另一台指定的设备。
多播:一对多通信,信息从一台设备发送给一组有共同需求的设备。
如果将本地多播地址设置为除B0B1以外全1时,就是广播地址
在发送顺序中:

单播MAC地址使用

主机B填写目的地址和源地址后,发送到当前以太网中的每一个设备,主机A发现收到的帧的目的地址和自己并不匹配(这里不用相同这个词,是要考虑广播这种情况),所以丢弃该帧。主机B收到后发现匹配,就在检查传输正确与否后上交到网络层等处理。
若主机B的目的地址填写FF-FF-FF-FF-FF-FF就是广播,以太网中的所有设备都会接收并检查是否有传输错误。
总结
网卡从网络上每收到一个无误码的帧,就检查帧首部中的目的MAC地址,按以下情况处理:
- 如果目的MAC地址是广播地址(FF-FF-FF-FF-FF-FF),则接受该帧。
- 如果目的MAC地址与网卡上固化的全球单播MAC地址相同,则接受该帧。
- 如果目的MAC地址是网卡支持的多播地址,则接受该帧。
- 除上述(1)、(2)和(3)情况外,丢弃该帧。
网卡还可被设置为一种特殊的工作方式:**混杂方式(Promiscuous Mode)**。工作在混杂方式的网卡只要收到共享媒体上传来的帧就会收下,而不管帧的目的MAC地址是什么。
全球单播MAC地址就如同身份证上的身份证号码,具有唯一性,它往往与用户个人信
息绑定在一起。因此,用户应尽量确保自己拥有的全球单播MAC地址不被泄露。
为了避免用户设备连接Wi-F热点时MAC地址泄露的安全问题,目前大多数移动设备都已经采用了随机MAC地址技术。
CSMA/CD协议的基本原理
在共享总线以太网中,多个站点连接在同一总线上,在使用总线时会发生信道碰撞等问题。CSMA/CD协议用于解决信道的调度问题。

以太网还有一个强化碰撞的机制:发送帧的站点一旦检测到碰撞,除了立即停止发送帧外,还要再继续发送32比特或48比特的人为干扰信号(Jamming Signal),以便有足够多的碰撞信号使所有站点都能检测出碰撞。
该协议只能尽量避免碰撞,且不可能进行全双工通信,而只能进行半双工通信(双向交替通信)。
共享式以太网的争用期
3.4的两个章节后面再看
使用集线器的共享式以太网
无源电缆接触点多,依赖元件多,并不可靠,替代他的是更便宜更灵活的集线器。
集线器具有以下特点:
- 使用集线器的以太网虽然物理拓扑是星型的,但在逻辑上仍然是一个总线网。总线上的各站点共享总线资源,使用的还是CSMA/CD协议。
- 集线器只工作在物理层,它的每个接口仅简单地转发比特,并不进行碰撞检测。碰撞检测的任务由各站点中的网卡负责。
- 集线器一般都有少量的容错能力和网络管理功能,能够修复网络连接中的小问题。
在物理层扩大以太网
可以直接使用一个更大的集线器将两个以太网集群相连,但是那么做会形成更大碰撞域,导致碰撞的概率增加。

在数据链路层扩大以太网
可以使用网桥来扩大以太网
网桥可以识别帧的结构,且能根据目的地址或自身转发表转发帧。
网桥不会形成更大碰撞域,不会增加碰撞概率。

自学习和转发帧流程

记得这个吗?
网桥采用自学习算法建立转发表。
初始时,网桥的转发表是空的,直到接收到第一个广播的帧(A->B)时,将帧的来源和网桥接口作为键值对登记起来。因为是第一个键值对,没有关于B的接口信息,所以将帧盲目转发给所有接口。当D->A的帧抵达网桥时,网桥记录D位于接口2并将帧发送到接口1,抵达主机A。剩下的流程不解释。

所以:
- 网桥收到帧后进行登记(即自学习),登记的内容为帧的源MAC地址和进入网桥的接口号。
- 网桥根据帧的目的MAC地址和网桥的转发表对帧进行转发,包含以下三种情况:
- ·明确转发:网桥知道应当从哪个接口转发帧。
- ·盲目转发:网桥不知道应当从哪个接口转发帧,只能将其通过除进网桥的接口外的其他所有接口
转发。 - 丢弃:网桥知道不应该转发该帧,将其丢弃。
透明网桥的生成树协议STP
为了提高以太网的可靠性,有时需要在两个以太网之间使用多个透明网桥来提供冗余链路。
但是如果网络链路形成了闭合环路,那会导致帧在闭合环路中永久兜圈,浪费通信资源。
所以我们会生成一个连接所有节点的最小生成树,帧的传输就在该生成树中进行。
生成树:使得每个节点之间都有通路的路径。

交换式以太网
网桥接口很少,只用来连接不同的网段。
交换式集线器是具有多个接口的网桥,被称为以太网交换机或二层交换机。
仅使用交换机(而不使用集线器)的以太网就是交换式以太网。
交换式以太网使用的核心还是网桥,在交换式以太网中进行扩展,不会形成一个更大的冲突域。
以太网交换机
交换机的每个接口可以连接计算机,也可以连接集线器或另一个交换机。
当交换机的接口与计算机或交换机连接时,可以工作在全双工方式,并能在自身内部同时连通多对接口,使每一对相互通信的计算机都能像独占传输媒体那样,无碰撞地传输数据,这样就不需要使用CSMA/CD协议了。
一般的交换机都采用“存储转发”方式,为了减小交换机的转发时延,某些交换机采用了直通(Cut-Through)交换方式。
采用直通交换方式的交换机,在接收帧的同时就立即按帧的目的MAC地址决定该帧的转发接口,然后通过其内部基于硬件的交叉矩阵进行转发,而不必把整个帧先缓存后再进行处理。
(交叉矩阵的图在我看的那本书上有,等我有时间再拍下来。)
直通交换时延很小,但是不会检查差错,可能将一些无效帧转发给其他主机。
共享式和交换式对比
明确,共享式是在物理层扩展,交换式是在数据链路层扩展。
3.5.2,待补全
以太网的MAC帧格式
分为
- DIX Ethernet V2的帧格式
- IEEE 802.3的帧格式
两者差别很小,第一章较流行,我们介绍第一种。

目的地址和源地址字段用于指明发送方和接收方。
类型字段用来指明数据载荷中的内容是由上一层的哪个协议封装的,以便将收到的MAC帧的数据载荷上交给上一层的这个协议。
FCS是使用CRC生成的帧检验序列FCS,接收方的网卡通过FCS的内容就可检测出帧在传输过程中是否产生了误码。
数据载荷最小为46,最大为1500字节,过小会填充,过大会分组。
在以太网中,物理层会给帧加上前导码,以便接收方时钟同步。
接收方可能收到的无效MAC帧包括以下几种:
- MAC帧的长度不是整数个字节
- 通过MAC帧的FCS字段的值检测出帧有误码
- MAC帧的长度不在64~1518字节之间
虚拟局域网VLAN
将多个站点通过一个或多个以太网交换机连接起来就构建出了交换式以太网。
交换式以太网中的所有站点都属于同一个广播域。随着交换式以太网规摸的扩大,广播域也相应扩大。
但是,巨大的广播域会带来一系列问题:
- 广播风暴
- 某大型以太网中,主机A要给主机B发送帧,但是A不知道B的地址,A发送一个ARP广播请求,广播中的所有主机都会收到并查看该请求。这会浪费网络资源和CPU资源。
使用路由器能够分割广播域,因为路由器默认不会对分组进行转发。但是路由器成本高,大量使用路由器分割是不现实的,我们会使用虚拟局域网来进行逻辑分割。
虚拟局域网(Virtual Local Area Network,VLAN)是一种将局域网内的站点分成与物理位置无关的逻辑组的技术,一个逻辑组就是一个VLAN,VLAN中的各站点具有某些共同的应用需求。
属于同一VLAN的站点之间可以直接进行通信,而不同VLAN中的站点之间不能直接通信。
网络管理员可对局域网中的各交换机进行配置来建立多个逻辑上独立的VLAN。
连接在同一交换机上的多个站点可以属于不同的VLAN,而属于同一VLAN的多个站点可以连接在不同的交换机上。

两个VLAN之间不可直接通信,不会被广播风暴影响。
VLAN的实现机制
虚拟局域网VLAN有多种实现技术,最常见的就是基于以太网交换机的接口来实现VLAN。这就需要以太网交换机能够实现以下两个功能:
- 能够处理带有VLAN标记的帧,也就是IEEE802.1Q帧。
- 交换机的各接口可以支持不同的接口类型,不同接口类型的接口对帧的处理方式有所不同。
IEEE 802.1Q帧也称为Dot One QI帧,它对以太网V2的MAC帧格式进行了扩展:在源地址字段和类型字段之间插入了4字节的VLAN标签(tag)字段,由标签协议标识符TPID,优先级PRI,规范格式指示符CFI,虚拟局域网标识符VID组成。
- TPID:长度为16比特,其值固定为0x8100,表示该帧是EEE802.1Q帧,使用对应的协议处理。
- PRI:长度为3比特,取值范围是0~7,值越大优先级越高。当网络阻塞时,设备优先发送优先级高的802.1Q帧。
- CFI:长度为1比特,取值为0表示MAC地址以规范格式封装,取值为1表示MAC地址以非规范式封装。对于以太网,CF的取值为0。
- VID:全写VLAN ID,长度为12比特,取值范围是0~4095,其中0和4095保留不使用。VID是802.1Q帧所属的VLAN编号,设备依赖VID来识别帧所属的VLAN。广播一般只在同一VLAN转发,限制广播域
帧是由以太网交换机处理的。
当交换机收到普通的以太网MAC帧时,会给其插入4字节的VLAN标签使之成为802.1Q帧,该处理简称为“打标签”。
当交换机转发802.1Q帧时,可能会删除其4字节的VLAN标签使之成为普通的以太网MAC帧,该处理简称为“去标签”。
交换机转发802.1Q帧时也有可能不进行“去标签”处理,是否进行“去标签”处理取决于交换机的接口类型。
根据接受和发送对帧的处理方式不同和接口连接对象不同,能够将以太网交换机接口类型分为Access和Trunk两种。
PVID(Port VLAN ID)是端口默认VLAN ID,指交换机端口为接收到的未打标签的数据帧所添加的VLAN标签。在下文中称作“缺省VLAN ID”
| 特性 | PVID (Port VLAN ID) | VLAN ID |
|---|---|---|
| 作用对象 | 交换机端口的属性 | VLAN本身的标识 |
| 主要功能 | 定义端口对入向未标记帧的处理规则 | 在交换机内部逻辑上划分广播域 |
| 配置位置 | 在每个端口下进行配置 | 在全局或VLAN数据库中创建 |
| 典型场景 | 连接PC、服务器等不支持VLAN的终端设备时,端口的PVID通常等于该终端所属的VLAN ID。 | 规划网络时,为不同部门(如财务部VLAN 10、技术部VLAN 20)分配不同的ID。 |
- Access端口:用于连接不支持VLAN的终端设备(如PC、服务器、打印机),实现“一个端口,一个VLAN”。
- Trunk端口:用于交换机之间或交换机与支持VLAN的网络设备(如路由器、另一台交换机)之间的互联,实现“一个端口,多个VLAN”。
- 原生VLAN是Trunk端口上一个特殊的VLAN,其数据帧在Trunk链路上以未标记的形式传输。
- 标记VLAN是指在Trunk链路上,其数据帧必须携带802.1Q VLAN标签进行传输的VLAN。
| 特性 | Access端口 | Trunk端口 |
|---|---|---|
| 设计目的 | 接入终端设备 | 设备间互联,承载多个VLAN流量 |
| 可承载VLAN数量 | 仅1个 | 多个(一个原生VLAN + 多个标记VLAN) |
| 数据处理(入向) | 接收未标记帧,为其打上端口的PVID标签。 | 接收标记帧,根据标签放入对应VLAN;接收未标记帧,则打上原生VLAN(Native VLAN) 的标签。 |
| 数据处理(出向) | 发送前剥离VLAN标签,始终发出未标记帧。 | 对于标记VLAN,保留标签发出;对于原生VLAN,剥离标签后作为未标记帧发出。 |
| 典型连接对象 | 计算机、服务器、IP电话、打印机 | 另一台交换机、路由器、支持VLAN的服务器 |
| 与PVID的关系 | 端口的PVID就是它所属的VLAN ID,配置Access端口时,本质上就是在设置它的PVID。 | 端口有PVID(即其原生VLAN的ID),用于处理未标记帧。Trunk口允许的VLAN列表中通常包含其原生VLAN。 |
当以太网交换机启动后,若之前未对其各接口进行过VLAN的相关设置,则各接口的接口类型默为Access,并且各接口的缺省VLAN ID:为1,即各接口默认属于VLAN1。
对于华为交换机,接口的缺省VLAN ID(VID)称为端口VLAN ID(Port VLAN ID),简记为PVID。对别的交换机则不是这样。
交换机的每个接口有且仅有一个PVID。
看一个例子:

本例中,主机A发送一个未标识的帧,交换机的一号接口的类型为Access,就将帧打上默认标签VID=1,因为其他四个接口的VID都等于1,所以交换机会将该帧转发到2,3,4号接口。

本例中,我们可以手动配置以太网交换机,使得1号和2号接口为VLAN2,3号和4号接口为VLAN3。主机C发送一个未标识的帧,交换机将3号端口的PVID作为标签附加到帧中,随后转发到所有PVID为3的端口。
如图,主机A发送一个未标识的帧,因为端口1的类型是Access,交换机对帧进行贴标签处理,随后发送到交换机1所有PVID为1的接口。发送到5号Trunk接口后,会去除帧的标签发送给交换机2。交换机2将接收到的未标识帧贴上标签,转发给交换机2所有PVID=2的端口,从这些Access端口去标签发送给主机。

如图,主机D发送一个未标识帧,因为端口3的类型是Access,交换机对帧进行贴标签处理,随后发送到交换机1所有PVID=2的接口也就是4接口。因为5号接口为Trunk类型且帧的VID与5号接口的PVID不相同,所以带标签的帧会被直接转发到交换机2。在交换机2中,帧被转发到所有PVID=3的接口中。
总结一下两种接口类型:

Hybrid接口是华为交换机私有的接口类型。Hybrid接口既可以用于交换机之间的互连(与Truk接口相同),也可用于交换机与用户计算机之间的互连
(与Access接口相同)。
除此之外,Hybrid接口的绝大部分功能与Trunk:接口相同。不同点在于Hybrid接口会查看帧的VID值是否在接口的“去标签’列表中,若存在则“去标签”后转发,若不存在则直接转发。
以太网
以太网被物理电缆束缚,那么就必须拥有远超无线网络的传输速率。
3.8未看
无线局域网
802.11无线局域网可分为以下两类:
- 有固定基础设施的
- 指的是预先建立的,能够覆盖一定地理范围的,多个固定的通信基站。
- 无固定基础设施的
有固定基础设施的802.11无线局域网

采用星型拓扑结构,其中心基站是网络接入点AP,图中结构名为基本服务集BSS。BSS由一个接入点AP和若干个移动站组成,移动站的网络流量都需要经过接入点AP,覆盖地理范围一般小于100米。管理员需要为AP分配一个最大32字节的服务集标识符SSID(也就是WIFI名)和一个无线通信信道。
能够使用分配系统扩展服务集:

如果主机A发送某个数据给主机B,那么数据包依次经过AP1,DS,AP2到达主机B。
漫游:指的是移动站从一个无线接入点(AP)的信号范围,切换到另一个更强或更合适的接入点保持网络不断的过程。
在图中表示为主机A到主机A’的过程。
但是802.11标准并没有定义实现漫游的具体方法,但是定义了以下基本服务:
- 关联服务:移动站与接入点AP建立关联的方法有以下两种:
- 被动扫描:AP周期性发出包含重要参数的信标帧,移动端被动接受
- 主动扫描:移动站发出探测请求帧,AP发回探测响应帧。
- 重建关联服务和分离服务
- 如果一个移动站要把与某个接入点AP的关联转移到另一个AP,就可以使用重建关联服务;若要终止关联服务,就应使用分离服务。
无固定基础设施的802.11无线局域网
又名自组织网络,即ad hoc Network网络。
这种网络没有中心基站AP,具有去中心化的特点

比如,源站A到达目的站E需要移动站BCD作为转发站,显然,转发站需要具有路由功能。
这种网络需要经过网关才能连接上因特网。
但802.11无线局域网的ad hoc模式允许网络中的各站点在其通信范围内直接通信,也就是支持站点间的单跳通信,而标准中并没有包括多跳路由功能。因此,802.11无线局域网的ad hoc模式应用较少。
无线局域网的物理层
802.11无线局域网的物理层非常复杂,依据工作频段、调制方式、传输速率等,可将其分为多种物理层标准。

所以,无线网卡一般会做成多模的,以适应不同的技术标准

最近又出现新的物理层标准

无线局域网的数据链路层
无线局域网同样使用广播信道,但是和共享总线以太网使用有线传输介质不同,不能直接照搬以太网的CSMA/CA协议。
802.11无线局域网采用了另一种称为CSMA/CA的协议,称为载波监听多址接入/碰撞避免的协议。CSMA部分是相同的,但是碰撞检测CD改为了碰撞避免CA。
原因如下:
- 由于无线信道的传输环境复杂且信号强度的动态范围非常大,在802.11无线网卡上接收到的信号强度一般都远远小于发送信号的强度,信号强度甚至相差百万倍。因此,如果要在802.11无线网卡上实现碰撞检测,对硬件的要求非常高。
- 即使能够在硬件上实现碰撞检测功能,但由于无线电波传播的特殊性(存在隐蔽站问题),还会出现无法检测到碰撞的情况,因此实现碰撞检测并没有意义。
隐蔽站问题:

也就是主机A的信号范围内不可见主机B,主机B的信号范围不可见主机A,如果两边同时向AP发送数据就会发生信号碰撞。且碰撞信号强度较弱,即使传播到主机AB也难以检测到。所以不能使用碰撞检测CD,要使用碰撞避免CA协议。
CSMA/CA协议
很多时候我们获取的原理不是知识,原理只占百分之十。原理只需要三十几个小时的网课,但是知识需要数万小时的调试。
虚拟载波监听机制

DIFS是DCF帧间间隔,长度为128us,在DCF方式中,DIFS用来发送数据帧和管理帧,
DCF是分布式协调功能(Distributed Coordination Function,DCF)的英文缩写词。在DCF方式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权。DCF方式是802.11定义的默认方式(必须实现)。
确认信道空闲之后等待DIFS在发送是考虑到可能其他站有更高优先级的帧需要发送。
帧首部中的“持续时间”字段的值指出了源站要占用信道的时间(包括目的站发回确认帧所需的时间)。
短帧间间隔(Short Interframe Space,SIFS)的长度为28us,它是最短的帧间间隔,用来分隔开属于一次对话的各帧。一个站点应当能够在这段时间内从发送方式切换到接收方式。使用SIFS的帧类型有ACK帧、CTS帧等。
因为无线误码率高,所以CSMA/CA协议要配合停止-等待协议来确保可靠传输,与CSMA/CD协议的共享式以太网不同。
当某个站检测到正在信道中传送的帧首部中的“持续时间”字段时,就调整自己的网络分配向量(Network Allocation Vector,NAV)。NAV指出了完成这次帧的传送且信道转入空闲状态所需的时间。
随机等待时间的作用在于:当某个站在发送帧时,很可能有多个站都在监听信道并等待发送帧,一旦信道空闲,这些站几乎同时发送帧而产生碰撞。
为了避免上述情况,所有要发送帧的站检测到信道从忙转为空闲后,都要执行退避算法。这样不仅可以减少发生碰撞的概率,还可避免某个站长时间占用无线信道。
只有在在检测到信道空闲且该数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧时,不使用退避算法。具体就是以下三种情况。
- 在发送帧之前检测到信道处于忙态
- 在每一次重传一个帧时
- 在每一次成功发送帧后要连续发送下一个帧时
CSMA/CA协议的退避算法
在执行退避算法时,站点为退避计时器设置一个随机的退避时间:
- 当退避计时器的时间减小到零时,就开始发送数据
- 当退避计时器的时间还未减小到零时而信道又转变为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过帧间间隔DIFS后,继续启动退避计时器。
- 在进行第i次退避时,退避时间在时隙编号中随机选择一个,然后乘以基本退避
时间(也就是一个时隙的长度)就可以得到随机的退避时间。当时隙编号达到255时(对应于第6次退避)就不再增加了。

同时为了进一步降低发生碰撞的概率,802.11无线局域网允许源站对信道进行预约。
RTS(Request To Send)帧是短的控制帧,
它包括源地址、目的地址和本次通信(包括目的站发回确认帧所需的时间)所需的持续时间。
CTS (Clear To Send)帧是短的响应控制帧,
它也包括本次通信所需的持续时间(从RTS帧中将此持续时间复制到CTS帧中)。
使用RTS帧和CTS帧进行信道预约会带来额外开销,但是代价很小能带来稳定的低碰撞率,这是值得的。实际上用户可以选择三种模式:
- 使用RTS帧和CTS帧。
- 只有当数据帧的长度超过某个数值时才使用RTS帧和CTS帧。
- 不使用RTS帧和CTS帧。
信道预约也属于虚拟载波监听机制。
无线局域网的MAC帧
MAC帧分为三种:

在这里我们只介绍数据帧,其格式为:

其中帧控制字段很复杂。