【干货】思科第2层交换你还记得什么呢?


第2层交换
在思科,当人们讨论CCENT或者CCNA中的交换时,他们所指的都是第2层交换,除非谈论其他的内容。所谓第2层交换就是在LAN上使用设备的硬件地址对网络进行分段的过程。大家知道交换技术用来将大的冲突城分隔为小的冲突域,而所谓的冲突城,就是指使用两个或多个设备对网络进行分段所形成的可共享同-带宽的区域。由集线器所构成的网络就是构成这种冲突域的典型例子。但是,由于交换机上的每个端口实际上是它自己的冲突域,所以,只要用交换机将集线器进行简单地替换,就可以马上得到一个性能有很大提升的以太局城网。交换机从根本上改变了网络的设计及实现方式。如果能将一个纯粹的交换式设计正确地实施,那么我们就绝对会得到一个简洁、性价比高且易于灵活扩展的互联网络。对于因交换机之间存在冗余物理链路而在数据链路层上形成的环路,路由选择协议无能为力。这就是开发生成树协议的原因所在,它可以防止在第2层交换式网络中形成环路。
第2层交换出现之前
我们回忆下辻去,来看一下在交换机出现之间网络的的结构是怎祥的,并由此来理解为什么公司LAN需要借助交换机来实现分段。在LAN交换出现之前,典型的网络设计如图10-1 所示。

图10-1中的设计被称为折叠式骨干结构,这是因为所有的主机都只有连接到公司的骨千网才能获得所需的网络服务——LAN 和大型机都如此。再往前追溯一些,在能够使用路由器和集线器等设备进行物理分段(即如图i0-1所示的情况)的网络出现之前,那时的网络是大型机网络。其中包含大型机( IBM、Honeywell、Sperry、DEC,等等)、控制器和连接到控制器上的哑终端。所有的远程站点都是通过网桥连接到大型机上的。
此后,随着PC机的闪亮登台,大型机开始连接到安装有服务器的以太网或令牌环的Lan上。这些服务器通常运行的是OS/2或LNAManager,因为那时还没有NT.建筑物的每一层都用同轴电缆或双绞线连接到公司的骨干网络上,然后再连接到路由器。PC机上需要运行- -种可以连接到大型机服务的仿真软件程序,这样就可以同时使用来自大型机和LAN的服务。最后,随着PC机的性能不断增
强,应用程序的开发者为它开发了比以往任何时候都更为有效的应用,这极大地降低了网络连接的成本,促进了商业应用的高速增长。
20世纪80年代后期和90年代初期,当Novell开始更为流行时,OS/2 和LAN Manager服务器逐步被NetWare服务器取代。由于Novell 3.x服务器是基于客户端/服务器软件来进行通信的,这使以太网的应用变得更加普遍。
这就是图10-1中所示的网络产生和形成的过程。在这里只有一个问题,随着公司骨千网络的不断增长,网络服务变得更加缓慢。导致这状况的主要原因是,在巨大的业务量爆发性增长的同时, LAN服务也需要成倍地加快,网络因此变得完全饱和。所有的人都想扔掉Mac和连接大型机服务的哑终端,大家更喜爱灵活的新型PC机,因为PC机让他们更容易连接到公司的骨千网络和网络服务上。
而所有这一切都发生在因特网极为盛行之前, 公司中的每个人都需要访问公司提供的服务。为什么?因为那时没有因特网,所有的网络服务都是内部的,为公司网络所专用。这就产生了对这个巨大而慢速的网络进行分段的强烈需求,特别是那些使用行动迟缓的老式路由器连接起来的网络。刚开始,思科开发了高速的路由器(这无疑也是有意义的),但真正的需求是对网络进行更多的分段,特别是在以太式局域网上。快速以太网的出现也是一件令人欣慰的事情,它产生了一定作用,但也没能从根本上解决网络分段的需求问题。
而网桥却可以满足这样的需求,于是它们被首先用于网络中冲突域的分隔上。网桥的端口数量非常有限,它们所能够提供的其他网络服务也同样有限,于是,第2层交换机现身救场。就如同网桥一样,通过在每个端口上提供分隔的冲突域,交换机从根本上解决了问题,不同的是,交换机可以提供几百个端口!图10-2中给出了这种早期的交换式局域网。

