通常教程第一课都讲交换机/路由器的操做系统(IOS)的基本操做,例如介绍普通模式、特权模式,修改密码等。
咱们反其道而行之,先动手作VLAN的划分操做,先讲实操,再说概念。安全
实验需求:实验的拓扑如上图,PC一、PC二、PC三、PC4链接同一台交换机,PC一、PC3的人属于同一个部门(如销售部),PC二、PC4的人属于同一个部门(财务部),因为安全要求,但愿销售部的员工之间能够互访,财务部的员工之间能够互访,可是跨部门员工之间不能互访。bash
配置命令:网络
先经过拖动的方式,拖动一台交换机,4台PC,而且经过自动连线的方式链接PC与交换机。ide
而后经过选择设置,显示端口标签,方便查看PC与交换机的链接端口。spa
点击交换机,选择CLI标签,能够输入命令,命令以下。操作系统
Switch>en Switch#conf t Switch(config)#vlan 10 Switch(config-vlan)name xiaoshou Switch(config-vlan)vlan 20 Switch(config-vlan)name caiwu Switch(config-vlan)do show vlan brief
#enable,进入普通模式,能够输入en缩写按回车,也能够按tab键补全,在按回车输入。翻译
#configure terminal进入特权模式,tab同上。orm
#vlan ID,建立vlan,而且用name更名。暂时不用理解,先死记硬背。blog
#show vlan brief ,能够查看vlan状况,若是在特权模式及之后的模式,要在前面加do。返回上一级用exit教程
每一个vlan就是一个子网,每一个子网就是一个网段!
每一个vlan就是一个子网,每一个子网就是一个网段!
每一个vlan就是一个子网,每一个子网就是一个网段!
**重要的事情说三遍!!!**后面说到不一样vlan、不一样子网、不一样网段,说的都是同一个事情。
查看结果,能够看到此时vlan 10与20后面都没有端口,全部端口都仍是在vlan1下面。
Switch(config-vlan)int fa0/1 Switch(config-if)sw mo access Switch(config-if)sw access vlan 10
#interface fastethernet,进入接口模式,0/1为对应的接口号,PC1接的交换机fa0/1端口。
#switchport mode access,将端口设置access模式。
#switchport access allow vlan,将端口划入某个VLAN。
#所以,按照需求,咱们须要将PC一、3划入vlan 10,PC二、4划入vlan 20。
Switch(config-vlan)int fa0/2 Switch(config-if)sw mo access Switch(config-if)sw access vlan 20 Switchconfig-if)int fa0/3 Switch(config-if)sw mo access Switch(config-if)sw access vlan 10 Switchconfig-if)int fa0/4 Switch(config-if)sw mo access Switch(config-if)sw access vlan 20
点击PC一、二、三、4,分别进入“Destkop->IP Configuration”,按照拓扑图要求配置。
配置完毕,选择PC1,选择“Command Prompt”,而后ping PC二、三、4的IP地址。
结果发现PC1没法ping通PC二、PC4,能够ping通PC3。
理论解释
VLAN是为了划分网段的,不一样的网段会有不一样的VLAN ID,同一个子网(注意仍是刚才说了三遍的,这里暂时能够认为VLAN、网段、子网都是一个东西的三种叫法)能够在二层(同一个子网)内直接通讯,不一样子网是不能直接通讯的(因此ping不通),不一样子网的通讯,是要通过网关,而后网关查找路由后才能通讯的。
日常听到的二层内通讯,三层通讯,说的就是上面这个内容。若是同一个子网内通讯,就是二层内通讯。而若是要跨子网通讯(即实现PC1能够与PC2\4通讯),须要配置网关与路由,不然是没法通讯的
那么vlan的原理是什么呢?其实就是数据包通过交换机的端口入/出站的时候,交换机会根据端口的配置,给数据包打上标签。例如从fa0/1过来的数据包就加上vlan10的标签,而fa0/二、f0/4这样的端口,配置了vlan20,那么收到带vlan10的标签的包,直接就丢弃了,不会再转发出去。
上面实验是工做在1台交换机的,那么若是变为两台交换机,怎么作呢?
先修改上面的拓扑为以下拓扑,而且交换机之间添加链接线(交换机之间是交叉线):
类比实验1,交换机2也应该建立VLAN 10,20,以及将PC三、PC4链接交换机2的端口(fa0/1,fa0/2)划入对应的vlan。
Switch>en Switch#conf t Switch(config)#vlan 10 Switch(config-vlan)name xiaoshou Switch(config-vlan)vlan 20 Switch(config-vlan)name caiwu Switch(config-vlan)do show vlan brief Switch(config-vlan)int fa0/1 Switch(config-vlan)sw mo access Switch(config-vlan)sw access vlan 10 Switch(config-vlan)int fa0/2 Switch(config-vlan)sw mo access Switch(coinnfig-vlan)sw access vlan 20
可是按照上面讲述,每一个端口只能access划入1个vlan,而且只能接收与发送带这个vlan标签的数据包,那么2台交换机之间的中间连线的端口fa0/24,不管划入哪一个vlan,都无可避免的没法传输另一个vlan的包,怎么实现PC1能够ping通PC3呢。
这里就要引入switchport的trunk模式,trunk模式通常用于交换机之间的互联口,或者上行的端口(链接更上一层的交换机/路由器)。将端口划入trunk模式,就能够设置能够容许在这条链路传输的vlan标签,而后让不一样vlan的包同时经过这条链路传输。(注意只是带不一样vlan标签的包共用这条链路传输,vlan间仍是不能通讯。)
两台交换机都配置:
Switch(config)#int fa0/24 Switch(config-if)sw mo trunk Switch(config-vlan)sw trunk allow vlan 10,20
#packet tracer能够直接sw mo trunk,真实生产须要加sw encapsulation dot1q,才能设置模式为trunk
#allow vlan all,能够容许全部vlan ID,也能够只容许某些vlan ID。
结果验证
PC1 ping PC二、PC三、PC4。
实验结果PC1能够ping通PC3,不能ping PC2\4。
理论解释(选修)
须要补充解释一下二层通讯。(能够参考阅读前面《【理论研究】漫谈传统IT基础设施06-网络(下)》的最底下的两个图)
PC1发送一个数据包,会根据包里面的源IP地址与目的IP地址进行计算,判断是否在同一个子网。(根据IP地址与子网掩码进行与运算,而后算出的结果看看是否相等,相等就是同一个子网,不等就是不一样子网)
A、当计算结果相等,那么就认为是二层子网内的通讯,这个时候会作以下动做:
一、PC1发送ARP包给SW1,SW1在整个二层域里面泛洪发送ARP报文。(即向全部端口发送一个问目的IP地址对应什么MAC地址的询问包,等别人答复。)
二、每一个设备收到该ARP报文,会查询本身的IP地址是否就是询问的地址,不是,就忽略,是,就会将本身的MAC地址写进去回包。
三、各个二层域内的交换机收到回包转发,直接SW1收到,而后就知道了目的IP地址翻译成什么MAC地址了。
四、SW1拆掉三层的包头信息,而后查询本身的MAC地址表,看看去往目的MAC地址的数据帧应该从哪一个端口转发出去,而后将拆包后的二层帧发送往对应端口。
五、帧到达目的设备。
这里有一个概念叫广播风暴,就是二层域不易划分太大,由于每次二层域内的通讯,都会有一个泛洪整个二层域发送的ARP报文。若是每台设备,每次通讯都在泛洪,极可能整个网络的带宽都被这些泛洪的报文侵占了,会致使网络不可用。
另外二层网络很怕有环路(后面会介绍STP技术,就是为了自动阻断二层环路的)。
当存在环路,这些ARP报文就会不断在环路之间往返,以及不断的泛洪,最后致使网络带宽所有被占用,这里就暂时不展开说了。
B、当计算结果不相等,那么就认为是跨三层的通讯,这个时候会作以下动做:
一、PC1会将包的目的MAC地址改成网关的MAC地址,可是目的IP地址仍是保持原样。
二、交换机从物理层开始收到比特流,而后拆二层帧头,而后看到目的MAC地址是到网关的,而后查找MAC地址表,查找对应的MAC地址应该往哪一个端口转发,而后报帧往对应端口扔。
三、最后逐台交换机转发帧,到达三层网关(例如路由器),继续拆IP包头,而后看到目的IP地址是另一个网段的,查找路由表,而后找到目的IP地址网段应该往哪一个端口转发,而后把包扔出去。
四、同理,到达最后的路由器(目的IP地址网关所在),封IP包头,而后帧头修改,将源MAC地址改成目的网段的路由器MAC地址,而后经过二层帧来转发数据给目的PC。