文章目录
媒体接入控制
如图所示,这是一根同轴电缆,有多台主机连接到这根同轴电缆上,他们共享这跟传输媒体,形成了一个总线型的局域网,各主机竞争使用总线,随机的在信道上发送数据,如果恰巧有两个或更多的站点在同一时刻发送数据,那么信号在共享媒体上就要产生碰撞,即发生了冲突,使得这些站点的发送都失败。例如主机c和主机d同时使用总线来发送数据,这必然会产生所发送信号的碰撞。
共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点,对一个共享传输媒体的占用,也就是媒体接入控制MAC
,也可以读作Mark。
媒体接入控制技术的分类如下:
需要注意的是随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网,在有线领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术
媒体接入控制-静态划分信道
首先我们介绍媒体接入控制的其中一类方法,也就是静态划分信道
。
我们首先介绍信道复用的基本概念。复用是通信技术中的一个重要概念,也就是通过一条物理线路同时传输多路用户的信号。当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道,来充分利用传输媒体的带宽
如图所示,这是三对用户各自使用一条独立的物理线路进行通信,如果在发送端使用复用器,在接收端在使用分用器,这三段用户就可以共享一条物理线路进行通信。
常见的信道复用技术有;
- 频分复用fdm
- 时分复用tdm
- 波分复用wdm
- 码分复用CDM
频分复用
首先来看频分复用,如图所示将传输线路的平台资源划分成多个子频带,形成多个子信道,各子信道之间需要留出隔离频1带,以免造成子信道间的干扰。当多路信号输入一个多路复用器时,这个复用器将每一路信号调制到不同频率的载波上,接收端由相应的分用器通过滤波,将各路信号分开,将合成的复用信号恢复成原始的多路信号。很显然频分复用的所有用户同时占用不同的频带资源并行通信
时分复用
再来看时分复用。如图所示,横坐标为时间,将时间划分成一个个的时隙,时分复用技术将传输线路的带宽资源按时隙轮流分配给不同的用户,每对用户只在所分配时隙里使用线路传输数据。
时分复用技术,将时间划分成了一段段等长的时分复用帧,每一个时分复用的用户,在每一个时分复用帧中占用固定序号的时隙。如图所示,每一个用户所占用的时隙是周期性出现的,其周期就是时分复用帧的长度,很显然时分复用的所有用户在不同的时间占用同样的频带宽度。
波分复用
再来看波分复用,波分复用其实就是光的频分复用,如图所示:
这是8路传输速率均为2.5g比特每秒的光载波,其波长均为1310纳米,经光调制后分别将波长变换到1550~1561.2纳米,每个光载波相隔1.6纳米,这8个波长很接近的光载波,经过光复用器,或称合波器就在一根光纤中传输,因此在一根光纤上数据传输的总速率就达到了8*2.5g比特每秒,也就等于20g比特每秒,光信号传输一段距离后会衰减,因此对衰减了的光信号必须进行放大,才能继续传输。现在已经有了很好的掺铒光纤放大器,两个光纤放大器之间的光缆线路长度可达120公里,而光复用器和光分用器或称分拨器之间可以放入4个掺铒光纤放大器,使得光复用器和光分用器之间的无光电转换的距离可达600公里。
码分复用
我们来举例说明,假设只派给码分多址系统中某个站点的码片序列为0001 1011
该站发送比特1,就是发送自己的码片序列0001 1011
。该站发送比特0,就是发送自己的码片序列的二进制反码1110 0100
。
为了方便,我们按惯例将码片序列中的0写为-1,1写为正1,则该站点的马片序列是(-1, -1,-1、+1、 +1、+1、-1、+1)。顺便提一下,这种通信方式称为直接序列扩频DSSS
。
码片序列的挑选原则如下:
-
分配给每个站的码片序列,必须各不相同,实际常采用每随机码序列。
-
分配给每个站的码片序列,必须相互正交,也就是规格化内积为零。
正交就是规格化内积为0,相关计算公式上图中已经显示。
然后我们来看一道习题融会贯通一下:
接下来我们来看码分多址的应用举例:
假设ABCD是码分多址系统中的4个站点,a站发送比特1,也就是发送自己所分配到的码片序列。为了简单起见,我们用向量a来表示a站的码片序列,b站发送比特0,也就是发送自己所分配到的码片序列的二进制反码。我们用b法反来表示b站的码片序列的二进制砝码。c站没有发送数据,显然 d站可以接收到a站和b站所发送信号的叠加信号。
假设系统中的各站所发送的码片序列都是同步的,接收站d知道其他各站点或特有的码片序列,则接收站d对所接收到的叠加信号可以进行判断:
- 要判断a站是否发送数据,所发送的是比特0还是比特1,可将收到的叠加信号的码片向量与a站自身的码片向量进行规格化内机运算。根据我们之前就给出过的参考公式和计算出结果为1。
- 同理,要判断b站和将收到的叠加信号的码片向量与b站自身的码片向量进行规格化内机运算,可计算出结果为-1。
- 要判断c站可将收到的叠加信号的码片向量与c站自身的码片向量进行规格化内积运算,可计算出结果为0。
从上述计算结果可以看出,计算结果为数值1,被判断方发送了比特1,计算结果为数值-1,被判断方发送了比特0,计算结果为数值0,被判断方未发送数据,
我们基于上述方法来做一个练习;
结果;
最后小结一下:
随机接入 CSMACD协议
接下来我们介绍随机接入,它属于媒体接入控制的另一类方式,即动态接入控制。
如图所示多个主机连接到一根总线上,各主机随机发送帧。当两个或多个主机同时发送帧时,代表帧的信号就会产生碰撞或称为冲突,又或者当某个主机正在使用总线发送帧的过程中,另一台主机也要发送帧,这同样也会产生碰撞。
很显然如何协调总线上各主机的工作尽量避免产生碰撞,是一个必须要解决的重要问题。早期的共享式以太网采用载波监听/多址接入碰撞检测,也就是CSMA/CD协议来解决该问题。
我们来具体看看这个协议:
96比特时间是指发送96比特所耗费的时间,也称为帧间最小间隔,其作用是接收方可以检测出一个帧的结束,同时也使得所有其他站点都能有机会平等竞争性到并发送帧
下面我们来举例说明,多址接入,载波监听以及碰撞检测。
多址接入的概念比较简单,即多个主机连接到一根总线上,各主机随机发送帧,假设主机C要发送帧,它首先进行载波监听,检测到总线空闲96比特时间后就可以发送帧了。假设在主机C使用总线发送帧的过程中,主机B也要发送帧,主机B进行载波监听,发现总线忙,于是持续检测总线,一旦发现总线空闲96比特时间,则立即发送帧,边发送帧还要边检测碰撞,只要没检测到碰撞,则可继续发送帧的剩余部分。
假设在主机B发送帧的过程中,主机C也要发送帧,主机C进行载波监听,发现总线空闲96比特时间后立即发送帧,这必然会产生碰撞。在产生碰撞的时刻,主机B和主机C都在边发送帧边检测碰撞,但都检测不到碰撞,碰撞信号沿总线传播,主机C会比主机B更早检测到碰撞并停止发送。
退避一段随机时间后,重新再发送之前所发送的帧。当主机B检测到碰撞后,立即停止发送,退避一段随机时间,重新再发送之前所发送的帧。
以太网还采取了一种叫做强化碰撞
的措施,这就是当发送帧的站点,一旦检测到碰撞,除了立即停止发送帧外,还要再继续发送32比特或48比特的人为干扰信号,以便有足够多的碰撞信号,使所有站点都能检测出碰撞。
接下来我们介绍争用期的概念:
如图所示主机A和D处于总线型以太网的两端,以太网单程端到端的传播时延即为T,纵坐标为时间,假设在时刻0主机A要发送帧,当检测到总线空闲96比特时间后,立即发送帧,在时刻T-a,主机D也要发送帧,当检测到总线空闲96比特时间后,立即发送帧,需要注意的是主机D检测到总线空闲,但实际上总线并不空闲,只是主机D检测不出来,这必然会产生碰撞,发生碰撞的时刻为T减去二分之a。之后,碰撞信号会陆续传播到主机D和主机A。主机D检测到碰撞的时刻为a,而主机A检测到碰撞的时刻为2T减去a。
从该图可知,主机最多经过2T,也就是a趋近于0,就可检测到本次发送是否遭受了碰撞。
接下来我们介绍最小帧长
的概念,假设主机A正在给主机D发送一个很短的帧,边发送边检测碰撞,主机A很快就将该帧发送完毕了,之后就不再针对该帧检测碰撞。在该帧的传输过程中,主机C也要发送帧,主机C检测到总线空闲96比特时间后就立即发送帧,尽管总线实际上并不空闲,这必然会产生碰撞,主机D最终会收到主机A发送的并遭遇碰撞的帧,主机D会将该帧丢弃,但对于主机A而言,他并不知道自己已发送完毕的该帧,在总线上传输的过程中遭遇了碰撞,因此不会重发,该帧很显然使用CSMACD协议的以太网的帧长不能太短
前面说过如果发生碰撞那么碰撞检测的信号一定会在争用期内发回来
既然以太网规定了最小帧长,那么是否还规定了最大帧长?
我们来举例说明,假设主机A正在给主机D发送一个很长的帧:
- 这会使得主机A长时间占用总线,而总线上的其他主机迟迟拿不到总线的使用权
- 另外由于帧很长,还可能导致主机D的接收缓冲区无法装下该帧而产生溢出
因此以太网的帧长应该有其上限
例如下图是以太网版本二的MAC格式以及插入VLAN标记字段后的802.1Q帧:
接下来我们通过一张图理解退避时间的计算方法,也就是截断二进制指数退避算法:
接下来我们来讨论一下使用CSMA/CD协议的共享式以太网的信道利用率。
如图所示横坐标为时间,总线上的某个主机可能发生多次碰撞,进行多次退避后,成功发送了一个帧,帧的发送时延即为T0。在最极端的情况下,源主机在总线的一端,而目的主机在总线的另一端,因此还要经过一个单程端到端的传播实验T后,总线才能完全进入空闲状态。因此发送一帧所需的平均时间为多个争用期2T,加上一个帧的发送时延T0,再加上一个单程端到端的传播时延T,
考虑以下这种理想情况,各主机发送帧都不会产生碰撞,总线一旦空闲,就有某个主机立即发送帧,因此这部分时间就不存在了。发送一帧所占用总线的时间为T0加上T,而帧本身的发送时间为T0,这样就可得出极限信道利用率的表达式,将分子分母同除以T0,将T除以T0系为参数A为了提高性到利用率,参数A的值应尽量小,要使参数A的值尽量小,则T的值应该尽量小,这意味着以太网端到端的距离应受到限制,不应太长,而T0的值应当尽量大,这意味着以太网的帧长应尽量大一些。
接下来我们给出CSMACD协议的帧发送流程图:
再来看CSMACD协议的帧接收流程图:
我们来看几道题:
内容小结如下,需要提醒大家注意的,是CSMA/CD协议曾经用于各种总线结构以太网和双绞线以太网的早期版本中,现在的以太网基于交换机和全双工连接,不会有碰撞,因此没有必要使用CSMA/CD协议:
随机接入 CSMACA协议
这里我们介绍无线局域网使用的媒体接入控制协议,CSMA/CA也就是载波监听多址接入/碰撞避免。请大家思考一下,既然CSMA/CD协议已经成功的应用于使用广播信道的有线局域网,那么同样使用广播信道的无线局域网,能不能也使用CSMA/CD协议?
在无线局域网中仍然可以使用载波监听多址接入(CSMA),即在发送帧之前,先对传输媒体进行载波监听,若发现有其他站在发送帧就推迟发送,以避免发生碰撞。
但是在无线局网中不能使用碰撞检测CD,原因如下:
- 由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度,可能相差百万倍。如果要在无线网卡上实现碰撞检测,对硬件的要求非常高
- 即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性,例如存在隐蔽站问题,进行碰撞检测的意义也不大
如图所示,这里有4个无线站点,A的信号范围可以覆盖到B但不能覆盖到C,C的信号范围可以覆盖到B但不能覆盖到A。换句话说A和C都检测不到对方的无线信号,当A和C都要给B发送帧时就会产生碰撞,但A和C无法检测到碰撞,这种未能检测出信道上其他站点信号的问题,叫做隐蔽站问题,
而同样使用广播信道的有线局域网就不存在这样的问题。例如总线上某个主机发送的信号,最多经过一个总线端到端传播时延,就会被总线上的各主机接收到,而总线上产生的碰撞信号最多经过一个总线端到端往返传播时延也会传遍总线。
因此802.11无线局域网使用CSMA/CA协议,在CSMA的基础上增加了一个CA也就是碰撞避免功能,而不再实现CD也就是碰撞检测功能。由于不可能避免所有的碰撞,并且无线信道误码率较高。802.11标准还使用了数据链路层确认机制,具体为停止-等待协议,来保障数据被正确接收,802.11的MAC层标准,定义了两种不同的媒体接入控制方式:
- 一种是分布式协调功能DCF,在DCF方式下,没有中心控制站点,每个站点使用CSMA/CA协议,通过争用信道来获取发送权,这是802.11定义的默认方式。
- 另一种是点协调功能PCF。PCF方式使用集中控制的接入算法,一般在接入点AP实现集中控制,是802.11定义的可选方式,在实际中较少使用。
然后我们通过下面一张图了解一下帧间间隔IFS:
接下来我们来举例说明,CSMACA协议的工作原理:
如图所示,这些是无线站点,横坐标为时间。假设无线信道是空闲的,源站有数据帧要发送,当源站检测到信道空闲,则在等待帧间间隔DIFS后发送该数据帧。目的站若正确收到该数据帧,则经过帧间间隔SIFS后向源站发送确认帧ACK。
需要说明的是,若源站在规定时间内没有收到确认帧ACK,由重传计时器控制这段时间,就必须重传该数据帧,直到收到确认为止,或者经过若干次的重传失败后放弃发送。
请大家思考一下,源站为什么在检测到信道空闲后,还要在等待帧间间隔DISS后才发送数据帧?
这就是考虑到可能有其他的站,有高优先级的帧要发送,若有就让高优先级帧先发送
那么目的站又是为什么在正确接收数据之后,还要再等待一段时间SIFS才能发送ACK帧?
SIFS是最短的帧间间隔,用来分割开属于一次对话的各个帧。在这段时间内,一个站点应当能够从发送方式切换到接收方式。
如图所示,在源站和目的站的一次对话过程中,无线信道处于忙状态,若无线信道处于忙状态时,其他无线站点要发送数据,则必须退避。当信道从忙状态转换到空闲状态,并经过帧间间隔DIFS后,其他要发送数据的无线站点,需要退避一段随机时间后才能发送。
那么既然信道已经由忙转为空闲,且经过中间间隔DIFS后,为什么还要退避一段随机时间才能使用信道,而不是立即使用信道?
这样做的目的在于防止多个站点同时发送数据而产生碰撞
这里的DIFS同样也是为了让优先级高的先行
当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧(也就是说刚开始发),则不使用退避算法,
而以下情况必须使用退避算法:
-
在发送数据帧之前,检测到信道处于忙状态时,必须使用退避算法,
-
在每一次重传一个数据帧时,必须使用退避算法,
-
在每一次成功发送后,要连续发送下一个帧时,必须使用退避算法,这是为了避免一个站点长时间占用信道。
下面我们来介绍CSMA/CA协议的退避算法。
我们来举例说明DSMA/CA协议的退避算法,如图所示 ABCDE是5个无线站点,横坐标为时间
- 假设A正在占用无线信道发送帧,在A的发送过程中,BCD也要发送帧,我们用向上的箭头来表示,于是进行载波监听,发现信道忙需要退避,根据退避算法,选择出一个随机的退避时间,并在每个时隙对信道进行一次检测。当检测到信道由忙状态转为空闲状态,且经过帧间间隔DIFS后,退避计时器开始倒计时。
- 假设C的退避时间最短(退避时间一到是可以直接发送帧的,而检测到信道空闲之后是必须要等一个DIFS才能发送帧的,这要区分清楚),当C的退避计时器到时后,C立即开始发送帧,此时信道由空闲状态转换为忙状态。当B和D检测到信道忙后,就冻结各自剩余的退避时间。
- 假设在C占用无线信道发送帧的过程中,E也要发送帧,于是进行载部监听,发现信道忙需要退避,根据退避算法,选择出一个随机的退避时间,并在每个时隙对信道进行一次检测。当检测到信道由忙状态转为空闲状态,且经过帧间间隔DIFS后退避计时器开始倒计时。
- 当B和D检测到信道由忙状态转为空闲状态,且经过帧间间隔DIFS后,退避计时器重新开始,从上次冻结的退避剩余时间开始倒计时,D的退避计时器会首先到时,D立即开始发送帧,此时信道由空闲状态转换为忙状态,当BE检测到心脑门后,就冻结各自剩余的退避时间,当D发送完帧后,信道将转为空闲状态,当BE检测到信道由忙状态转换为空闲状态,且经过帧间间隔DIFS后退避计时器重新开始,从上次冻结的退币剩余时间开始倒计时,E的退避计时器会首先到时,E立即开始发送帧,此时信道由空闲状态转换为忙状态
- 当B检测到信道忙后,就冻结自己剩余的退避时间。当E发送完帧后,信道将转为空闲状态,当B检测到信道由忙状态转换为空闲状态,且经过帧间间隔DISS后,退避计时器重新开始,从上次冻结的退避剩余时间开始倒计时。当B的退避计时器到时候,B立即开始发送帧,
- 若B发送完这一帧后,还有帧要发送,则在检测到新的空闲,且经过中间间隔DFIS号还必须再退避一段随机时间后才能发送。
接下来我们介绍CSMA/CA协议的信道预约和虚拟载波监听。
除RTS帧和CTS帧会携带通信需要持续的时间,数据帧也能携带通信需要持续的时间,这称为802.11的虚拟载波监听机制。
由于利用虚拟载波监听机制,站点只需要监听到RTS帧、CTS帧或数据帧中的任何一个就能知道信道被占用的持续时间,而不需要真正监听到信道上的信号。因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题。
例如这是4个无线站点,A和C互为隐蔽站,A的信号可以覆盖到B但不能覆盖到C C的信号可以覆盖到B但不能覆盖到A。A在给B发送数据之前,可以使用RTS帧来预约信道,尽管C收不到该RTS帧,但是C可以收到B发送给A的CTS帧,这样A就知道了信道将被占用多长时间:
在这段时间内,C都不会争用信道,也就是说A给B发送数据帧时不会受到C的干扰
本节课的内容小结如下:
MAC地址
- MAC地址是以太网的MAC层所使用的地址
- IP地址是tcpip体系结构网系层所使用的地址。
- ARP协议属于tcpip体系结构的网际层,其作用是已知设备所分配到的IP地址,使用ARP协议,就可以通过该IP地址获取到设备的MAC地址。
- 从网络体系结构的角度来看,MAC地址属于数据链路层的范畴,IP地址和ARP协议属于网际层的范畴。
- 尽管IP地址和ARP协议属于TCP体系结构的网际层,而不属于数据链路层,但是它们与MAC地址存在一定的关系,并且我们日常的网络应用都离不开MAC地址、IP地址以及ARP协议。因此我们将这三者放在一起讨论。
MAC地址作用
如图所示两台主机通过一条链路通信,很显然他们不需要使用地址就可以通信,因为连接在信道上的主机只有他们两个。换句话说,是用点对点信道的数据链路层不需要使用地址。
再来看使用共享信道的总线型局域网,总线上的某台主机要给另一台主机发送帧,表示帧的信号通过总线会传送到总线上的其他所有主机。那么这些主机如何判断该帧是否是发送给自己的呢?
很显然使用广播信道的数据链路层必须使用地址来区分各主机,也就是说当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识。即一个数据链路层地址。
如图所示,假设总线上各主机的地址分别用一个不同的大写字母来表示,在每个主机发送的帧中,必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制的,写英文缩写词为MAC可以读作MAC,因此这类地址被称为MAC地址。
如图所示这是主机c要发送给主机d的帧,则在帧首部中的目的地址字段应填入主机D的MAC地址,而在源地址字段应填入主机c自己的MAC地址,这样总线上其他各主机收到该帧后,就可以根据帧首部中的目的地址字段的值,是否与自己的MAC地址匹配,进而丢弃或接受该帧。
MAC地址一般被固化在网卡的电可擦可编程只读存储器EEPROM中,因此 MAC地址也被称为硬件地址,如图所示,这是一块PCI接口的千兆以太网卡:
MAC地址有时也被称为物理地址,例如在windows系统中,但请大家注意,这并不意味着MAC地址属于网络体系结构中的物理层。
一般情况下用户主机会包含两个网络适配器,一个是有线局域网试配器,也就是有线网卡,另一个是无线局域网试配器,也就是无线网卡。每个网络适配器都有一个全球唯一的MAC地址,而交换机和路由器往往拥有更多的网络接口,所以就会拥有更多的MAC地址。
综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
MAC地址格式
接下来我们介绍IEEE 802局域网的MAC地址格式,它由48个比特构成,每8个比特为1个字节,从左至右依次为第1字节到第6字节
- 前三个字节是
组织唯一标识符OUI
,生产网络设备的厂商需要向IEEE的注册管理机构申请一个或多个OUI - 后三个字节是获得OUI的厂商可自行随意分配的。这种地址标识符成为扩展的
唯一标识符EUI
。对于48比特的MAC地址可称为EUI-48
。 - MAC地址的标准表示方法是将每4个比特写成1个16进制的字符,共12个字符,将每两个字符分为一组,共6组,组之间用短线连接,例如这是windows系统中的表示方法,
- 也可以将短线更改为冒号。例如这是Linux系统,苹果系统,安卓系统中的表示方法,
- 还可以将4个字符分为一组,共三组组之间用点连接。例如这是packet tracer仿真软件中的表示方法,
- 如何在各种系统上查看设备所拥有的Mark地址,大家可自行在网上搜索。
另外我们可以在IEEE的官方网站查看已分配的组织唯一标识符OUI,这是具体的网址:standards-oui.ieee.org/oui/oui.txt(opens new window)
可以看到30-fB-B8这个oui已被分配给华为科技有限公司,而a4-45-19这个oui已被分配给小米通信有限公司。
如果我们知道设备的MAC地址,而不知道该设备的厂商信息,可以通过设备的MAC地址来查询,有很多网站都提供这样的免费查询服务。
MAC地址种类
请大家思考一下,我们每个人一般会拥有几个全球管理的单波MAC地址、台式机、笔记本电脑、平板电脑、智能手机等设备上的以太网接口、WiFi接口、蓝牙接口都分配有全球单波的MAC地址,而每台交换机和路由器都拥有多个网络接口,也就拥有多个全球单播的MAC地址。那么在我们有生之年是否会看到EUI-48地址空间耗尽?
对于使用EUI-48地址空间的应用程序,IEEE的目标寿命为100年,也就是直到2080年,但现在鼓励采用EUI-64作为替代
MAC地址的发送顺序
接下来我们介绍MAC地址的发送顺序,字节发送顺序为第一字节到第六字节,字节内的比特发送顺序为b0~b7如图所示:
单播MAC地址
下面我们来举例说明单播MAC地址的作用。
假设这是一个拥有三台主机的总线型以太网,各主机网卡上固化的全球单波MAC地址如图所示,假设主机b要给主机c发送单波帧:
-
主机b首先要构建该单播帧,在帧首部中的目的地址字段,填入主机c的MAC地址,源地址字段填入自己的MAC地址,再加上帧首部中的其他字段,数据载荷以及帧尾部,就构成了该单播帧。
-
主机b将该单播帧发送出去,主机a和c都会收到该单播帧。主机a的网卡,发现该单播帧的目的MAC地址与自己的MAC地址不匹配,于是丢弃该帧
-
主机c的网卡,发现该单波帧的目的MAC地址与自己的MAC地址匹配,于是接受该帧,并将该帧交给其上层处理,如图所示
广播MAC地址
再来看广播MAC地址的作用。假设主机b要发送一个广播帧,主机b首先要构建该广播帧,在帧首部中的目的地址字段填入广播地址,也就是16进制的全f。源地址字段填入自己的MAC地址,再加上帧首部中的其他字段,数据载荷以及帧尾部,就构成了该广播帧。主机b将该广播帧发送出去,主机a和c都会收到该广播帧,发现该帧首部中的目的地址字段的内容是广播地址,就知道该帧是广播帧,接受该帧,并将该帧交给上层处理。
多播MAC地址
再来看多播MAC地址的作用,假设主机a要发送多播帧给该多播地址,将该多播地址的左起第一个字节写成8个比特,可以看到最低比特位是1,这就表明该地址是多播地址。
这里给大家介绍一个快速判断MAC地址是否是多播地址的方法,也就是如果该位16进制数不能整除2,即1、3、5、7、9、b、d、f,则该地址就是多播地址。
-
假设主机bcd支持MAC多播,各用户给自己的主机配置的多播组列表如下所示,可以看到主机b属于两个多播组,主机c也属于两个多播组,而主机d不属于任何多播组。
-
主机a首先要构建该多播帧,在帧首部中的目的地址字段,填入该多播地址,源地址字段填入自己的MAC地址,再加上帧首部中的其他字段,数据载荷以及帧尾部就构成了该多播帧。
-
主机a将该多播帧发送出去,主机bcd都会收到该多播帧,主机b发现该多播帧的目的MAC地址在自己的多播组列表中,主机c发现该多播帧的目的MAC地址在自己的多播组列表中,因此主机b和c都会接受该帧并送交上层处理,
-
而主机地发现该多播帧的目的MAC地址不在自己的多播组列表中,主机地丢弃该多播帧。
需要提醒大家注意的是,当给主机配置多播组列表进行私有应用时,不得使用公有的标准多播地址,具体可在以下网址查询。
随机MAC地址
最后我们简单介绍一下随机MAC地址的概念。据斯诺登爆料,美国国家安全局有一套系统,通过监视电子设备的MAC地址,来跟踪城市中每个人的行动。因此苹果率先在iOS系列设备扫描网络时,采用随机MAC地址技术,随后 windows10,安卓6.0,以及内核版本为3.18的Linux系统,也开始提供随机MAC地址的功能。目前大多数移动设备已经采用了随机MAC地址技术
内容小结:
IP地址
前面我们介绍了MAC地址的相关知识,这里我们介绍IP地址的相关知识,需要说明的是IP地址属于网络层的范畴,而非数据链路层的范畴。
之所以在数据链路层这一章的讲解中引入IP地址,是因为在我们日常的大多数网络应用中,属于数据链路层的MAC地址和属于网络层的IP地址都在使用,他们之间存在一定的关系。Ip地址的相关内容比较多,例如分类的IP地址,划分子网的IP地址,构造超网的IP地址等,这些内容我们将在网络层这一章详细介绍。这里我们主要介绍IP地址的作用。
区分网络编号
IP地址是英特网上的主机和路由器所使用的地址,用于标识两部分信息:
- 一部分是网络编号,用来标识因特网上数以百万计的网络
- 另一部分是主机编号,用来标识同一网络上不同主机或路由器各接口
如图所示。假设这是因特网的一部分,我们给网络n8上的两台主机各分配了一个IP地址,给路由器r4连接该网络的接口,也分配了一个IP地址,这三个IP地址的前三个10进制数是相同的,也就是网络n8的编号。而最后一个10进制数各不相同,是网络n8上各主机和路由器接口的编号。换句话说,同一个网络上的各主机和路由器的各接口的IP地址的网络号部分应该相同,而主机号部分应该互不相同。
又例如我们给网络n9上的各主机和路由器的接口,各分配了一个IP地址,这三个IP地址的前三个10进制数是相同的,也就是网络n9的编号。而最后一个10进制数各不相同,是网络n9上各主机和路由器接口的编号。
因特网中不同网络的网络编号必须各不相同。例如在本例中,网络n8的编号为192.168.0,而网络n9的编号为192.168.1。需要提醒大家注意的是,在一个IP地址中,哪部分是网络编号,哪部分是主机编号,并不都和本例相同,我们将在后续网络层这一章进行详细介绍。
IP地址与MAC地址的封装位置
很显然之前介绍的MAC地址不具备区分不同网络的功能,而IP地址具备这样的功能,如果只是一个单独的网络,不接入因特网,可以只使用MAC地址,但这并不是一般用户的常见应用方式。
如果主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用。接下来我们从网络体系结构的角度,看看IP地址与MAC地址的封装位置。我们以5层原理体系结构为例:
- 应用层封装好应用层报文将其向下交付给运输层,
- 运输层看不懂,也无需看懂应用层报文的结构与内容。我们用黑色表示,仅仅给其添加一个运输层首部,运输层将封装好的协议数据单元向下交付给网络层,
- 网络层看不懂,也无需看懂运输层协议数据单元的结构与内容,仅仅给其添加一个网络层首部,网络层将封装好的协议数据单元向下交付给数据链路层
- 数据链路层看不懂,也无需看懂网络层协议数据单元的结构与内容,仅仅给其添加一个数据链路层首部和一个数据链路层尾部,数据链路层将封装好的协议数据单元向下交付给物理层
- 物理层看不懂,也无需看懂数据链路层协议数据单元的结构与内容,仅仅将他们看作是比特流,以便将他们转换为相应的电信号,发送到传输媒体。
由于IP地址属于网络体系结构中网络层的范畴,因此在网络层首部中应该封装有原IP地址和目的IP地址,相应的,由于MAC地址属于网络体系结构中数据链路层的范畴,因此在数据链路层首部中应该封装有源MAC地址和目的MAC地址
转发过程中IP地址与MAC地址的变化情况
接下来我们来看看数据包,在转发过程中IP地址与MAC地址的变化情况,如图所示为了简单起见,图中各主机和路由器各接口的IP地址和MAC地址用比较简单的标识符来表示,而并未使用实际的IP地址和MAC地址。
假设主机h1要给主机h2发送一个数据包,我们从网络体系结构的角度来看看数据包在传输过程中,IP地址与MAC地址的变化情况。
需要注意的是主机中有完整的网络体系结构,而路由器的最高层为网络层,它没有网络体系结构中的运输层和应用层,我们所关注的重点是网络层封装IP数据报时,原IP地址和目的IP地址应该填写什么;数据链路层封装帧时,源MAC地址和目的MAC地址应填写什么。
因此我们忽略网络体系结构中,除网络层和数据链路层外的其他各层,可以想象成各网络层进行水平方向的逻辑通信,各数据链路层进行水平方向的逻辑通信。
- 主机h1将数据包发送给路由器R1,在网络层封装的IP数据报首部中,源IP地址应填写主机h1的IP地址IP1,目的IP地址应填写主机h2的IP地址IP2,也就是从IP1发送给IP2。而在数据链路层封装的帧首部中,源MAC地址应填写主机h1的MAC地址MAC1,目的MAC地址应填写路由器R1的MAC地址MAC3,也就是从MAC1发送给MAC3,
- 路由器R1将收到的数据包转发给路由器r2,在网络层封装的IP数据报首部中,源IP地址仍然填写主机h1的IP地址,IP1目的IP地址仍然填写主机h2的IP地址IP2,也就是从IP1发送给IP2。而在数据链路层封装的帧首部中,源MAC地址应填写路由器R1的MAC地址MAC4,目的MAC地址应填写路由器r2的MAC地址MAC5,也就是从MAC4发送给MAC5,
- 路由器r2将收到的数据包转发给主机h2,在网络层封装的IP数据报首部中,源IP地址仍然填写主机h1的IP地址IP1,目的IP地址仍然填写主机h2的IP地址IP2,也就是从IP1发送给IP2;而在数据链路层封装帧首部时,源MAC地址应填写路由器r2的MAC地址MAC6,目的MAC地址应填写主机h2的MAC地址MAC2,也就是从MAC6发送给MAC2。
通过本例可看出在数据包转发过程中,源IP地址和目的IP地址始终保持不变,而源MAC地址和目的MAC地址逐个链路或逐个网络改变:
- 主机h1知道应该把数据包传给r1,由r1帮其把数据包转发出去,h1知道r1相应接口的IP地址为IP3,但不知道其对应的MAC地址是什么
- 路由器r1知道应该把数据包转发给r2,R1知道R2相应接口的IP地址为IP5,但不知道其对应的MAC地址是什么
- 路由器r2知道应该把数据包传给主机h2,r2知道h2的IP地址为IP2,但不知道其对应的MAC地址是什么,
有的同学可能会对这部分内容产生疑问,请大家目前先权且这么认可,我们将在后续的网络层这一章详细介绍。
对于本地主机h1、路由器r1和r2都存在一个共同的问题,那就是知道IP地址,但不知道其相应的MAC地址,如何通过IP地址找出其对应的MAC地址,这是我们下面将要介绍的地址解析协议ARP所要实现的功能。
内容小结如下:
ARP协议
前面我们提出了这样一个问题,那就是如何通过IP地址找到其相应的IP地址?这就是我们将要介绍的地址解析协议ARP
所要实现的主要功能。
下面我们就来举例说明 ARP协议的工作原理,这是一个共享总线型的以太网,为了简单起见,我们只画出了该网络中的三台主机,各主机所配置的IP地址,和其网卡上固化的MAC地址,如图所示:
假设主机b要给主机c发送数据包,主机b知道主机c的IP地址,但不知道它的MAC地址,因此主机b的数据链路层在封装MAC帧时,就无法填写目的MAC地址字段,进而也就无法构建出要发送的MAC帧。
实际上每台主机都会有一个ARP高速缓存表,例如这是主机b的ARP高速缓存表,ARP高速缓存表中记录有IP地址和MAC地址的对应关系。例如这是主机b之前获取到的主机a的IP地址与MAC地址的对应关系。在本例中当主机b要给主机c发送数据包时,会首先在自己的ARP高速缓存表中查找主机c的IP地址所对应的MAC地址,但未找到,因此主机b需要发送ARP请求报文,来获取主机c的MAC地址:
Arp请求报文的内容是:我的IP地址为192.168.0.2,我的MAC地址为00e0f9a34377,我想知道IP地址为192.168.0.3的主机的MAC地址。
需要说明的是为了简单起见,这里我们以比较通俗的语言来描述ARP请求报文的内容,但实际上 ARP请求报文有其具体的格式。另外需要大家注意的是 ARP请求报文被封装在MAC帧中发送,目的地址为广播地址。
- 主机b发送封装有ARP请求报文的广播帧,总线上的其他主机都能收到该广播帧
- 主机a的网卡收到该广播帧后,将其送交上层处理。上层的ARP进程解析ERP请求报文,发现所询问的IP地址不是自己的IP地址,因此不予理会。
- 主机c的网卡收到该广播之后,将其上交上层处理,上层的ARP进程解析ARP请求报文,发现所询问的IP地址,正是自己的IP地址,需要进行响应
- 主机c首先将ARP请求报文中所携带的主机b的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后给主机b发送ARP响应报文,以告知自己的MAC地址。
ARP响应报文的内容是我的IP地址是192.168.0.3,我的MAC地址为00-0c-Cf-b8-4a-82,需要注意的是ARP响应报文被封装在MAC帧中,发送目的地址为主机b的MAC地址,主机c给主机b发送封装有ARP响应报文的单播帧,总线上的其他主机都能收到该单播帧,
主机a的网卡收到该单波针后,发现其目的MAC地址与自己的MAC地址不匹配,直接丢弃该帧
主机b的网卡,收到该单波帧后,发现其目的MAC地址,就是自己的MAC地址,将其交付上层处理。
上层的ARP进程解析ERP响应报文,将其所包含的主机c的IP地址与MAC地址记录到自己的ARP高速缓存表中
主机b现在可以给主机c发送之前发送的数据包了,ARP高速缓存表中的每一条记录都有其类型,类型分为动态和静态两种:
- 动态类型是指记录是主机自动获取到的,其生命周期默认为两分钟,当生命周期结束时,该记录将自动删除。这样做的原因是IP地址与MAC地址的对应关系并不是永久性的。例如当主机的网卡坏了,更换新的网卡后,主机的IP地址并没有改变,但主机的MAC地址改变了。
- 静态类型是指记录是用户或网络维护人员手工配置的。不同操作系统下的生命周期不同,例如系统重启后不存在,或在系统重启后依然有效。
接下来请大家思考一下,在下图所示的网络拓扑中,主机h1是否可以使用ARP协议获取到主机h2的MAC地址?
回答是否定的,ARP协议只能在一段链路或一个网络上使用,而不能跨网络使用。对于本例ARP协议的使用是逐段链路进行的。
MAC地址,IP地址以及ARP协议的总结如下:
需要说明的是除ARP请求和响应报文外,ARP还有其他类型的报文,例如用于检查IP地址冲突的无故ERP,或称免费ERP。另外 ARP协议没有安全验证机制,存在ARP欺骗或攻击等问题。
集线器与交换机的区别
我们首先来看早期的总线型以太网,他最初使用粗铜轴电缆作为传输媒体,后来演进到使用价格相对便宜的细同轴电缆。
当初认为这种连接方法既简单又可靠,因为在那个时代普遍认为有源器件不可靠而无缘的电缆线才是最可靠的。然而这种使用无源、电缆和大量机械接头的总线型以太网,并不像人们想象的那么可靠。
后来以太网发展出来了一种使用大规模集成电路,可靠性非常高的设备,叫做集线器,并且使用更便宜更灵活的双绞线。作为传输媒体如图所示,这是一个使用集线器和双脚线电缆,互联了4台主机的新型拓扑的以太网。主机中的以太网卡,以及极限器各接口,使用RJ-45插座,它们之间通过双绞线电缆进行连接,在双脚线电缆的两端是RJ-45插头,也就是我们俗称的水晶头。
实践证明,使用双绞线和集线器比使用具有大量机械接头的无源电缆,要可靠的多,并且价格便宜,使用方便。因此粗缆和细缆以太网早已成为了历史,从市场上消失了
使用集线器的以太网,虽然物理拓扑是星型的,但在逻辑上仍然是一个总线网,各站共享逻辑上的总线资源,使用的还是csma/cd协议,集线器只工作在物理层,它的每个接口仅简单的转发比特,不进行碰撞检测,碰撞检测的任务由各站的网卡负责。
在分析问题时,我们可将集线器简单看作是一条总线,集线器一般都有少量的容错能力和网络管理功能。例如若网络中某个网卡出现了故障,不停的发送帧,此时集线器也可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作。
使用集线器可以对以太网进行扩展。由于集线器只工作在物理层,所以更具体的说法是使用集线器在物理层扩展以太网。我们来举例说明,假设某学院下设三个系部,每个系部都有一个使用集线器作为互联设备的以太网,这三个以太网相互独立,各自共享自己的总线资源,是三个独立的碰撞域或称冲突域。
例如一系中的某台主机给另一台主机发送数据帧,由于总线特性,表示该数据帧的信号会传输到一系中的其他各主机,
二系中的多台主机同时发送数据帧,由于总线特性,这必然会产生信号碰撞,碰撞后的信号会传输到二系中的各主机。
为了使各系部的以太网能够相互通信,可再使用一个集线器,将它们互联起来。这样原来三个独立的以太网就要互联成为了一个更大的以太网,而原来三个独立的碰撞域就要合并成了一个更大的碰撞域。换句话说,形成了一个更大的总线型以太网。比如一系中的某台主机,给二系中的某台主机发送数据帧,由于总线特性,表示该数据帧的信号会传输到整个网络中的其他各主机
在集线器之后发展出了更先进的网络互联设备,也就是以太网交换机。我们先从一个典型的例子来看看以太网交换机与集线器的区别:
- 使用集线器互联而成的,共享总线式以太网上的某个主机,要给另一个主机发送单播帧,该单播帧会通过共享总线传输到总线上的其他各个主机
- 使用交换机互联而成的交换式以太网上的某个主机,要给另一个主机发送播帧针,该单波帧进入交换机后,交换机会将该单波帧转发给目的主机,而不是网络中的其他各个主机。
很显然交换机具有明显的优势,需要说明的是为了简单起见,这里所有举例的前提条件是忽略ARP过程,并假设交换机的帧交换表已经学习或配置好了。
以太网交换机通常都有多个接口,每个接口都可以通过双绞线电缆与一台主机或另一个以太网交换机相连,一般都工作在全双工方式,也就是发送帧和接收帧,可以同时进行。
注意使用集线器的以太网在逻辑上是共享总线的,需要使用csma/cd协议来协调各主机征用总线,只能工作在半双工模式,也就是收发帧不能同时进行。以太网交换机具有并行性能,同时连通多对接口,使多对主机能同时通信而无碰撞。
以太网交换机的接口一般都支持多种速率,例如10兆比特每秒,100兆比特每秒,1G比特每秒,10G比特每秒等。以太网交换机工作在数据链入层,当然也包括物理层,他收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧:
假设这是该交换机的帧交换表,主机a给主机b发送数据帧,交换机收到该帧后,在帧交换表中查找该帧的目的MAC地址,也就是主机b的Mark地址,发现应该从接口2转发,于是就从接口2将该帧转发出去:
以太网交换机是一种即插即用的设备,上电即可工作。其内部的帧交换表是通过自学习算法自动的逐渐建立起来的。
许多以太网交换机对收到的帧采用存储转发方式进行转发,但也有一些交换机采用直通交换方式
直通交换不必把整个帧先缓存后再进行处理,而是在接收帧的同时,就立即按帧的目的MAC地址决定该帧的转发接口,因而提高了帧的转发速率。一般采用基于硬件的交叉矩阵,这样交换时延就非常小,但直通交换的一个缺点,他不检查帧是否有差错,就直接将帧转发出去。
接下来我们再通过举个例子,进一步对比集线器和交换机。
我们首先来对比主机发送单播帧的情况:
-
对于使用集线器的共享总线型以太网,单播帧会传播到总线上的其他各主机,各主机中的网卡,根据帧的目的MAC地址决定是否接受该帧。
-
对于使用交换机的交换式以太网,交换机收到单播帧之后,根据帧的目的MAC地址和自身的帧交换表,将帧转发给目的主机,而不是网络中的其他各主机。
我们再来对比发送广播帧的情况:
- 对于使用集线器的共享总线型以太网,广播帧会传播到总线上的其他各主机,各主机中的网卡,检测到帧的目的MAC地址是广播地址,就接受该帧
- 对于使用交换机的交换式以太网。交换机收到广播帧之后,检测到帧的目的MAC地址是广播地址,于是从除该帧进入交换机接口外的其他各接口,转发该帧,网络中除源主机外的其他各主机收到广播帧后接受该广播帧。
- 从本例可以看出,使用集线器的共享总线型以太网中的各主机属于同一个广播域,而使用交换机的交换式以太网中的各主机也属于同一个广播域。因此对于广播帧的情况,从效果上看没有什么区别。
我们再来对比网络中的多台主机,同时给另一台主机发送单播帧的情况:
-
对于使用集线器的共享总线型以太网,这必然会产生碰撞,遭遇碰撞的帧会传播到总线上的各主机
-
对于使用交换机的交换式以太网,交换机收到多个帧时会将它们缓存起来,然后逐个转发给目的主机,不会产生碰撞。
接下来我们来对比使用集线器扩展以太网 和 使用交换机扩展以太网有什么区别:
前提:
忽略ARP过程
假设交换机的帧交换表已经学习好了
-
首先对比发送单播帧的情况,这是仅使用集线器扩展以太网后发送单波帧的情况
-
这是仅使用交换机扩展以太网后发送单播帧的情况,很显然交换机具有非常明显的优势
-
再来对比发送广播帧的情况,这是仅使用集线器扩展以太网后发送广播帧的情况,这是仅使用交换机扩展以太网后发送广播帧的情况,从效果上看是一样的。
-
可见不管是用集线器还是交换机来扩展以太网,扩展后的以太网中的各主机都属于同一个广播域,仅使用集线器扩展的以太网,在逻辑上仍然是共享总线的,并且形成为一个更大的碰撞域。换句话说,参与竞争总线的主机比扩展前的更多了,这是竞争总线并产生碰撞的一个例子。
-
同样的传输任务,在仅使用交换机扩展的以太网上就不会产生碰撞。
-
因此如果仅仅使用集线器来扩展以太网,不仅会扩大广播域,还同时扩大了碰撞域,但是如果使用交换机将原来各自独立的碰撞域连接起来,只会扩大广播域,而不会扩大碰撞域,也就是说交换机可以隔离碰撞域
我们将集线器和交换机的区别小结如下,需要说明的是工作在数据链路层的以太网交换机,其性能远远超过工作在物理层的集线器,而且价格并不贵,这就使得集线器逐渐被市场淘汰。目前很难在市场上再见到集线器了:
以太网交换机自学习和转发帧的流程
这里我们介绍以太网交换机自学习和转发帧的流程
首先我们要注意:
-
以太网交换机工作在数据链路层,当然也包括物理层,需要说明的是目前市场上也有包含网络层部分功能的交换机,称为三层交换机
-
以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧,
-
以太网交换机是一种即插即用的设备,刚上电启动时,其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机通过自学习算法,自动逐渐建立起帧交换表。
下面我们来举例说明,以太网交换机自学习和转发帧的流程。如图所示,相互连接的两台以太网交换机,各自连接了三台主机,构成了一个交换式以太网。为了简单起见,各主机中网卡上固化的MAC地址,仅用一个大写字母表示,各主机互不相同。为了将重点放在以太网交换机自学习和转发帧的流程上,我们假设各主机已经知道了网络装其他各主机的MAC地址,换句话说,不需要首先通过ARP来获取目的主机的MAC地址。
-
假设主机A给主机B发送帧,该帧从交换机1的接口1进入交换机1,交换机1首先进行
登记
的工作,将该帧的源MAC地址A记录到自己的帧交换表中,将该帧进入自己的接口的接口号1,相应的也记录到帧交换表中,上述登记工作就称为交换机的自学习。
-
之后,交换机1对该帧进行转发,该帧的目的MAC地址是B,在帧交换表中查找MAC地址B,找不到,于是对该帧进行盲目的转发,也称为
泛洪
,也就是从除该帧进入交换机接口外的其他所有接口转发该帧,可以看出交换机一开始还是比较笨的,他还没有足够的知识来明确转发帧,只能进行盲目的转发。
-
主机B的网卡收到该帧后,根据帧的目的MAC地址B就知道这是发送给自己的帧,于是就要接受该帧。
-
主机C的网卡收到该帧后,根据帧的目的MAC地址B就知道这不是发送给自己的帧,于是就丢弃该帧。
-
该帧从交换机2的接口二进入交换机2,交换机2首先进行登记的工作,将该帧的源MAC地址A记录到自己的帧交换表中,将该帧进入自己的接口的接口号2,相应的也记录到帧交换表中。
-
之后交换机2对该帧进行转发,该帧的目的MAC地址是B,在帧交换表中查找MAC地址B,找不到,于是对该帧进行盲目的转发,主机DEF都会收到该帧,根据帧的目的MAC地址B就知道这不是发送给自己的帧,于是丢弃该帧。
-
接下来主机B给主机A发送帧,该帧从交换机1的接口3进入交换机1,交换机1首先进行登记的工作,将该帧的源MAC地址B记录到自己的帧交换表中,将该帧进入自己的接口的接口号3,相应的也记录到帧交换表中。
-
之后,交换机1对该帧进行转发,该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到,于是按照MAC地址A所对应的接口号1,从接口1转发该帧,这是明确的转发。
-
主机A的网卡收到该帧后,根据帧的目的MAC地址A就知道这是发送给自己的帧,于是接受该帧,很显然交换机2不会收到该帧。
接下来主机E给主机A发送帧,该帧从交换机2的接口3进入交换机2,交换机2首先进行登记的工作,之后,交换机2对该帧进行转发,该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到,于是按照MAC地址A所对应的接口号2,从接口2转发该帧,这是明确的转发,该帧从交换机1的接口4进入交换机1,交换机1首先进行登记的工作,之后,交换机1对该帧进行转发,该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到,于是按照MAC地址A所对应的接口号1,从接口1转发该帧,这是明确的转发。
主机A的网卡收到该帧后,根据帧的目的MAC地址A就知道这是发送给自己的帧,于是接受该帧。
我们再来看看以太网交换机丢弃帧的情况,为了演示该情况,我们给交换机1的接口1再连接一台主机G,为了简单起见,没有画出集线器,这样主机A主机G,交换机1的接口1就共享同一条总线.
假设主机G给主机A发送帧,该帧通过总线进行传输,主机A和交换机1的接口1都可以收到,主机A的网卡收到该帧后,根据帧的目的MAC地址A就知道这是发送给自己的帧,于是接受该帧。交换机1收到该帧后,首先进行登记工作,之后,交换机1对该帧进行转发,该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到MAC地址A所对应的接口号是1,但是该帧正是从接口1进入交换机1的,交换机1不会再从该接口将该帧转发出去,因为这是没有必要的,于是丢弃该帧,很显然交换机2不会收到该帧.
随着网络中各主机都发送了帧后,网络中的各交换机,就可以学习到各主机的MAC地址,以及他们与自己各接口的对应关系。
需要注意的是帧交换表中的每条记录都有自己的有效时间,到期自动删除。请大家想想看,这是为什么呢?好不容易学习来的记录,为什么要到期自动删除,这不是多此一举吗?
这是因为MAC地址与交换机接口的对应关系,并不是永久性的,例如交换机某接口所连接的主机更换成了另一台主机,又或者主机中的网卡坏了,更换了新的网卡,这些情况都会导致MAC地址与交换机接口的对应关系的改变。
相信大家还记得我们曾经介绍过的ARP高速缓存表,表中的IP地址与MAC地址的对应关系记录也是会定期自动删除的,这是因为IP地址与MAC地址的对应关系,也并不是永久性的。
内容小结如下:
以太网交换机的生成树协议STP
请大家思考一下,应该如何提高以太网的可靠性呢?例如如图所示的以太网,由三台交换机互联而成,每个交换机上都连接有一些主机,为了简单起见,我们只画出了每个交换机上连接的一台主机:
如果交换机A与B之间的链路出现了故障,则交换机B上连接的所有主机,既无法与交换机A上连接的所有主机进行通信,也无法与交换机C上连接的所有主机进行通信。
如果交换机A与交换机B和C之间的链路都出现了故障,则原来的以太网变成了三个独立的较小的以太网,他们之间无法通信,
相信很多同学已经想到了,可以通过添加冗余链路
的方法来提高以太网的可靠性。
例如在本例中,我们给交换机B和C之间添加一条冗余链路后,即使交换机A和B之间的链路出现了故障,整个网络还是连通的,但是冗余链路也会带来负面效应,那就是形成网络环路。网络环路会带来一些问题。例如广播风暴,我们来举例说明:
很显然该广播帧将在各交换机之间反复转发,分别按顺时针和逆时针方向同时兜圈,这就是所谓的广播风暴,广播风暴会大量消耗网络资源,使得网络无法正常转发其他数据帧,也会使主机反复收到广播帧,大量消耗主机资源,还会使交换机的帧交换表震荡(漂移)
如图所示,这是交换机B的帧交换表,这是其各接口的接口号。为了简单起见,假设各主机的名称也可作为其MAC地址:
-
当交换机B收到主机H1发送的广播帧后进行登记工作,将帧的源MAC地址H1和帧进入交换机B的接口号1登记到帧交换表中,这条记录是正确的。
-
当交换机B再次收到交换机C转发来的该广播帧后进行登记工作,将帧的源MAC地址H1和帧进入交换机B的接口号2,这条错误记录登记到帧交换表中,并删除原先正确的记录。
-
当交换机B再次收到交换机A转发来的该广播帧号进行登记工作,将帧的源MAC地址H1和帧进入交换机B的接口号3,这条错误记录登记到帧交换表中,并删除原先错误的记录。
-
当交换机B再次收到交换机C转发来的该广播帧后进行登记工作,将帧的源MAC地址H1和帧进入交换机B的接口号2,这条错误记录登记到帧交换表中,并删除原先错误的记录。很显然有关MAC地址H1的记录将在这两个错误记录之间反复震荡
注意:
交换机不会改变帧中的MAC地址,经过路由器才会改变MAC地址。跨网段才会改变MAC地址。
为了可以在增加冗余链路来提高网络可靠性的同时,又避免网络环路带来的各种问题。以太网交换机使用生成树协议,其英文缩写词为STP。不论交换机之间采用怎样的物理连接,使用生成树协议的交换机都能够自动计算,并构建出一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树形的,也就是没有逻辑环路。
我们来举例说明,如图所示,为了提高可靠性,5台交换机之间进行了冗余连接,冗余链路不止一条,网络环路也不止一个。为了简单起见,各交换机上连接的主机没有画出。我们用绿色的小圆圈表示交换机的接口状态为正常状态,用橙色的小方块表示交换机的接口状态为阻塞状态,用红色的叉表示出现了故障,如果各交换机的各接口都处于正常状态,则会存在多个网络环路。实际上各交换机之间按照生成树协议中规定的生成树算法,交互一些参数后,就可以判断出自己应该阻塞自己的哪些接口。例如图中所示,这样就会形成一个逻辑上没有环路的网络,如图所示。
当然这个逻辑上没有环路的网络,一定要确保联通整个网络,否则就没有意义了。当首次连接交换机或网络物理拓扑发生变化时,这有可能是人为改变造成的,也有可能是出现故障造成的,交换机都将进行生成树的重新计算。例如假设某段链路出现了故障,相关交换机检测到该故障后,重新计算生成树,决定将自己之前阻塞的接口恢复为正常状态,这样就会形成一个新的逻辑上没有环路的网络。
虚拟局域网VLAN
虚拟局域网VLAN概述
以太网交换机工作在数据链路层,也包括物理层,使用一个或多个以太网交换机互联起来的交换式以太网,其所有站点都属于同一个广播域。
随着交换式以太网规模的扩大,广播域相应扩大,如图所示,这是一个由多个以太网交换机互联而成的交换式以太网。每个以太网交换机上都连接了多个主机,形成了一个巨大的广播域。
然而巨大的广播域会带来很多弊端,例如广播风暴、难以管理和维护潜在的安全问题等。
我们来举例说明广播风暴的问题,假设网络中的某个主机要给另一个主机发送一个数据帧,但是在自己的ARP高速缓存表中,无法查到目的主机的MAC地址,于是首先要发送ARP广播请求来获取目的主机的MAC地址。该ARP广播请求会传遍整个网络,网络中的其他所有主机都可以收到该广播:
这种情况就是所谓的广播风暴,广播风暴会浪费网络资源和网络中各主机的CPU资源,因此除非应用需求必须要使用广播,否则网络中的主机应尽量不使用广播。
也许有的同学会有这样的想法,如果网络中只是偶尔出现广播,那还是可以接受的,但事实上网络中会频繁出现广播信息。目前使用最广泛的tcpip协议当中的很多协议都会使用广播,例如地址解析协议ARP,路由信息协议rap,动态主机配置协议dhcp等。除此之外,其他一些协议站也会频繁使用广播:
那么如何才能将较大的广播域分割成更小的广播域,使用路由器就可以隔离广播域
如图所示,这是由两台以太网交换机互联而成的交换式以太网。网络中的各主机同属于一个广播域,使用路由器可以将该广播域分割成两个较小的广播域。路由器工作在网络体系结构的第三层,也就是网络层。
由于路由器默认情况下,不对广播数据包进行转发,因此路由器很自然的就可以隔离广播域。然而路由器的成本较高,局域网内部全部使用路由器来隔离广播域是不现实的。
在这种情况下,虚拟局域网技术应运而生,虚拟局域网的英文缩写词为VLAN,它是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术。这些逻辑组具有某些共同的需求。
如图所示一楼、二楼、三楼分别有一个局域网,可将他们通过另外一个交换机互联成一个更大的局域网,那么原来每一个局域网成为现在局域网的一个网段,网络中的各主机属于同一个广播域,某个主机发送到广播数据包,其他所有主机都可以收到。
根据应用需求,我们将该局域网划分成两个VLAN,VLAN1和VLAN1。此后VLAN1中的广播数据包不会传送到VLAN2,VLAN2中的广播数据包也不会传送到VLAN1,也就是说同一个VLAN内部可以广播通信,不同VLAN之间不能广播通信:
小结:
虚拟局域网VLAN的实现机制
这里我们介绍虚拟局域网VLAN的实现机制,虚拟局域网VLAN是在交换机上实现的,需要交换机能够实现以下两大功能:
- 一个是能够处理带有VLAN标记的帧,也就是IEEE 802.1Q帧
- 另一个是交换机的各端口,可以支持不同的端口类型,不同端口类型的端口,对帧的处理方式有所不同
我们首先来看 IEEE802.1q帧,也称为dot one q帧。他对以太网的MAC帧格式进行了扩展,插入了四字节的VLAN标记,如图所示:
VLAN标记的最后12个比特称为VLAN标识符VID
,它唯一的标识了以太网帧属于哪一个VLAN , Vid的取值范围是0~ 4095,其中0和4095都不用来表示VLAN,因此用于表示VLAN的vid的有效取值范围是1~4094,
需要注意的是802.1q帧是由交换机来处理的,而不是用户主机来处理的。
-
当交换机收到普通的以太网帧时会将其插入四字节的VLAN标记,将其转变为802.1q帧,简称为
打标签。
-
当交换机转发802.1q帧时,可能会删除其4字节VLAN标记,将其转变为普通以太网帧,简称为
去标签
VLAN标记字段的其他内容,对我们理解VLAN划分机制来说,并没有什么帮助,因此就不再赘述了。
接下来我们介绍交换机的端口类型,交换机的端口类型一般有以下三种,它们分别是;
- Access
- Trunk
- Hybrid
需要说明的是思科交换机没有Hybrid端口。在介绍这三种交换机端口类型之前,我们首先需要了解一下端口的缺省VLAN ID这个概念,在思科交换机上将其称为本征VLAN。例如思科交换机在用户未配置VLAN时,所有端口都默认属于VLAN1,即所有端口的本帧VLAN都是VLAN1,而在华为交换机上将其称为端口VLAN ID剪辑为PVID。 在我们接下来的介绍中,为了描述方便,我们采用PVID而不是本征VLAN。需要注意的是交换机的每个端口,有且仅有一个PVID
接下来我们首先介绍Access端口:
我们来举例说明:
- 假设主机A发送了一个广播帧,该帧从交换机的端口一进入交换机
- 由于端口1的类型是Access,它会对接收到的未打标签的普通以太网MAC帧,打标签,也就是插入四字节的VLAN标记字段,由于端口1的PVID值等于1,因此所插入的四字节VLAN记字段中的VID的值也等于1。Access端口的发送处理方法是若帧中的VID与端口的PVID相等,则去标签后转发该帧,否则不转发。
- 对于本例广播帧中的VID的取值与端口234的PVID取值都等于1,因此交换机会从这三个端口对帧进行去标签转发。
再来看这个例子,我们的应用需求是将主机A和B划归到VLAN2,将C和D划归到VLAN3,这样VLAN2中的广播帧不会传送到VLAN3,VLAN3中的广播帧也不会传送到VLAN2。
为了实现这种应用,可以在交换机上创建VLAN2和VLAN3,然后将交换机的端口1和2划归到VLAN2,因此端口1和2的PVID值等于2,将交换机的端口3和4划归到VLAN3,因此端口3和4的PVID值等于3。
我们来看主机A发送广播帧的情况,该帧从交换机的端口1进入交换机,由于端口1的类型是Access,它会对接收到的未打标签的普通以太网MAC帧打标签,也就是插入四字节的VLAN标记字段,如图所示,由于端口1的PVI D值等于2,因此所插入的四字节VLAN标记字段中的VID的值也等于2,广播帧中的VID的取值与端口二的PVID取值都等于2,因此交换机会从端口二对帧进行去标签转发。
我们再来看主机C发送广播帧的情况,该帧从交换机的端口三进入交换机,由于端口三的类型是Access,它会对接收到的未打标签的普通以太网MAC帧打标签,也就是插入四字节的VLAN标记字段,如图所示由于端口三的PVID值等于3,因此所插入的四字节VLAN标记字段中的VID的值也等于3,广播帧中的VID的取值与端口4的PVID取值都等于3,因此交换机会从端口4对帧进行去标签转发。
接下来我们介绍Trunk端口,Trunk端口一般用于交换机之间或交换机与路由器之间的互联,使不同交换机的主机可以属于同个VLAN。
Trunk端口可以属于多个VLAN,也就是说Trunk端口可以接收和发送多个VLAN的帧,用户可以设置Trunk端口的PVID值,默认情况下Trunk端口的PVID值为1。
我们来举例说明Trunk端口的功能,如图所示,两台交换机互联而成了一个交换式以太网,我们的应用需求是将主机ABEF划归到VLAN1,将主机CDGH划归到VLAN2,由于交换机首次上电时默认配置各端口属于VLAN1,其相应的PVID值等于1,并且端口的类型为Access,因此我们需要对交换机进行相应的配置,才能满足应用需求,分别在两个交换机上创建VLAN2,并将他们的端口3和4都划归到VLAN二,其相应的PVID值=2,而两个交换机的端口一和二保持默认配置即可,也就是属于VLAN1,其相应的PVID值等于1。特别需要注意的是两个交换机互联的端口5,需要将他们的类型更改为Trunk类型,而他们的PVID值保持默认的1即可。
Trunk端口的发送处理方法是对VID等于PVID的帧去标签再转发。
假设主机A发送了一个广播帧:
-
该帧从交换机一的端口1进入交换机,由于端口一的类型是Access,它会对接收到的未打标签的普通以太网MAC帧打标签,也就是插入四字节的VLAN标记字段。由于端口1的PVID值等于1,因此所插入的四字节VLAN标记字段中的VID的值也等于1。该广播帧中的VID的取值与端口二的PVID值都等于1,端口二的类型是Access,因此交换机一会从端口2对帧进行去标签转发
-
该广播帧中的VID的取值与端口5的PVID值都等于1,端口5的类型是Trunk,因此交换机一会从端口5对帧进行去标签转发,很显然该广播帧会从交换机2的端口5进入交换机二,Trunk端口的接收处理方法是接收未打标签的帧,根据接收帧的端口的PVID给帧打标签,即插入四字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等。对于本例交换机2会对接收到的未打标签的普通以太网MAC帧打标签,也就是插入4字节的VLAN标记字段。如图所示,由于端口5的PVID值等于1,因此所插入的4自字节VLAN标记字段中的VIP的值也等于1
-
该广播帧中的VID的取决与端口1和2的PVID值都等于1,端口1和2的类型都是Access,因此交换机1会从端口1和2对帧进行去标签转发。
再来看主机C发送广播帧的情况,该帧从交换机1的端口3进入交换机,由于端口三的类型是Access,它会对接收到的未打标签的普通以太网MAC帧打标签,也就是插入四字节的VLAN标记字段。如图所示,由于端口3的PVID值=2,因此所插入的4自字节VLAN标标记字段中的VID的值也等于2,该广播站中的VID的取值与端口4的PVI D值都等于2,端口4的类型是Access,因此交换机1会从端口4对帧进行去标签转发,
该广播帧中的VID的取值与端口5的PVID值不相等,由于Trunk端口对VID不等于PVID的,帧是直接转发的,因此交换机1会从端口5对帧直接转发,也就是不去掉标签,而带着标签直接转发。很显然该802.1Q广播帧会从交换机2的端口5进入交换机2 Trunk端口,接收已打标签的802.1Q帧,该广播帧中的VID的取值与端口3和4的PVID值都等于2,端口3和4的类型都是Access类型,因此交换机二会从端口3和4对帧进行去标签转发。
通过本例可以看出,在由多个交换机互联而成的交换式以太网装,划分VLAN时,连接主机的交换机端口,应设置为Access类型,交换机之间互联的端口应设置为Trunk类型。
接下来请同学们做一个练习题,以加深对Access端口和Trunk、端口功能的理解:
本节课的内容小结如下:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/121948.html