每台集线器都被连接到一个交换机端口上,这一变革极大地提升了网络的性能。这样,每个建筑物不再被强压人同一个冲突域中,每个集线器都拥有了独立的属于自身的冲突域。但是仍需面对的一个问题是,由于交换机端口在当时是一个新生事物,所以它的价格异常昂贵。正是由于这个原因,在建筑物的每一层简 单地添加交换机的设想并未实现,至少目前还未实现。随着技术的变革,交换机的价格终于降了下来,因此,就目前而言,将每个用户都连接到交换机的端口上是-个非常好而且可行的思路。因此,如果你正在准备设计一个网络并将它实现,那么,必须在网络中包含交换式服务。当前典型的简单网络设计应该如图10-3中所示——一个完整的交换式网络设计和实现。

你发现:“这里还保留了一台路由器?”是的,你没看错,这里确实是有一台路由器。但这台路由器的功能已经发生了改变,它是用于完成逻辑分段的,它创建并管理逻辑和物理分段。
交换式服务
与网桥使用软件来创建和管理过滤表不同,交换机使用专用的集成电路( ASIC )来创建并维护其过滤表。但是将第2层交换机理解为多端口网桥仍是可以的,这是因为将它们使用在网络中的基本目的是一样的一用于分隔冲突域。
第2层的交换机和网桥在工作时要比路由器快许多,因为它们不会花费时间去查看网络层头部的信息。它们只是在决定转发、泛洪或是丢弃数据帧之前查看帧的硬件地址。
与集线器不同,交换机能够创建私有的、专用的冲突域,并且能够在每个端口上提供独立的带宽。
第2层交换可以提供下列功能:
基于硬件的桥接( ASIC );
线速( wire speed );
低延迟;
低成本。
第2层交换之所以能够这样高效,是因为它没有对数据包进行任何修改。设备只是读取数据包的帧封装,与路由选择的过程相比,交换过程就显得相当快捷,而且不容易出错。
如果将第2层交换同时用于连接工作组和网络分段(即分隔冲突域),那么,与传统的使用路由分隔的网络相比,这-方案可以创建更多网络分段。
此外,第2层交换还可为每个用户增加可用的网络带宽,这也是因为连接到交换机的每个连接(接口)都拥有自己的冲突域。
第2层交换的局限性
由于通常都会将第2层交换归类为桥接网络,所以我们一般会认为,它会与桥接网络具有相同的难题和问题。需要记住的是,如果网络设计得当,网桥也能充分发挥其特性,有助于网络的正常运转,但是要做到这一点就必须将它们的特性和局限牢记于心。要使用网桥来完成一个好的设计,就需要认真考虑下面的两个最重要的方面:
必须保证绝对正确地分隔冲突域;
创建可实用桥接网络的正确方法是,确保网络中的用户会将80%的时间用于本地网段内的传输。
桥接网络能够将冲突域进行分隔,但是需要记住的是,这样的网络仍然处在一个大的广播域之中。默认情况下,第2层的交换机和网桥都不能对广播域进行分隔一这一问题不仅限制了网络的规模,而且还限制了网络的增长潜力,同时它还会导致网络整体性能的下降。
随着网络的增长,广播、组播以及生成树的慢会聚,都会让你感到十分恼火。这些也正是第2层的交换机和网桥不能在互联网络中完全取代路由器(第3层设备)的主要原因。
桥接与局域网交换的比较
第2层交换机只是拥有更多端口的网桥,这千真万确,但是对于它们之间的一些重要不同点还是必须始终牢记的:
网桥是基于软件的,而交换机则是基于硬件的,交换机使用ASIC芯片来帮助它们完成过滤决策;
交换机可以被视为多端口网桥;
每个网桥只有一个生成树实例,而交换机则可以有多个(我们稍后就会讨论到生成树);
大多数的交换机要比网桥的端口数量多很多;
网桥和交换机都将泛洪第2层广播;
通过检查每个接收到的数据帧的源地址,网桥和交换机完成了对MAC地址的学习;
网桥和交换机都基于第2层地址完成转发决策。
第2层上的3种交换功能
第2层上的交换有3种不同的功能(必须牢记! ):地址学习、转发/过滤决策和环路避免。
地址学习 第2层的交换机和网桥能够记住在某个接口上所收到的每个帧的源硬件地址,而且它们还会将这个信息输人到被称为转发/过滤表的MAC数据库中。
转发/过滤决策 当在某 个接口上收到一个数据帧时,交换机就会在MAC数据库中查看其目的方的硬件地址,并找到其输出接口。此数据帧只会被转发到相应的目的端口。
环路避免 如果为 了保证冗余而在交换机之间创建了多重连接,网络就可能产生环路。在提供冗余的同时,生成树协议( STP )还可以防止网络环路的产生。
01
地址学习
当交换机首次通电时,其MAC转发/过滤表是空的,如图10-4中所示。

