哈工大计算机网络课程局域网详解之:交换机概念
文章目录
在介绍完局域网中最具代表性的以太网技术后,接下来我们继续来看一下在局域网中使用非常广泛也是非常重要的网络设备:交换机。
以太网交换机(switch)
本节主要面向以太网来介绍其中使用的交换机。
作为以太网交换机来说,是一个典型的数据链路层设备,可以实现对链路层数据帧的存储-转发。在存储-转发的过程中,交换机是通过检验到达数据帧的目的MAC地址,选择性(selectively)向一个或多个数据链路转发帧。
同时,交换机作为链路层设备,在每个接口中发送/接收数据帧时,实际上都是利用CSMA/CD协议来访问链路,发送数据帧的。
最典型也是使用最广泛的一类交换机叫做透明(transparent)交换机。这里透明的意思是指:
- 主机感知不到交换机的存在。
因此,这类透明交换机就是一种即插即用的设备。也就是说,作为标准的链路层设备,交换机可以直接接入到网络就可以工作,而不需要复杂的配置和管理。
交换机:多端口间同时传输
交换机在现在的网络中,使用最广泛的场景,比如在以太网中,通过把计算机利用一个点对点链路,直接接入到交换机的一个接口上,从而构成了一个局域网,有时也被称为交换以太网。示例图如下所示:
这些主机都是通过一个独享的,或非共享的链路直接与交换机相连。作为交换机可以在这些互联的主机之间实现数据帧的存储-转发。同时,正如上面介绍的,交换在每段链路上都是遵循CSMA/CD协议来收发数据帧。由于在上述网络中,每个主机都是点对点与交换机连接的(每段链路一个独立的冲突域),所以不会发送冲突,且可以实现全双工。
交换机可以在这些所有互联的主机之间,实现并行的交换传输。比如A-A‘之间进行通信和B-B‘之间进行通信是可以同时进行的,互不干扰,没有冲突。
交换机转发表:交换表
作为交换机,如何保证数据能够动态的在多个不同的接口之间进行交换传输呢?
比如还是上面的示例图,交换机怎么知道A‘(实际指的是MAC地址)可以通过接口4到达,而B‘可以通过接口5到达?
这里就涉及交换机里一个非常重要的概念:交换表。
每个交换机都会维护一个交换表(switch table),交换表中的每条记录entry,记录了MAC地址与相应接口的转发映射关系(类似路由器中的转发表)。
比如,每个entry的格式:(主机MAC地址,到达主机的接口,时间戳)。这个时间戳的设置是当时间戳设置的时间超时之后,会把该条记录从交换表中清除,再重新学习获取。(看起来很像路由表!)
接下来还有一个疑问,就是上面交换机中的交换表是怎么构建出来的? 我们在网络层中介绍过,路由器中的转发表是利用一些路由协议(e.g. OSPF、BGP),根据算法来计算得到的转发信息。这里的交换表是这样做的吗?
交换机:自学习
实际上,交换表的构造方法跟网络层中路由转发表的构造方法有很大差异。这个差异在于,交换机获取交换表的信息是通过自学习来完成的。
交换机通过自学习,获知到达主机的接口信息。学习的过程大致如下:
- 当收到帧时,交换机“学习”到发送帧的主机(通过帧的源MAC地址),位于收到该帧的接口所连接的LAN网段。
- 学到该信息之后,就可以将发送主机的MAC地址/接口信息记录到交换表中。
下面以一个示例来看一下自学习的过程。还是上面的示例图,假设主机A要向目的主机A‘发送数据帧。(A和A‘实际上都是指MAC地址)
数据帧从主机A发送后,到达交换机,此时交换机就可以根据数据帧的源MAC地址学习到,当MAC地址为A时,其接口对应的是1。也就是说,交换机学习到了将来如何有数据帧需要发送给主机A,则会通过接口1来转发。
同时由于初始时,交换表是空的,不清楚应用通过哪个接口来转发该数据帧。此时会采用一种泛洪的方式,也就是除了接口1之外,其余的接口都会转发一个该帧的副本。 主机接收到后,会比对数据帧中的目的MAC地址,因此只有主机A‘会正确接收该数据帧,其他主机则直接丢弃。
作为交换机,在整个自学习过程中,有时也被称为一个帧过滤/转发过程。
交换机事实上就是利用收到数据帧的目的MAC地址去检索交换表,来决定从哪个接口转发数据帧。在这个过程中,也同时利用帧的源MAC地址来进行自学习。
接下来,我们对上面介绍的过程进行汇总,来描述一个帧转发过程。
当交换机收到帧时:
-
记录帧的源MAC地址与输入链路接口。
-
利用目的MAC地址检索交换表。
-
if在交换表中检索到与目的MAC地址匹配的入口(entry)
then {
if 目的主机位于收到帧的网段
then 丢弃帧
else 将帧转发到该入口指向的接口
}
else 泛洪(flood)/* 向除收到该帧的接口之外的所有接口转发 */
交换机互联
作为利用交换机连接的局域网,显然不会只有一台交换机来连接所有的主机。有的时候可能是接口的限制,或是网络距离的需要,需要对网络进行扩展。最典型的扩展方式,就是利用多交换机互联之后,构成一个更大范围的层级结构的局域网。
这种网络结构在现在的局域网中是非常常见的。那么在上面的层级结构中,主干交换机S1、S2、S3、S4又是如何来构建交换表的呢?
需要再次强调的是,上述A、B、C…这些实际上指代的都是主机的MAC地址。
假设此时A向G发送数据帧,S1怎么知道通过S4转发?S4又怎么知道通过S3转发?
显然这个过程也是要通过自学习来完成的。这个过程实际上与单一交换机情形相同。比如上面的例子中,S1不知道如何转发数据帧时,采用的方式仍然是泛洪。泛洪之后,把数据帧传输到了S4,S4同样不知道如何转发,则仍然继续泛洪。以此类推,最终S3经过泛洪把数据帧的一个副本传输给了G。而在这个过程中,每个交换机都会自学习来学习各自交换表中的转发映射关系。
组织机构(Institutional)网络
交换机在实际局域网中使用非常广泛,比如下图的示例网络,就是一些比较典型的组织机构网络的一个缩影。
事实上比如像校园网、小型中小企业的网络等,它们的网络构成,大部分都由我们图中所示的网络特点。
比如,通过一个局域网的边缘路由器与外部网络连接(一般是连接到一个ISP网络上)。在网络(组织)内部,利用交换机连接交换机,交换机连接主机这样的方式构成一个组织内部网络。
从这个网络中可以看出,如果说路由器右边连接的网络不再包含网络层(第三层)设备的话,显然这样的网络对应的就是一个IP子网。在这个IP子网中,任何一个交换机在工作过程中,如何收到在这个网络范围内的任何一个主机发送的广播数据帧(目的MAC地址是全1),此时,所有交换机都会把这个广播帧转发到所有的其他接口上去,也就是上面讲过的泛洪。因此,对于这样一个IP子网来说,也被称为一个广播域。
再结合之前介绍过的冲突域的概念:如果交换机的某个接口所连接的网络不再经过另外一个交换机或网络设备的话,这样的网络就是一个冲突域。
上面的示例网络可以看得出来,由于每个交换机的接口最多只连接一个主机,所以每个冲突域都只有一台主机。
交换机 VS 路由器
在现在的网络中,经常会需要用到交换机和路由器等设备,因此,我们对交换机和路由器设备进行一个简单的对比,来加深理解。
交换机 vs 路由器:
- 两者均为存储-转发设备:
- 路由器:网络层设备,检测网络层分组首部,处理的是IP数据报。
- 交换机:链路层设备,检测链路层帧的首部,处理的是链路层数据帧。
- 二者均使用转发表:
- 路由器:利用路由算法(路由协议)计算(设置)转发表的转发映射关系,依据IP地址。
- 交换机:利用自学习、泛洪构建转发表,依据MAC地址。
可以参照下面的示意图来理解。
进一步的,可以把在网络中,尤其是局域网中,常用的一些网络设备,对其功能和局限性进行一个简单对比: