一.交换机概述:
交换机是一种工作在二层的设备,但是随着技术的不断进步,现在已经出现了诸如三层交换机,多层交换机产品。在本篇中讨论的是二层交换机的一些特性。
二.交换机的功能:
1. 地址学习
有些地方也叫做基于源MAC地址学习,这个功能主要就是学习和存储MAC地址。
2. 帧的转发/过滤
数据帧的转发主要是交换机能够根据MAC地址表来转发数据,过滤则是对一些受限制的数据进行阻止或丢弃。
3. 环路避免
由于交换机的某些特性会带来一些问题,比如形成环路,因此为了保证网络上数据的正确传输以及网络的稳定要采取一些措施来避免这些问题,主要是通过STP来实现,稍后会讲到。
三.交换机的工作过程:
交换机在运行的时候要维护几张表,比如CAM表,vlan.data表。CAM表用来保存学到的MAC地址;VLAN.DATA文件用来保存VLAN相关的信息。
1.在交换机初始加电的时候它的MAC地址表是空的,当其他与其相连的设备(PC,交换机,路由器等)向它发送一个信息的时候,交换机就会根据数据的源MAC和目标MAC对数据进行处理,因为发的是第一个包,所以这时候交换机会把源MAC地址和数据从本交换机进来的端口号做关联,然后加上VLAN号保存起来形成一个CAM表条目。因为交换机的MAC地址表现在是空的,所以它不知道数据的目的地在那里,这时候交换机会发送ARP请求把数据从除了数据进来的端口之外的所有端口广播,这个过程称为泛洪,当目标主机收到数据之后会返回一个回应包,告诉交换机自己的MAC地址,这时候交换机又会根据目标主机返回的包把目标主机的MAC地址和进来的端口关联起来加上VLAN号形成一个新的CAM表条目。这个过程就是地址学习。我们通过下面的图来详细了解一下。
现在PC1和PC2要进行通信(比如一个PING包),PC1会发出一个数据包格式大致如下:
源MAC | 目标MAC | 源IP | 目标IP |
1111 | 2222 | 192.168.1.1 | 192.168.1.2 |
当数据从PC1出来到了SW1之后,交换机就会查看目标MAC,如果源MAC:1111不在CAM表中,这时候交换机会做一条记录,他会把源MAC和端口对应关系加上VLAN号保存到CAM表中,如:
MAC地址 | 端口号 | Vlan号 |
1111.1111.1111 | F0/1 | 1 |
然后他会看目标MAC,因为此时交换机也没不知道2222怎么走,所以它会向除了从F0/1数据进来的端口之外的F0/2,F0/3转发ARP请求,大致就是询问192.168.1.2的MAC地址是多少。发送之后PC2,PC3都会受到数据包,PC3把包拆开发现不是自己的IP地址,就会把数据丢弃,而PC2收到数据之后发现目标IP是自己,这时候PC2就回发送一个回应。告诉交换机“我是192.168.1.2我的MAC地址是2222。交换机收到回应又会在CAM表中添加一条对应关系。
MAC地址 | 端口号 | Vlan |
2222.2222.2222 | F0/2 | 1 |
这个过程之后SW1已经学习到俩个MAC地址了,如果PC1或者PC2要和PC3通信的时候会重复上述步骤,SW1就能学到PC3的MAC地址。
但是有一点要注意,就是如果PC1和PC2的位置改变,F0/1联接PC2,F0/2联接PC1,这个时候经过一次数据通信和地址学习的过程之后,端口F0/1对应的MAC地址就会变成2222.2222.2222。F0/2对应的MAC地址就会变成1111.1111.1111。这是因为交换机总是以最后学到的MAC地址为准的。
2.当交换机学习到直连的本网段内所有的MAC地址之后,如果再有数据包过来,交换机就会根据CAM表里面的对应条目对数据进行处理,还是上面那个图。PC1要和PC2通信,当数据包进过SW1的时候交换机首先看源和目标MAC地址,然后查看CAM表,因为CAM表里面已经有对应关系PC2的MAC地址2222对应端口F0/2所以直接把数据从F0/2发出去而不用再发到PC3。这就是交换机的数据转发,如果发送方和接收方不在同一网段,或者在不同VLAN,或者在交换机上作了二层ACL,则数据将被过滤掉。
交换机的转发有三种方式:
直接转发
存储转发
片段转发
其中直接转发不对数据进行校验,直接把数据从相应端口发送出去。这样容易造成很多无用的数据帧碎片(残帧,坏帧,错误帧等)。
存储转发则是先存储整个数据帧,然后对其进行校验,校验无误后再转发出去。虽然这样做减少了错误帧的问题,但是对每个帧进行整体存储校验这样会占用很多系统资源。
片段转发则综合了直接转发和存储转发的优点,它只检查数据帧的前64个字节,校验通过则进行转发,这样即保证了数据的正确性又能使数据得到比较快速的转发。
当然对于应用环境的不同,上述三种转发方式各有其特点。
3.由于交换机的地址学习和转发功能,会带来一些潜在的问题,如下图所示,PC1要和PC2通信,我们来分析一下数据的流向:
这里会出现俩种情况:
一.当SW1的F0/2收到数据的时候,首先添加一条MAC地址对应关系,地址1111.1111.1111从F0/2学到,然后查看CAM表发现MAC地址2222.2222.2222不在他的CAM表里,这时他会向除了F0/2之外的所有端口转发,于是数据从F0/1转发出去,这里有会有两种情况:
a.PC2正确收到数据,返回一个数据包。
b.SW2收到数据,首先添加一条MAC地址对应关系,地址1111.1111.1111从F1/1学到。然后查看CAM表,发现没有对应的MAC地址则会从除F1/1之外的所有端口即F1/2转发出去,又回到SW1然后就这样一直在SW1和SW2之间传递。形成广播风暴。
二.当SW2的F1/2收到数据的时候,第一步添加一条MAC地址条目,1111.1111.1111从F1/2学到,这时候由于上面一种情况1111.1111.1111是由F1/1学到,这时候会把CAM表里面的对应关系改掉,然后发现MAC地址2222.2222.2222不在他的CAM表里,SW2同样会从F1/1将数据转发出去,这时候也有两种情况:
a.PC2收到数据包,这时候由于之前已经收到一个数据包,此时再受到一个包,这样就出现了重复帧的问题。
b.SW1收到数据包,他会发现MAC地址1111.1111.1111是由F0/1学到的,同样改写自己的CAM表,这样反反复复,CAM表会一直不停的改,造成MAC地址不稳定。
由上可知当存在多链路或者多设备在交换机之间形成环的时候会带来三个问题,即广播风暴、重复帧、MAC地址不稳定。这三个问题的出现是很危险的,因此我们要想办法避免它,通过STP(生成树协议)交换机就可以避免环路。
他的工作过程如下图:
之所以会出现那三种情况是由于在交换机之间形成了一个逻辑的环,如果能打破这个环那么上述三种情况就不会出现了。STP就是基于这个思想在逻辑上把某个端口阻塞掉,如上图把SW2的F1/1端口阻塞掉,这样在SW2上F1/2过来的数据就不会从F1/1转发出去,想从F1/1进来的数据也会被挡在外面进不来。这里介绍的是多链路的情况,如果是多设备的情况也是通过逻辑上阻塞掉某个端口来实现的,使得整个拓扑看上去像棵树一样,树是没有环路的。
这里给大家简单介绍了一些基于MAC地址的二层交换机的工作过程和原理,希望大家看了之后对二层交换机的工作机制有所了解,希望这篇文章能给大家有所收获。
本文出自 “LBD” 博客,请务必保留此出处http://bdliu.blog.51cto.com/2014078/1431695
原文地址:http://bdliu.blog.51cto.com/2014078/1431695