一、介绍(被三层交换机淘汰了)
解决的问题
1)VLAN控制广播域
2)不同的VLAN之间无法通信csd
3)1个VLAN = 1个网段
如:
vlan10 -- IT -- 10.1.1.0/24
vlan20 -- IT -- 20.1.1.0/24
4)不同的VLAN之间通信通过路由来实现
路由器的作用:就是连接不同网段,让不同网段能够通信,也能让不同的VLAN之间通信,实现方式将路由器当中转站。
单臂路由:通过一根网线设置分叉很多条,让不同的VLAN之间可以通信,但是广播还是被限制的这个不用担心,单臂路由只会转发单播,不会转发广播。
如下图:下面的两台PC是不能互相通信,可以使用:ping 目标地址 # 测试网络连通性
缺点:
1)容易出现网络瓶颈
原因:随着一个公司的员工越来越多,PC也会越来越多,这些PC通信都是通过一条网线都达路由器,数量一多就会出现员工上网卡,访问网页之类的有点慢之类的问题,虽然现在的网线技术发展越来越好,百兆、千兆、万兆,但是数据量一多万兆也挺不住,示意图如下:。(上千人的情况,人数少的话影响不大)
2)容易发生单点物理故障
原因:所有的子接口依赖于总物理接口,比如下面局域网,当交换机的Fa0/5或路由器的Fa0/0,被手动关闭或者坏了,那这个局域网就瘫痪了,整个公司都无法上网。
3)VLAN间通信的每个帧都进行路由,导致效率下降。
原因:路由器的工作原理:一个帧到达路由器之后,(1)路由器会识别dot1q 802.lq或其他标签,然后拿掉这个标签(2)然后检查帧的目标MAC地址是否是自己(3)检查帧的IP包的目标IP地址,然后和路由器的路由表进行匹配查看路由的目标端口,并拿掉帧头(因为现在的侦听中的目标MAC地址是路由器自己),准备发送出去(就是查看要把帧发到那个端口)(4)帧到达路由器目标端口后,发送ARP广播报文通过帧的目标IP地址请求目标MAC地址(5)获取到目标MAC地址后封装帧头,并将帧转发出去。
就这个过程每个帧都会经历,一个帧一般情况下最大MTU为1500字节,数据的净荷(payload)部分预留是1472字节,就发送一个几百兆(M)的文件可能都都几万个帧,路由器对每个帧都会进行路由,都要走上面的流程这效率就很低了。
二、单臂路由实现
目的:让上图的这VLAN10和20所属的两台PC能够通信
1)配置路由器
# 进入特权模式
conf t # 进入全局配置模式
int f0/0.1 # 为f0/0这个接口创建一个子接口0.1,虚拟接口
ip add 10.1.1.254 255.255.255.0 # 给路由器的f0/0.1子接口配置IP
no shut # 开启端口
exit # 退到上一级
int f0/0.2 # 为f0/0这个接口创建一个子接口0.2,虚拟接口
ip add 20.1.1.254 255.255.255.0 # 给路由器的f0/0.2 子接口配置IP
no shut # 开启端口
exit # 退到上一级
int f0/0 # 进入 f0/0 接口配置模式
no shut # 开启端口
注意:f0/0 这个物理接口没有配IP,他只是充当一个通道,把数据引到f0/0.1和f0/0.2虚拟的子接口上,其中f0/0.1 接口的IP是10.1.1.0网段的网关,f0/0.2 接口的IP是20.1.1.0网段的网关
2)出现的问题
现在如果就按照上面这种布局和路由器配置,图中的两台PC使用ping命令是不能ping通另一台PC的,因为PC向外发包的访问顺序如下:
- 首先判断目标IP地址与自己是否在同一网段。
- 如果同一网段,则直接发出去,而不找网关
- 如不在同一网段,则直接发包给网关 (一般路由器的IP地址就是网关)
trunk端口,在路由器上输入命令:
en # 进入特权模式
conf t # 进入全局配置模式
int f0/x # 进入要配置的接口
switchport trunk encapsulation dot1q/isl (常用dot1q 802.lq标签)# 这个端口如果作为trunk 需要封装成dot1q或isl (可选,模拟器不支持这命令)
switchport mode access/trunk (这里用trunk,要还原用access) # 设置端口为中继或接入端口
exit # 退到上一级
经过F0/3端口的帧都会被打上标签,用来区分这个帧是来自那个VLAN,打上标签之后数据继续往上走就会来到路由器的物理端口F0/0,路由器虽然是三层设备也有二层设备交换机的部分功能,但是它是不能设置trunk端口的也没有VLAN表,不能设置trunk端口那就得让路由器的端口能够识别标签,一个三层端口能识别一种标签,且只能识别一种标签,按照上图的情况就只能让虚拟的子接口f0/0.1和f0/0.2来负责识别标签的工作,f0/0.1 识别802.1q标签的10标签(vlan10),f0/0.2 识别802.1q标签的20标签(vlan20),路由器配置命令:
en # 进入特权模式
conf t # 进入全局配置模式
int f0/0.1 # 进入f0/0.1端口的配置模式
encapsulation dot1q 10 # 配置f0/0.1端口可以识别802.1q标签的10标签
exit # 退到上一级
int f0/0.2 # 进入f0/0.2端口的配置模式
encapsulation dot1q 20 # 配置f0/0.2端口可以识别802.1q标签的20标签
3)他们通信的详细过程:
(1)下图时假设PC是没有通信过,当10.1.1.1的PC1要与20.1.1.1的PC2通信,PC1就会封装数据帧(如下图),但是现在还不知道目标MAC地址,但是知道目标IP地址是10.1.1.254(因为10和20是不同网段,上面有讲,不是同一网段就会把数据发给网关),所以就会发送ARP广播请求获取目标MAC地址,报文的大概内容是:我是10.1.1.1,目标地址是AA,谁是10.1.1.254?把你的MAC地址告诉我,当这个报文(帧)到达F0/3会被加上标签10,路由器收到帧后,就会把标签去掉,后面在细讲。
完整帧结构
(2)路由器收到PC1的ARP广播报文后,就会单播响应PC1,报文大概内容是:我是10.1.1.254,我的MAC地址是CC(注意这个帧的源MAC是路由器自己CC,目标MAC地址是AA),最后PC1收到路由器的报文就知道了,我要的目标MAC地址是CC,就会把数据帧封装进帧头内,如下图:
(3)然后PC就会把帧发送给交换机进行转发,如下图。注意:交换机的MAC地址表,是当PC连接了交换机,然后PC1开机就会自动发包获取DHCP服务器获取IP(联网,连wifi之类的),交换机就自动学习包中的源MAC地址自动形成的,全是自动的。
(4)数据到达交换机之后,交换机就会读取帧的侦听的目标MAC地址,发现是要给CC的,帧就会给交换机的F0/3端口,但是F0/3端口之前已经被设置成了trunk端口,所以这个帧就会被拆分开来,添加标签,因为这个帧是从F0/1端口进入交换机的,之前这个端口被配置成VLAN10,所以帧被标记成10,然后帧会先到路由器的F0/0接口的然后f0/0.1这个虚拟的子接口,发送自己可以识别标签10,就会把标签拿掉再传给路由器如下图:
(5)帧刚进入路由器时,路由器会查看帧头的目标MAC地址,是不是发给自己的,不是丢弃,是,就拿掉帧头,数据就来到路由器的内部,如下图:
(6)然后到路由器工作的时候了,路由器先查看数据的目标IP地址有没有和自己的路由表匹配的,发现目标IP地址是20.1.1.1刚好和自己的路由表匹配上了,对应的接口是f0/0.2,然后数据就转给f0/0.2接口准备转发出去,f0/0.2接口被配置成了能识别VLAN20的接口,所以数据要转发出去前,f0/0.2接口会给数据加上标签20,然后再给数据封装帧头,源MAC地址是自己CC,目标MAC地址不知道,但是知道目标IP是20.1.1.1,就会发送ARP广播获取MAC地址,这个ARP报文要出f0/0.2接口时也会被加上标签20,然后发给交换机的F0/3端口,F0/3端口发现这个ARP报文的标签是20,就会向所有的VLAN20端口转发,这里只有F0/2是VLAN20端口,所以直接发给F0/2接口,F0/2接口在转给接口下的PC,PC收到广播就会单播应答,我是20.1.1.1,我的MAC地址是BB。如下图:
数据图要出路由器的F0/0的示意图
提取帧的目标IP地址跟自己的路由表比对,刚好匹配成功发现该目标IP地址的网段20.1.1.0对应的端口是F0/0.2,路由器就会把数据帧转发给F0/0.2端口,路由器就完成了对数据的路由,F0/0.2端口拿到数据帧之后自然就会把帧沿着网线往下传给交换机。
示意图:
数据帧到达交换机的F0/3之后,该端口知道这个帧是标签20,就会把标签拿掉还原数据帧,帧就到达交换机内部,通过标签20交换机也知道这个帧是来自VLAN20端口的数据。
数据帧进入交换机内部,示意图:
目标MAC地址与自己MAC地址表进行匹配,发现是找目标MAC地址为BB的设备对应的交换机接口是F0/2(交换机的MAC地址表在上图),这时交换机还会执行一个判断,判断这个帧和目标设备是否处于同一VLAN,不是就丢弃,是(上面讲了这个帧之前的标签是20,虽然被拿掉了交换机也知道了他是来自VLAN20,目标端口F0/2也是VLAN20所以匹配成功),转发数据帧就会从F0/2端口出去,发给BB,完成了通信 。
注意:路由器只转发单播数据,广播的不转发,简单理解就是路由器只转发目标IP是他自己的路由,即转发目标IP地址网关的帧。
三、实验让不同的VLAN之间可以通信
我这里先把PC和交换机配置好了,下面之间演示配置路由器让不同的VLAN之间可以通信
PC就配置一下IP、子网掩码和网关就行了
交换机的配置命令:(大致的配置思路:需要哪台PC加入那个VLAN就加交换机内,创建对应的VLAN,然后把连接该PC的交换机接口加入该VLAN)
en
conf t # 全局配置模式
ho sw1 # 设置交换机名称
vlan ? # 查看可选的ID
vlan id # 创建VLAN
name 名称 # 给VLAN起个名称,方便识别,可选
exit # 退出到上一级,回到全局配置模式
do show vlan brief # 查看VLAN表检查有没有配置成功 int fx/x # 进入需要配置的端口
switchport access vlan ID # 将端口加入到需要的VLAN内
exit # 退出到上一级,回到全局配置模式
将连接两台交换机之间的端口都设置为 trunk (中继端口/公共端口)
注意网线的两边端口都要配置,才能正常通信,不然数据无法到达另一台交换机
en # 进入特权模式
conf t # 进入全局配置模式
int f0/x # 进入要配置的接口
switchport trunk encapsulation dot1q/isl (常用dot1q 802.lq标签)# 这个端口如果作为trunk 需要封装成dot1q或isl (可选,模拟器不支持这命令)
switchport mode access/trunk (这里用trunk,要还原用access) # 设置端口为中继或接入端口配置trunk 简写:sw m t
exit # 退到上一级
将第一台交换机和路由器连接的端口Fa0/5设置为trunk端口
en # 进入特权模式
conf t # 全局配置模式
int fa0/5 # 进入需要配置的端口
switchport trunk encapsulation dot1q/isl (常用dot1q 802.lq标签)# 这个端口如果作为trunk 需要封装成dot1q或isl (可选,模拟器不支持这命令)
switchport mode access/trunk (这里用trunk,要还原用access) # 设置端口为中继或接入端口,配置trunk 简写:sw m t
配置路由器:
# 进入特权模式
conf t # 进入全局配置模式
int f0/0.1 # 为f0/0这个接口创建一个子接口0.1,虚拟接口
encapsulation dot1q 10 # 配置f0/0.1端口可以识别802.1q标签的10标签
ip add 10.1.1.254 255.255.255.0 # 给路由器的f0/0.1子接口配置IP
no shut # 开启端口
exit # 退到上一级
int f0/0.2 # 为f0/0这个接口创建一个子接口0.2,虚拟接口
encapsulation dot1q 20 # 配置f0/0.2端口可以识别802.1q标签的20标签
ip add 20.1.1.254 255.255.255.0 # 给路由器的f0/0.2 子接口配置IP
no shut # 开启端口
exit # 退到上一级
int f0/0 # 进入 f0/0 接口配置模式
no shut # 开启端口
这样就能通过单臂路由技术,让不同VLAN之间进行通信了,单臂是指路由器的Fa0/0这个端口。
注意:现在单臂路由的方式已经被淘汰了,已经有了更好的方法,不过还是可以用的。
面试题
有种对现实没有意义的面试题如下:
如何在不加路由器、网线与不能把设置trunk端口的前提下让这两台PC进行通信?
答案: