计算机网络数据链路层传送门:
「计网三」数据链路层(上篇)
「计网三」数据链路层(中篇)(本文)
「计网三」数据链路层(下篇)
六、媒体控制接入
6.1 基本概念
如图所示,多台主机连接到一根同轴电缆上,形成一个总线型局域网。当多个主机同时发送数据时,信号在共享媒体上就会产生碰撞,使这些数据发送失败。
共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC(Medium Access Control).
MAC技术主要分为两类:静态划分信道和动态接入控制。
上图的集中控制指多点轮询协议;
分散控制指令牌传递协议,采用令牌传递协议的典型网络有IEEE802.5令牌环网、IEEE802.4令牌总线网、光纤分布式数据接口FDDI,这些网络由于市场竞争已经逐步退出历史舞台。
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已完全取代了共享式局域网。但由于无限性到的广播天性,无线局域网仍然使用的是共享媒体技术。
6.2 静态划分信道
复用(Multiplexing)是通信技术中的一个重要概念。复用就是通过一条物理线路同时传输多路用户的信号。当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可以利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽。
常见的信道复用技术有:频分复用FDM、时分复用TDM、波分复用WDM、码分复用CDM.
频分复用FDM
将传输线路的频带资源划分成多个子频带,形成多个子信道,各子信道之间需要留出隔离频带,以免造成子信道间的干扰。当多路信号输入一个多路复用器时,这个复用器将每一路信号调制到不同频率的载波上。接收端由相应的分用器通过滤波将各路信号分开,将合成的复用信号恢复成原始的多路信号。显然,频分复用的所有用户同时占用不同的频带资源并行通信。
时分复用TDM
将时间划分成一个个的时隙。时分复用技术将传输线路的带宽资源按时隙轮流分配给不同的用户,每个用户只在所分配的时隙里使用线路传输数据。时分复用技术将时间划分成了一段段等长的时分复用帧。每一个时分复用的用户在每一个时分复用帧中占用固定序号的时隙,每一个用户所占用的时隙是周期性出现的,其周期就是时分复用帧的长度。显然,时分复用的所有用户在不同的时间占用同样的频带宽度。
波分复用WDM
波分复用其实就是光的频分复用。下图为8路传输速率均为2.5Gbit/s的光载波,其波长均为1310nm。经光调制后,分别将波长变换到1550~1561.2nm,每个光载波相隔1.6nm。这8个很接近的光载波经过光复用器(或称合波器),就在一根光纤中传输。因此,在一根光纤上数据传输的总速率就达到了8*2.5Gbit/s = 20Gbit/s.
光信号传输一段距离后会衰减,因此对衰减了的光信号必须进行放大才能继续传输,现在已经有了很好的掺铒光纤放大器。两个光纤放大器之间的光缆线路长度可达120km.而光复用器和光分用器(或称分波器)之间可以放入4个掺铒光纤放大器,使得光复用器和光分用器之间的无光电转换的距离可达600km.
码分复用CDM
码分复用CDM是另一种共享信道的方法。实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址CDMA(Code Division Multiple Access)。同理,频分复用FDM和时分复用TDM同样可用于多址接入,相应的名词是频分多址FDMA(Frequency Division Multiple Access)和时分多址TDMA(Time Division Multiple Access)。
本文中不严格区分复用与多址的概念。可简单理解如下:
(1)复用是将单一媒体的频带资源划分为很多子信道,这些子信道之间相互独立,互不干扰。从媒体的整体频带资源上看,每个子信道只占用该媒体频带资源的一部分。
(2)多址(更确切的应该称为多点接入)处理的是动态分配信道给用户。这在用户仅仅暂时性的占用信道的应用中是必须的,而所有的移动通信系统基本上都属于这种情况。相反,在信道永久性的分配给用户的应用中,多址是不需要的(对于无线广播或电视广播站就是这样)。
(3)某种程度上,FDMA、TDMA、CDMA可以分别看成是FDM、TDM、CDM的应用。
与FDM和TDM不同,CDM的每一个用户可以在同样的时间使用同样的频带进行通信。
由于各种用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰。
CDM最初是用于军事通信的,因为这种系统所发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易被敌人发现。随着技术的进步,CDMA设备的价格和体积都在大幅度下降,因而现在已广泛应用于民用的移动通信中。
在CDMA中,每一个比特时间再划分为m个短的间隔,称为码片(chip)。通常m的值是64或128.为了简单起见,在后续的举例中,我们假设m为8.
使用CDMA的每一个站被指派一个唯一的m bit码片序列(Chip Sequence)。
(1)一个站如果要发送比特1,则发送他自己的m bit码片序列;
(2)一个站如果要发送比特0,则发送他自己的m bit码片序列的二进制反码;
举例:指派给CDMA系统中某个站点的码片序列为00011011
该站点发送比特1:发送自己的码片序列即可:00011011
该站点发送比特0:发送自己的码片序列的二进制反码:11100100
为了方便,我们按照惯例将码片序列中的0写为-1,将1写为+1,则该站点的码片序列是(-1,-1,-1,+1,+1,-1,+1,+1).
这种通信方式称为直接序列扩频DSSS.
码片序列的挑选原则如下:
(1)分配给每个站的码片序列必须各不相同,实际常采用伪随机码序列;
(2)分配给每个站的码片序列必须相互正交(规格化内积为0)。
令向量S表示站S的码片序列,令向量T表示其他任何站的码片序列。两个不同站S和T的码片序列正交,就是向量S和T的规格化内积为0:
S ⋅ T = 1 m ∑ i = 1 m S i T i = 0 S·T = \frac{1}{m} \sum_{i=1}^m S_iT_i = 0 S⋅T=m1∑i=1mSiTi=0
S ⋅ T ‾ = 0 S·\overline{T} = 0 S⋅T=0
S ⋅ S = 1 m ∑ i = 1 m S i S i = 1 m ∑ i = 1 m S i 2 = 1 m ∑ i = 1 m ( ± 1 ) 2 = 1 S·S = \frac{1}{m} \sum_{i=1}^m S_iS_i = \frac{1}{m} \sum_{i=1}^m S_i^2 = \frac{1}{m} \sum_{i=1}^m (\pm1)^2 = 1 S⋅S=m1∑i=1mSiSi=m1∑i=1mSi2=m1∑i=1m(±1)2=1
S ⋅ S ‾ = − 1 S·\overline{S} = -1 S⋅S=−1
练习:假设给站S分配的码片序列为01011101,给站T分配的码片序列为10111000,这样的分配正确吗?
(1)检查码片序列是否各不相同:满足;
(2)检查码片序列是否相互正交:不满足,原因这两个码片序列的规格化内积不为0:
根据题意,S站的码片序列可表示为(-1,+1,-1,+1,+1,+1,-1,+1),T站的码片序列可表示为(+1,-1,+1,+1,+1,-1,-1,-1),这两个序列的规格化内积为:
S ⋅ T = ( − 1 ) × ( + 1 ) + ( + 1 ) × ( − 1 ) + ( − 1 ) × ( + 1 ) + ( + 1 ) × ( + 1 ) + ( + 1 ) × ( + 1 ) + ( + 1 ) × ( − 1 ) + ( − 1 ) × ( − 1 ) + ( + 1 ) × ( − 1 ) 8 = − 2 8 ≠ 0 S·T = \frac{(-1)\times(+1)+(+1)\times(-1)+(-1)\times(+1)+(+1)\times(+1)+(+1)\times(+1)+(+1)\times(-1)+(-1)\times(-1)+(+1)\times(-1)}{8} = -\frac{2}{8} \neq 0 S⋅T=8(−1)×(+1)+(+1)×(−1)+(−1)×(+1)+(+1)×(+1)+(+1)×(+1)+(+1)×(−1)+(−1)×(−1)+(+1)×(−1)=−82=0
码分多址应用举例:A、B、C为三个发送站,D为接收站。分别用向量A、B、C来表示A、B、C站的码片序列。A站发送比特1,用向量
A
A
A表示。B站发送比特0,用
B
‾
\overline{B}
B表示,C站未发送数据。D站接收到了A站和B站所发送信号的叠加信号
(
A
+
B
‾
)
(A+\overline{B})
(A+B)。假设所有站所发送的码片序列都是同步的,接收站D知道其它各站点所特有的码片序列。
接收站D对其所接收到叠加信号进行判断:
(
A
+
B
‾
)
⋅
A
=
A
⋅
A
+
B
‾
⋅
A
=
1
(A+\overline{B})·A=A·A+\overline{B}·A=1
(A+B)⋅A=A⋅A+B⋅A=1
(
A
+
B
‾
)
⋅
B
=
A
⋅
B
+
B
‾
⋅
B
=
−
1
(A+\overline{B})·B=A·B+\overline{B}·B=-1
(A+B)⋅B=A⋅B+B⋅B=−1
(
A
+
B
‾
)
⋅
C
=
A
⋅
C
+
B
‾
⋅
C
=
0
(A+\overline{B})·C=A·C+\overline{B}·C=0
(A+B)⋅C=A⋅C+B⋅C=0
由上述结果可以看出:
计算结果为1,可以判断出发送站发送了比特1;
计算结果为-1,可以判断出发送站发送了比特0;
计算结果为0,可以判断出发送站未发送数据。
6.3 随机接入
6.3.1 总线局域网使用的协议:CSMA/CD
6.3.1.1 简介CSMA/CD
随机接入属于媒体接入控制的动态接入控制。
协调总线上个主机的工作,尽量避免产生碰撞,是一个必须要解决的重要问题。早期的共享式以太网采用载波监听多址接入/碰撞检测,即CSMA/CD(Carrier Sense Multiple Access/Collision Detection)协议来解决该问题。
多址接入MA: 多个主机(或称站点、站)连接在一条总线上,竞争使用总线。
载波监听CS: 每一个站在发送帧之前要检测一下总线上是否有其他站点在发送帧(先听后说)。若监测到总线空闲96比特时间(发送96比特所需要的时间,也称为帧间最小间隔,其作用是使接收方可以检测出一个帧的结束,同时也使得其他站点都能有机会平等竞争信道并发送帧),则发送这个帧;若监测到总线忙,则继续检测并等待总线转换为空闲96比特时间,然后发送这个帧。
碰撞检测CD: 每一个正在发送帧的站边发送变检测碰撞(边说边听)。一旦发现总线上出现碰撞,退避一段随机时间后再次发送(一旦冲突,立刻停说,等待时机,重新再说)。
举例说明MA、CS、CD:
主机A、B、C、D连接到一根总线上就是多址接入;各主机随机发送帧,假设主机C要发送帧,它先进行载波监听,监测到总线空闲96比特时间后,就可以发送帧了。
假设在主机C使用总线发送帧的时候,主机B也要发送帧,于是主机B进行载波监听,发现总线忙,于是持续检测总线,直到发现总线空闲96比特时间,便立即发送帧,发送帧的同时还要进行碰撞检测,只要没检测到碰撞,就持续发送帧。假设在主机B发送帧的过程中,主机C也要发送帧,于是C进行载波监听,发现总线空闲96比特时间,便立即发送帧,这必然会产生碰撞。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/53264f14129249113c19f0bb6128bf19.png#pic_center)
6.3.1.2 争用期(碰撞窗口)
如图所示,主机A和D处于总线型以太网的两端,以太网单程端到端的传播时延记为
τ
\tau
τ,纵坐标为时间。
在t=0时刻,主机A想要发送帧,于是进行载波监听,检测到总线上有96比特时间空闲,便发送帧。
在t=
τ
\tau
τ-
δ
\delta
δ时刻,主机D想要发送帧,于是进行载波监听,此时由于A的信号在总线上传输的距离较短,导致D检测到了总线上有96比特时间空闲,也就是说实际上总线是忙的,但是主机D没有检测到,于是D也发送帧,这就会差生碰撞,发生碰撞的时间为t=
τ
\tau
τ-
δ
2
\frac{\delta}{2}
2δ。
之后,碰撞信号会陆续传播到主机D和主机A。主机D检测到碰撞的时间为t=
τ
\tau
τ,主机A检测到碰撞的时间为t=
2
τ
2\tau
2τ-
δ
\delta
δ。
由此可知:
(1)主机最多经过
2
τ
2\tau
2τ(此时
δ
→
0
\delta\rightarrow0
δ→0)的时长就可以检测到本次发送是否遭遇了碰撞。因此,以太网的端到端往返传播时延
2
τ
2\tau
2τ称为争用期或碰撞窗口;
(2)经过争用起这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞;
(3)每一个主机在自己发送帧之后的一小段时间内,存在着遭遇碰撞的可能性。这一小段时间是未知的,它取决于另一个发送帧的主机到本主机的距离,但不会超过总线的端到端往返传播时延,即一个争用期的时间;
(4)显然,在以太网中发送帧的主机越多,端到端往返传播时延越大,就越有可能发生碰撞。因此,共享式以太网不能连接太多的主机,使用的总线也不能太长。
如:10Mb/s以太网把争用期定为512比特发送时间,即51.2
μ
s
\mu s
μs,因此其总线长度不能超过5120m,但考虑到其他一些因素如信号衰减等,以太网规定总线长度不能超过2500m。
6.3.1.3 最小帧长和最大帧长
主机A要给主机D发送一个很短的帧,载波监听发现总线有96比特空闲时间后开始发送帧,边发送边检测碰撞。主机A很快就将该帧发送完毕了,之后就不再对该帧检测碰撞。
在该帧的传输过程中,主机C也要发送帧,主机C检测到总线有96比特时间空闲后就立刻发送帧,但是实际上此时总线并不空闲,只是主机C未检测出来,这必然会导致碰撞。
主机D最终会收到主机A发送的遭遇碰撞的帧,将其丢弃。但是主机A并不知道已发送的该帧遭遇了碰撞,不会重发该帧。
因此使用CSMA/CD协议的以太网的帧长不能太短。 以太网规定:
(1)最小帧长为64字节,即512比特(发送512比特时间即为争用期)。如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64字节;
(2)以太网的最小帧长确保了主机可在帧发送完成之前就检测到该帧的发送过程中是否遭遇了碰撞。如果在争用期(共发送64字节所用的时间)没有检测到碰撞,那么后续发送的数据就一定不会发生碰撞;如果在争用期内检测到碰撞,就立刻终止发送,这是已经发送出去的数据一定小于64字节,因此凡长度小于64字节的帧都是由于碰撞而异常中止的无效帧。
最小帧长=争用期*数据传输速率
最大帧长
主机A给主机D发送一个很长的帧,边发送边检测碰撞。由于该帧太长,一方面使得其他主机迟迟得不到总线的使用权,另一方面可能导致主机D的接收缓冲区无法装下该帧而产生溢出。
因此,以太网的帧长应该有上限,如以太网版本2的MAC帧最大长度为18(首部尾部)+1500(数据载荷)=1518
字节;插入VLAN标记后的802.1Q帧最大长度为22(首部尾部)+1500(数据载荷)=1522
字节。
6.3.1.4 截断二进制指数退避算法
截断二进制指数退避算法是一种退避时间的计算方法。
退避时间=基本退避时间*随机数r
基本退避时间为争用期
2
τ
2\tau
2τ;
随机数r从离散的整数集合{0,1,...,(2^k^ - 1)}
中随机选出一个数,k = Min[重传次数,10]
举例说明:
若连续多次发生碰撞,就表明可能有较多主机参与竞争信道。但是用上述退避算法可使重传需要推迟的平均时间随重传次数而增大(动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。
当重传16次仍不能成功时,表明同时打算发送帧的主机太多,以至于连续发生碰撞,则丢弃该帧,并向高层报告。
6.3.1.5 使用CSMA/CD协议的共享式以太网的信道利用率
如图所示,横坐标为时间,总线上的某个主机可能发生多次碰撞,进行多次退避后才成功发送了一个帧,帧的发送时延记为T0。在最极端的情况下,源主机和目的主机分别在总线的两端,因此还需要一个单程端到端的传播时延
τ
\tau
τ后,总线才能完全进入空闲状态。因此发送一帧所需的平均时间为多个争用期
2
τ
2\tau
2τ加上帧的发送时延
T
0
T_0
T0加上单程端到端传播时延
τ
\tau
τ.
考虑以下这种理想情况:
(1)各主机发送帧都不会产生碰撞;
(2)总线一旦空闲就有某个主机立刻发送帧;
(3)发送一帧占用总线时间为 T 0 + τ T_0+\tau T0+τ,二帧本身的发送时间是 T 0 T_0 T0,则极限信道利用率的表达式为 S m a x = T 0 T 0 + τ = 1 1 + τ T 0 = 1 1 + a ( 将 τ T 0 记 为 a ) S_{max} = \frac{T_0}{T_0+\tau} = \frac{1}{1+\frac{\tau}{T_0}} = \frac{1}{1+a}(将\frac{\tau}{T_0}记为a) Smax=T0+τT0=1+T0τ1=1+a1(将T0τ记为a)
为了提高信道利用率, a a a应尽量小,则 τ \tau τ应尽量小, T 0 T_0 T0的值应尽量大,这意味着:
(1)以太网端到端的距离应受到限制,不应太长;
(2)以太网的帧长应尽量大一些。
6.3.1.6 CSMA/CD协议的帧发送和接收流程图
需要注意的是:CSMA/CD协议曾用于各种总线结构以太网和双绞线以太网的早期版本中。现在的以太网基于交换机和全双工连接,不会有碰撞,因此没有必要使用CSMA/CD协议。
6.3.2 无线局域网使用的协议:CSMA/CA
6.3.2.1 隐蔽站
CSMA/CD协议可以成功应用于使用广播信道的有线局域网,但是不能用于使用广播信道的无线局域网。使用广播信道的无线局域网应使用载波监听多址接入/碰撞避免CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance)协议:
在无线局域网中,仍然可以使用载波监听多址接入CSMA,即在发送帧之前先对传输媒体进行载波监听,若发现有其他站在发送帧,就推迟发送以免发生碰撞;
在无线局域网中,不能使用碰撞检测CD,原因如下:
(1)由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会小于发送信号的强度(可能相差百万倍)。如果要在无线网卡上实现碰撞检测CD,对硬件的要求非常高。
(2)即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性(如存在隐蔽站问题),进行碰撞检测的意义也不大。
隐蔽站问题:
如图所示:主机A的作用范围没有覆盖主机C,主机C的作用范围也没有覆盖主机A,也就是说A和C都无法检测到对方的无线信号。此时主机A和C都要给主机B发送帧,于是便产生了碰撞,A和C也都无法检测到碰撞。这种未能检测出信道上其他站点信号的问题叫做隐蔽站问题。
而同样使用广播信道的有线局域网就不存在这样的问题。总线上一个主机发送信号,最多经过一个总线端到端传播时延,就会被总线上的各主机接收到;总线上产生的碰撞信号,最多经过一个端到端的往返往返传播时延,也会被总线上的各主机接收到。
因此,802.11无线局域网使用CSMA/CA协议,在CSMA的基础上增加了一个碰撞避免CA功能,而不再实现碰撞检测功能。
由于不可能避免所有的碰撞,并且无线信道误码率较高,802.11标准还使用了数据链路层确认机制(具体为停止-等待协议)来保证数据被正确接收。
802.11的MAC层标准定义了两种不同的媒体接入控制方式:
(1)分布式协调功能DCF(Distributed Coordination Function)。在DCF方式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权,这是802.11定义的默认方式。
(2)点协调功能PCF(Point Coordination Function)。PCF方式使用集中控制的接入算法(一般在接入点AP实现集中控制),是802.11定义的可选方式,在实际中较少使用。
6.3.2.2 帧间间隔
802.11标准规定,所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔IFS(InterFrame Space)。
帧间间隔的长短取决于该站点要发送的帧的类型:
(1)高优先级帧需要等待的时间较短,因此可优先获取发送权;
(2)低优先级帧需要等待的时间较长。若某个站的低优先级帧还没来得及发送,而其他站的高优先级帧已发送到信道上,则信道变为忙碌状态,因而低优先级帧就只能再推迟发送。这样就减少了发生碰撞的机会。
常用的两种帧间间隔如下:
(1)短帧间间隔SIFS(28
μ
s
\mu s
μs),是最短的帧间间隔,用来分割属于一次对话的各帧。一个站点应当能够在这段时间内从发送方式切换到接收方式。使用SIFS的帧类型有ACK帧、CTS帧、由过长的MAC帧分片后的数据帧以及所有回答AP探询的帧和在PCF方式中接入点AP发送出的任何帧。
(2)DCF帧间间隔DIFS(128
μ
s
\mu s
μs),它比短帧间间隔SIFS要长很多,在DCF方式中用来发送数据帧和管理帧。
6.3.2.3 举例说明CSMA/CA协议的工作原理
如图所示:有几个无线站点,横坐标为时间。假设无线信道是空闲的,源站有数据帧要发送。当源站检测到信道空闲,则在等待帧间间隔DIFS后发送该数据帧。目的站若正确收到该数据帧,则经过帧间间隔SIFS后,向源站发送确认帧ACK。需要说明的是,若源站在规定时间(由重传计时器控制这段时间)内没有收到确认帧ACK,就必须重传该数据帧,直到收到确认为止;或者经过若干次的重传失败后放弃发送。
源站检测到信道空闲后还要在等待一段时间DIFS后才发送帧的原因是考虑到可能有其他的站有高优先级的帧要发送。若有,就要让高优先级帧先发送。
目的站在正确接收数据帧后还要等待一段时间SIFS才发送ACK帧的原因是SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧。在这段时间内,一个站点应当能够从发送方式切换到接收方式。
如图所示,在源站和目的站的一次对话中,无线信道处于忙状态,若此时其他站点要发送数据,就必须退让。当信道从忙状态转换到空闲状态,并经过帧间间隔DIFS后,其他要发送数据的无线站点需要退避一段随机时间后才能发送。
信道由忙转为空闲且经过DIFS时间后,还要退避一段随机时间才能使用信道的原因是防止多个站点同时发送数据而产生碰撞。
当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧,则不使用退避算法。但是以下3种情况必须使用退避算法:
(1)在发送数据帧之前检测到信道处于忙状态时;
(2)在每一次重传一个数据帧时;
(3)在每一次成功发送后要连续发送下一个帧时(这是为了避免一个站点长时间占用信道)。
6.3.2.4 CSMA/CA协议的退避算法
在执行退避算法时,站点为退避计时器设置一个随机的退避时间:
(1)当退避计时器的时间减小到零时,就开始发送数据;
(2)当退避计时器的时间还未减小到零时而信道又转变为忙状态,这是就冻结退避计时器的数值,重新等待信道变为空闲,再经过时间DIFS后,继续启动退避计时器。
在进行第i次退避时,退避时间在时隙编号{0,1,…,22+i - 1}中随机选择一个,然后乘以基本退避时间(也就是一个时隙的长度)就可以得到随机的退避时间。这样做是为了使不同站点选择相同退避时间的概率减少。当时隙编号达到255时(对应于第6次退避)就不再增加了。
举例说明CSMA/CA协议的退避算法:
如图所示,A、步、C、D、E是5个无线站点,横坐标为时间。假设A正在占用无线信道发送帧。在A发送的过程中,B、C、D也要发送帧(用向上的箭头表示),于是进行载波监听,发现信道忙,需要退避。根据退避算法选择出一个随机的退避时间,并在每个时隙对信道进行一次检测,当检测到信道由忙状态转为空闲状态且经过帧间间隔DIFS后,退避计时器开始倒计时。
假设C的退避时间最短,当C的退避计时器到时后,C立即开始发送帧。此时信道由空闲状态转换为忙状态,当B和D检测到信道忙后,便冻结各自的剩余退避时间。假设在C使用无线信道发送帧的过程中,E也要发送帧,于是进行载波监听,发现信道忙,需要退避,根据退避算法选择出一个随机的退避时间,并在每个时隙对信道进行一次检测。当检测到信道由忙状态转换为空闲状态且经过帧间间隔DIFS后,退避计时器开始倒计时。
当B和D检测到信道由忙状态转换为空闲状态,且经过帧间间隔DIFS后,退避计时器重新开始从上次冻结的剩余退避时间开始倒计时。
D的退避计时器会首先到时,便立即开始发送帧,此时信道由空闲状态转换为忙状态。当B和E检测到信道忙后,就各自冻结自己剩余的退避时间。当D发送完帧后,信道转为空闲状态。当B和E检测到信道由忙状态转换为空闲状态且经过帧间间隔DIFS后,退避计时器重新开始从上次冻结的剩余退避时间开始倒计时。
E的退避计时器会首先到时,到时候立即开始发送帧。此时信道由空闲状态转换为忙状态。当B检测到信道忙后,冻结自己剩余的退避时间。当E发送完帧后,信道转为空闲状态。
当B检测到信道由忙状态转换为空闲状态,并经过帧间间隔DIFS后,退避计时器重新开始从上次冻结的剩余退避时间开始倒计时。当B的退避计时器到时后,立即开始发送帧。若B发送完这一帧后还有帧需要发送,则在检测到信道空闲且经过帧间间隔DIFS后,还必须在退避一段随机时间后才能发送。
6.3.2.5 CSMA/CA协议的信道预约和虚拟载波监听
信道预约
为了尽可能减少碰撞的概率和降低碰撞的影响,802.11标准允许要发送数据的站点对信道进行预约:
(1)源站在发送数据帧之前先发送一个短的控制帧,称之为请求发送RTS(Request To Send),它包括源地址、目的地址以及这次通信(包括相应的确认帧)所需的持续时间。
(2)若目的站正确收到源站发来的RTS帧,在检测到信道空闲,且经过帧间间隔SIFS后,就发送一个响应控制帧,称为允许发送CTS(Clear To Send),它也包括这次通信所需的持续时间(从RTS帧中将此持续时间复制到CTS帧中)。
(3)源站收到CTS帧后,再等待一段时间SIFS后,就可以发送其数据帧。
(4)若目的站正确收到了源站发来的数据帧,在等待时间间隔SIFS后,就像源站发送确认帧ACK。
除源站和目的站外的其他各站,收到CTS帧(或数据帧)后就推迟接入到无线局域网中。这样就保证了源站和目的站之间的通信不会受到干扰。
如果RTS这发生碰撞,源站就收不到CTS帧,需执行退避算法重传RTS帧。
由于RTS帧和CTS帧很短,发生碰撞的概率、碰撞产生的开销及本身的开销都很小。而对于一般的数据帧,其发送时延往往大于传播时延(因为是局域网),碰撞的概率很大,且一旦发生碰撞而导致数据帧重发就会浪费更多的时间,因此用很小的代价对信道进行预约往往是值得的。802.11标准规定了3种情况供用户选择:
(1)使用RTS和CTS帧;
(2)不使用RTS和CTS帧;
(3)只有当数据帧的长度超过某一数值时才使用RTS帧和CTS帧。
虚拟载波监听
除RTS帧和CTS帧会携带通信需要持续的时间,数据帧也能携带通信需要持续的时间,这称为802.11的虚拟载波监听机制。
由于利用虚拟载波监听机制,站点只要监听到RTS帧、CTS帧或数据帧中的任何一个,就能知道信道被占用的持续时间,而不需要真正监听到信道上的信号,因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题。
例如,这个4个无线站点。A和C互为隐蔽站。A在给B发送帧之前,可以使用RTS帧来预约信道,尽管C收不到这个RTS帧,但是C可以收到B发送给A的CTS帧,这样C就知道了信道将被占用多长时间,在这段时间内C都不会争用信道。也就是说,A给B发送数据帧时,不会受到C的干扰。
七、MAC地址、IP地址以及ARP协议
MAC地址是以太网的MAC子层所使用的地址,属于数据链路层;
IP地址是TCP/IP体系结构网际层所使用的地址,属于网际层;
ARP协议属于TCP/IP体系结构的网际层,其作用是以知设备所分配的IP地址,使用ARP协议可以通过IP地址获取到设备的MAC地址,属于网际层;
尽管IP地址和ARP协议属于TCP/IP体系结构的网际层而不属于数据链路层,但是它们与MAC地址存在一定的关系,并且我们日常的网络应用都离不开MAC地址、IP地址和ARP协议。因此本文将三者放在一起讨论。
7.1 MAC地址
7.1.1 MAC地址简介
如图所示:两台主机通过一条链路连接通信,很显然他们此时不需要地址就可以通信,因为连接在信道上的主机只有他们两个。也就是说,使用点对点信道的数据链路层不需要使用地址。
再来看使用共享信道的总线型局域网:总线上的某台主机要给另一台主机发送帧,表示帧的信号会通过总线传送到总线上的其他所有主机,此时就必须使用地址让目的主机知道这个帧是发送给自己的。
也就是说,当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址。
假设总线上的每个主机的地址分别用一个大写字母来表示,在每个主机发送的帧中必须携带标示发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(Media Access Control),因此这类地址被称为MAC地址;
如图所示,主机C要给主机D发送一个帧,帧首部中需要包含源地址和目的主机地址,这样当总线上的其他主机接收到该帧时,就可以根据帧中的目的地址判断是否要接收该帧。
MAC地址一般被固化在电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为 硬件地址。下图为一块PCI接口的千兆以太网卡的结构:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/bc4755386d1eabf0d6b1f0142362ee80.png#pic_center)
MAC地址有时也被称为物理地址(如在Windows系统中), 但这并不意味着MAC地址属于网络体系结构中的物理层!
一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡)。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器则拥有更多的网络接口,所以会拥有更多的MAC地址。因此严格来说, MAC地址是对于网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
7.1.2 IEEE 802局域网的MAC地址格式
它由48个比特构成,每8个比特为一个字节,从左至右依次为第一字节到第六字节。前三个字节时组织唯一标识符OUI,生产网络设备的厂商需要想IEEE的注册管理结构申请一个或多个OUI。后三个字节是获得OUI的厂商可自行随意分配的,这种地址标识符称为扩展的唯一标识符EUI,对于48比特的MAC地址,可称为EUI-48.
MAC地址的标准表示方法是将每4个比特写成一个十六进制字符,共12个字符。将每两个字符分为一组,共六组,组之间用短线连接,也可以将短线改为冒号。还可以将4个字符分为一组,共3组,组之间用.连接。
有兴趣的可以通过http://standards-oui.ieee.org/来查看已经分配的OUI。也可以在https://mac.bmcx.com/输入自己设备的MAC地址查询设备的厂商信息。
MAC地址的第一字节b0位取0时表示该地址是单播地址,1表示多播地址(又称为组播地址);
MAC地址的第一字节b1位取0是表示该地址是全球管理的(也就是全球唯一的),1表示是本地管理的。
根据b0和b1位的取值不难看出:一共有4种类型的MAC地址:全球管理的单播地址、全球管理的多播地址、本地管理的单播地址和本地管理的多播地址。
7.1.3 IEEE 802局域网的MAC地址发送顺序
字节发送顺序:第一字节——>第六字节
字节内的比特发送顺序:b0——>b7
7.1.4 单播MAC地址的作用
假设有一个拥有三台主机的总线型以太网,各主机网卡上固化的全球单播MAC地址如下图所示。此时主机B要给主机C发送单播帧,主机B首先要构建该单播帧,在帧首部的目的地址字段填入主机C的MAC地址,源地址字段填入自己的MAC地址,再加上帧首部中的其他字段,数据载荷以及帧尾部,就构成了该单播帧。主机B将该单播帧发送出去,主机A和C都会收到该单播帧,然后会把该帧中的目的MAC地址部分与自己的MAC地址进行对比,发现匹配就接受该帧并将该帧交付给上层处理,否则就丢弃。
7.1.5 广播MAC地址的作用
假设主机B要发送一个广播帧,首先要构建该广播帧,在帧首部的目的地址字段填入广播地址(就是十六进制的全F),源地址字段填入自己的MAC地址,再加上帧首部中的其他字段,数据载荷以及帧尾部,就构成了该广播帧。主机B将该广播帧发送出去,主机A和C都会收到该广播帧,发现该帧的目的地址字段是广播帧,便都接受该帧并将其交付上层处理。
7.1.6 多播MAC地址的作用
假设主机A要发送多播帧给该多播地址:07-E0-12-F6-2A-D8(左起第一个字节写成8个比特:00000111,发现b0位是1,这就可以证明该地址是多播地址)。假设主机B、C、D支持多播,各用户给自己主机配置的多播组列表如图所示。可以看出,主机B和C都属于2个多播组,主机D不属于任何多播组。主机A首先要构建该多播帧,在帧首部的目的地址字段填入该多播地址(07-E0-12-F6-2A-D8),源地址字段填入自己的MAC地址,再加上帧首部中的其他字段,数据载荷以及帧尾部,就构成了该多播帧。主机A将该多播帧发送出去,主机B、C、D都会收到该多播帧。主机B和C都发现该多播帧的目的MAC地址在自己的多播组列表中,便都接受该帧并将其交付上层处理。而主机D发现该多播帧的目的MAC地址不在自己的多播组列表中,便丢弃该多播帧。
需要注意的是,当给主机配置多播组列表进行私有应用时,不能使用公有的标准多播地址,感兴趣可以自行查询有哪些。
介绍一个快速判断一个MAC地址是否是多播地址的方法:若左边第一个字节的十六进制数不能整除2,即1、3、5、7、9、B、D、F,则为多播地址。
7.1.7 随机MAC地址简介
据斯诺登爆料,漂亮国国家安全局有一套系统,通过监视电子设备的MAC地址来跟踪城市中每个人的行动。因此,苹果首先在IOS设备扫描网络时采用随机MAC地址技术。随后Windows、安卓6.0以及内核版本为3.18的Linux系统也开始提供随机MAC地址的功能。目前大多数移动设备已经采用了随机MAC地址技术。
7.2 IP地址
首先明确一点:IP地址属于网络层而非数据链路层,本文只简单介绍一下IP地址的作用。
IP地址是因特网上的主机和路由器所使用的地址,用于标识两部分信息:
(1)网络编号:标识因特网上数以百万计的网络;
(2)主机编号:表示同意网络上的不同主机(或路由器各接口)。
假设下图是因特网的一部分,给网络N8上的两个主机个分配了一个IP地址。给路由器R4连接该网络的接口也分配了一个IP地址。可以看出,这三个IP地址的前3个十进制数是相同的,都是网络N8的编号。最后一个十进制数各不相同,是网络N8上各主机和路由器接口的编号。也就是说,同一个网络上的各主机和路由器各接口的IP地址的网络好部分应该相同,主机号部分应该互不相同。
因特网中不同网络的网络编号必须各不相同,例如本例中网络N8的编号为192.168.0,网络N9的编号为192.168.1。需要注意的是,在一个IP地址中哪部分是网络编号哪部分是主机编号并不都和本例相同。
显然,之前介绍的MAC地址不具备区分不同网络的功能。因此,如果只是一个不接入因特网的单独的网络,可以只使用MAC地址。只不过一般的用户都需要接入因特网,因此IP地址和MAC地址都需要使用。
从网络体系结构的五层原理体系结构的角度看一下IP地址与MAC地址的封装位置:应用层将封装好的报文向下交付给运输层;运输层给该报文添加一个运输层首部然后向下交付给网络层;网络层给该协议数据单元添加一个网络层首部后向下交付给数据链路层;数据链路层给该协议单元添加一个数据链路层首部和一个数据链路层尾部后向下交付给物理层;物理层将该协议单元看作比特流一边将它们转换为相应的电信号发送到传输媒体。
由于IP地址属于网络层的范畴,因此在网络层首部中应该封装有源IP地址和目的IP地址。相应的,MAC地址属于数据链路层范畴,因此在数据链路层首部中应该封装有源MAC地址和目的MAC地址。
数据包在转发过程中IP地址和MAC地址的变换情况如下。由于要讨论IP地址和MAC地址的变化情况,暂时不考虑其他各层,可以想象成各网络层进行水平方向的逻辑通信,各数据链路层进行水平方向的逻辑通信:
注意:主机中有完整的网络体系结构,而路由器中最高层为网络层,没有运输层和应用层。
通过本例可以看出:
(1)数据包转发过程中源IP地址和目的IP地址保持不变;
(2)数据包转发过程中源MAC地址和目的MAC地址逐个链路(或逐个网络)改变。
7.3 ARP协议
ARP是一个地址解析协议,它的主要功能就是通过IP地址解析出对应的MAC地址,下面来看一个例子来说明它是如何工作的:
有一个总线型以太网,该网络上有3个主机,每个主机所配置的IP地址和其网卡上固化MAC地址如图所示。主机B要给主机C发送数据包,B知道C的IP地址但是不知道C的MAC地址,因此B在数据链路层封装MAC帧时无法填写目的MAC地址,也就无法构建帧。
实际上,每台主机都会有一个ARP高速缓存表,ARP高速缓存表中,记录有IP地址和MAC地址的对应关系。主机B在给主机C发送数据包时,首先会在自身的ARP表中查找主机C的IP地址对应的MAC地址,但未找到。
因此,主机B需要发送ARP请求报文来获取主机C的MAC地址,ARP请求报文有其具体的格式,这里为了简单起见翻译成人话。总线上的其他主机都能收到该帧。
主机A的网卡收到广播帧后将其交付上层处理,上层的ARP进程解析ARP请求报文,发现所询问的IP地址不是自己的地址,于是不用理会。而主机C发现所询问的正是自己,因此需要进行响应。
主机C首先将主机B的IP地址和MAC地址记录到自己的ARP高速缓存表中,然后给主机B发送ARP相应报文,以告知自己的MAC地址。
主机B的ARP进程解析ARP响应报文,将其所包含的主机C的IP地址与MAC地址记录到自己的ARP告高速缓存表中,然后主机B就可以给主机C发送数据包了。
ARP高速缓存表中的每一条记录都有其类型,分为动态和静态两种:
(1)动态:记录是主机自动获取到的,生命周期默认为2分钟,生命周期结束时,该记录将自动删除。之所以有动态记录,是因为IP地址与MAC地址的对应关系不是永久性的。如主机网卡坏了,更换完卡后,主机的IP地址没有变化但是MAC地址发生了变化。
(2)静态:记录是用户或网络维护人员手工配置的,不同操作系统下的生命周期不同,有的系统重启后记录不存在而有的系统重启后纪录依然有效。
ARP协议只能在一段链路或一个网络上使用,而不能跨网络使用。如下图的主机H1就无法使用ARP协议获取到主机H2的MAC地址,因为两者不属于一段链路。
除ARP请求和响应报文外,ARP还有其他类型的报文,如用于检查IP地址冲突的“无辜ARP、免费ARP”等;
ARP没有安全验证机制,存在ARP欺骗或攻击等问题。