当某个设备开始数据发送,而交换机的某个接口收到数据帧时,交换机会将数据帧携带的源地址放入MAC转发/过滤表中,同时让它记住此发送设备位于哪个接口上。然后,交换机不得不将这个帧通过每个可能的端口泛洪到网络中,因为交换机此时并不知道目的设备实际上位于何方。
如果某个设备回应了这个被泛洪的数据帧,并回送了一个应答帧,那么交换机就会从这个应答帧中取出源地址,并将此MAC地址放入它的数据库中,同时将此地址与接收帧的接口关联起来。由于交换机目前在其过滤表中同时有了两个相关的MAC地址,因此这两个设备目前就可以建立点到点连接了。这样交换机就不再需要像一开始那样对帧进行泛洪转发了,因为目前这些帧可以而且也只能在这两个设备之间进行转发。正是由于这样的操作,第2层交换机要比集线器在性能上优越许多。在使用集线器连接的网络中,所有的帧每次都会从所有的端口转发一而不管是否需要这样做! 图10-5给出了构建MAC数据库的操作过程。

从这个图可以看出交换机上连接有4台主机。当给交换机加电时,它的MAC地址转发/过滤表中没有任何内容,如图10-4所示。但当主机开始通信时,交换机就会将每个数据帧的源设备硬件地址以及与该地址相关联的端口一并放人地址表中。
下面将使用图10-5 来说明转发/过滤表的形成过程。
(1)主机A向主机B发送了一个数据帧。主机A的MAC地址是000.8c01.000A;主机B的MAC地址是0000.8c01.000B。
(2)交换机在E0/O接口上接收到这个数据帧,并将源地址放入MAC地址表中。
(3)由于目的地址不在MAC数据库中,就从所有接口上将此数据帧转发出去一除源接口之外。
(4)主机B接收到了数据帧,并响应主机A。交换机在接口E0/1上接收到了这个数据帧,并将源设备的硬件地址放人到MAC数据库中。
(5)主机A和主机B现在就可以建立点到点连接了,并且只有这两个设备会接收到这些数据帧。主机C和主机D无法看到这些数据帧,在地址数据库中也不会找到它们的MAC地址,因为它们还没有通过交换机发送过数据帧。如果主机A和主机B在特定的时间内没有再次通过交换机进行通信,交换机将从数据库中刷新它们的表项,从而尽可能保持最新内容。
02
转发/过滤决策
当交换机的接口接收到-一个数据帧时,交换机就将帧中携带的目的地址和转发/过滤MAC数据库中的地址进行比较。如果目的硬件地址是已知的,即已经被列入到数据库中,则该帧只被发送到正确的输出接口。交换机不会将此帧发送到除目的地接口之外的任何其他接口。这样就保留了其他网段上的可用带宽,这一方式被称为帧过滤。
但是,如果MAC数据库中没有列出目标方的硬件地址,那么此数据帧将会从除接收此帧接口之外的所有其他活动接口,上泛洪出去。如果某个设备响应了被泛洪的数据帧,则交换机就会用此设备的位置(接口)信息来更新MAC数据库。
如果某台主机或服务器在此局域网中发送了一个广播数据,则在默认情况下,交换机会从除源端口之外的所有活动端口.上将帧泛洪出去。记住,交换机用于创建更小的冲突域,但在默认情况下,它所连接的网络分段仍然是一个大的广播域。
在图10-6中,主机A发送一个数据帧给主机D。当交换机接收到来自主机A的数据帧时,它会如何处理?

由于主机A的MAC地址没有在转发/过滤表中,因此,交换机会将此源地址和端口添加到MAC地址表中,并将数据帧转发给主机D。如果此时主机D的MAC地址不在转发/过滤表中,那么交换机就会将数据帧泛洪到除了Fa0/3的所有端口上。
现在,来看一下命令show mac address-table的输出:

假定下面给出的MAC地址就是上面的交换机所接收到的帧MAC地址。
源MAC: 0005.dccb.d74b
目的MAC: 000a.f467 .9e8c
交换机将会如何处理这个帧呢?正确的答案应该是:显然在MAC地址表中将会找到目的MAC地址,数据帧只会从Fa0/3端口转发出去。记住:如果在转发/过滤表中没有找到目的方的MAC地址,交换机就会将此帧在所有的端口上进行转发,但接收帧的原始端口除外,从而借助这种方式来搜寻目的设备。现在我们已经学习了交换机的MAC地址表,以及交换机如何将主机的MAC地址添加到转发/过滤表中,接下来我们再来了解一下,应该如何保护交换机,阻止非授权用户的使用。
●端口安全
怎样才能防止不相关的人员将主机连接到你的交换机端口,上呢?以及更严重的情况,怎样才能防止这些人将集线器、交换机或无线接人点设备连接到他们办公室中的以太网插座上?注意在默认情况下,MAC地址只是动态地出现在MAC转发/过滤数据库中。因此可以通过使用端口安全来阻止上述连接行为。具体的操作方式如下:

由于所有思科最新系列交换机所配置的端口都处于可取模式(指当检测到其他交换机连接时,端口倾向于中继连接),因此我们首先必须将端口的模式从可取模式修改为接人端口,否则就无法进行端口的安全性配置。只有完成这一修改,我们才可以继续使用这里介绍的port-security命令。
从上面的输出可以清楚地看到,命令swi tchport port-security 有4个可用选项。我个人喜欢使用port-security命令,因为它可以让我轻松地管理使用网络的用户。通过使用swi tchport port-security mac- address mac address命令,可以将独立的MAC地址分配到交换机的每个端口上,但是,如果选择这一方式,首先需要保证的就是你必须要有充足的时间!
如果需要将交换机的端口设置为,每个端口只允许接人一台主机,并且当有人破坏这一规则时,端口就会关闭,那么,完成这样的配置可以使用下列命令:
Swi tch(config-if)#switchport port-security maximum 1
Swi tch(config-if)#switchport port-security violation shutdown
上面这些命令可能是网络管理中最流行的配置了,因为这样的配置可以有效防止随意用户接人他们办公室的交换机或接人点。将这个maximum设置为1 (这也应该是端口的默认安全配置),表明在那个端口上只能使用一个MAC地址;如果用户试图在那个网段上再添加另一台主机,交换机端口就会关闭。一且这种情况发生,只能在交换机上手工使用no shutdown 命令来恢复端口的启用。
sticky命令是我最喜欢的命令之一。它不光功能很炫,名字也很炫! mac-address命令后就是
Swi tch( config-i f)#swi tchport port-security mac-address sticky
Swi tch( config-if)#switchport port-security max imum 2
Swi tch( config-if)#switchport port-security violation shutdown
这个命令主要是为静态MAC地址提供安全保障,借助它就无需在网络配置中输人每个用户的MAC地址了。如我所说一它非常酷!
在上面的示例中,进人“stick” 端口的前两个地址被认定为静态地址,并且不管在aging命令中设置了多长时间,它们一直会是静态地址。为什么这里要将它设置为2呢?这是因为其中一个地址将用于PC机,而另一个用于电话机。
03
环路避免
在交换机之间配置冗余链路是一个不错的思路,因为一溃。这听起来很棒,尽管使用冗余链路对网络的可靠运行非常有帮助,可是使用冗余所引起的问题常常要比它们所能解决的问题还要多。这是因为网络传播的数据帧会在所有冗余链路上同时被泛洪开来,这会导致网络环路和其他严重的问题。下面给出的是冗余可能引发的一些严重问题。
如果没有采取任何环路避免措施,交换机会通过互联网络无止境地泛洪广播数据。有时将这现象称为广播风暴。(在大多数的情况下,我们还是将它视为一个不可接受的资源浪费! )图10-7 给出了这一广播通过互联网络进行无限传播的方式。注意观察,这里的数据帧是如何通过互联网络的物理网络介质不断被泛洪传播的。

设备可能会收到同一个数据帧的多个复制,这是由于这个数据帧可能会通过不同的网段在同一时间到达。图10-8给出了一组数据帧如何通过多个网段同时到达的情况。图中的服务器向路由器C发送了一个单播数据帧。由于它是一个单播数据帧,交换机A和交换机B都将转发这个帧。这样问题就出现了,因为这里的路由器C会将这个单播帧接收两次,这样就会在网络上形成额外的开销。
你也许想到了这种情况: MAC地址过滤表会完全被源设备所在的位置搞糊涂,因为交换机可以从不止一条链路上接收到这个数据帧。更糟糕的是,被搞糊涂的交换机可能会“抓狂”,它会不断用源硬件地址位置来更新MAC过滤表,以至于丧失对数据帧的转发能力。这就是所谓的MAC地址表不稳定。
可能发生的最糟糕的情况就是在整个互联网络中产生了多个环路。这将意味着,有些环路还可能会出现在其他环路中,如果还同时形成了广播风暴,网络就不能再转发任何数据帧了一对,就是这样!

所有这些问题都可以使用“灾难”(至少它们已经非常接近了)一词来形容,显然,我们应该避免这些极端恶劣的情况,如果避免不了至少也应该通过某种方式来修正。为此,我们引入了生成树协议。研发这一协议就是为了解决上面提到的各种问题。