HCNA Routing&Switching之VLAN间路由
前文我们了解了二层交换技术vlan相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15091491.html;今天我们来聊一聊不同VLAN间通信相关话题;
我们知道vlan主要解决了交换机的广播域问题,在大型网络环境中,vlan可以隔离广播域,虽然解决了广播风暴带来的问题,但同时也引入了一个新的问题;不同vlan间该如何通信呢?在现网中,一般情况都是一个vlan对应一个网络,要想实现不同vlan间通信,其实就是不同网段该如何通信;我们知道不同网段要想通讯就必须借助三层路由设备来实现数据包转发,从而实现不同网段间通讯;
提示:每个 VLAN 都是一个独立的广播域,不同的 VLAN 之间二层就已经隔离,因此属于不同 VLAN 的节点之间是无法直接互访的。
解决vlan间通讯的方法:传统增加路由器来实现数据包转发
提示:以上架构是传统的方式,通过二层交换机划分不同的vlan,每一个vlan使用一条独占的物理链路连接至路由器;
实验:如下拓扑,实现主机A,主机B互通
SW1的配置
sys sys SW1 vlan batch 10 20 int eth0/0/1 port link-type access port default vlan 10 int eth0/0/2 port link-type access port default vlan 20 int eth0/0/3 port link-type access port default vlan 10 int eth0/0/4 port link-type access port default vlan 20
验证:查看sw1的vlan信息
验证:查看sw1的接口vlan信息
R1的配置
sys sys R1 int g0/0/1 ip add 192.168.10.254 24 int g0/0/0 ip add 192.168.20.254 24
验证:查看R1的路由,看看是否有直连路由生成
pc1的配置
pc2的配置
验证:用pc1 ping pc2 看看是否能够互通?
提示:可以看到pc1能够正常ping通pc2;这样就实现了vlan10 里的主机和vlan20里的主机通讯;这种传统的方式有一个缺点就是占用路由器的接口;我们知道路由的接口对于我们来说是相当宝贵的,如果我们有100个vlan,这种方式很显然就不能实现;于是为了解决占用路由器接口的问题,单臂路由就由此产生;
单臂路由
什么是单臂路由呢?单臂路由从字面我们可以理解交换机连接路由器就只有一条链路,路由器通过子接口的方式配置不同的ip地址信息,并将对应的子接口划分到不同的vlan里,从而实现一条链路上允许多个子接口的流量通过,从而减少占用路由器的端口问题;
提示:我们可以将二层交换链接路由器的接口设置为trunk,允许对应的vlan通过;而对于路由来说,我们可以将不同的子接口划分到不同的vlan里,从而实现二层交换机trunk发送的数据,到对应子接口可以解除vlan标签,从而实现路由器能够识别对应的数据包,从而根据路由信息来转发数据;
实验:如下拓扑,实现主机A,主机B互通
sw1的配置
sys sys sw1 vlan batch 10 20 int eth0/0/1 p l a p d v 10 int eth0/0/2 p l a p d v 20 int g0/0/1 p l t p t a v 10 20
验证:查看sw1的vlan信息
验证:查看sw1的接口vlan信息
R1的配置
sys sys R1 int g0/0/0.10 dot1q termination vid 10 ip add 192.168.10.254 24 arp broadcast enable int g0/0/0.20 dot1q termination vid 20 ip add 192.168.20.254 24 arp broadcast enable
验证:查看R1的子接口是否都起来了?
提示:在路由器上新建子接口,其作用就是用来将对应的vlan标签解除/打上vlan标签,从而实现能够和二层交换机的trunk接口正常通讯;所以我们必须要先改子接口vlan封装,然后在配置ip地址和开启arp 广播,如果不配置vlan封装,只是在子接口配置上ip地址,对应子接口是无法正常up的;
验证:用pc1 ping pc2看看是否可以ping通?
提示:可以看到pc1能够正常ping通pc2;
验证:我们在R1的g0/0/0接口抓包看看,看看对应vlan标签的变化
提示:可以看到在R1的g0/0/0接口上能够抓到很多icmp的包,其原因是,pc1pingpc2的icmp请求包和回复包都会走g0/0/0接口;从上面的截图可以看到当pc1发送icmp请求包时,首先R1会收到一个带有vlan 10 标签的数据包,然后经过R1的子接口处理以后,对应数据包的vlan标签又会变为20(原因是通过R1的路由以后,发现去往192.168.20.2网络的数据包,会从g0/0/0接口发送出去,所以R1的g0/0/0.20这个子接口收到g0/0/0.10子接口的数据是没有标签的,经过g0/0/0.20子接口处理以后,对应数据包会被打上vlan20的标签);对应pc2回包也是一样,路由器会先收到一个vlan20的标签数据包,经过对应子接口处理以后,再从另一个子接口发送出来,会被打上vlan10的标签;
通过上述的实验,可以看到我们使用一条物理链路就可以实现多个vlan间的主机通讯,同时也没有浪费路由器的接口,感觉完美的解决了不同vlan间通讯的问题;这种单臂路由的架构看起来好像很完美,但也有不足;上面是一个简单的模拟,在现实生活中,路由器往往作为一个企业的出口设备,下面有很多交换机,如果单纯的vlan间通讯,所有的数据包都要走路由器过,很显然这样组网方式不妥;那还有什么方式实现不同vlan间通讯吗?有的,三层交换机,完美解决上述问题;
什么是三层交换机呢?所谓三层交换机就是指支持三层功能的交换机,简单讲就是支持路由的交换机,它既有二层功能,也有三层功能;
提示:三层交换机通过vlanif虚拟接口配置对应的ip地址信息就能实现不同vlan间路由;这里要注意一点,vlanif后面的编号就是对应vlan的编号;
实验:如下拓扑,实现主机A,主机B互通
sw1的配置
sys sys sw1 vlan batch 10 20 int g0/0/1 p l a p d v 10 int g0/0/2 p l a p d v 20 int vlanif 10 ip add 192.168.10.254 24 int vlanif 20 ip add 192.168.20.254 24
提示:vlanif是三层交换机的虚拟接口,它可以配置ip地址;其后面的编号就是对应的vlan编号;
验证:查看sw1的虚拟接口是否都起来了?
提示:vlanif接口的创建前提是对应vlan存在才可正常创建,否则创建不了;
验证:查看sw1上的路由
提示:可以看到sw1上也有路由表,对应去往不同的网段,出接口都是对应vlan的虚拟接口;
验证:pc1 ping pc2看看是否可正常ping通?
提示:可以看到pc1能够ping通pc2;从上面的实验可以看到,使用三层交换机可以实现不同vlan间的通讯;它既支持三层路由的功能,也支持二层交换的功能;同时也解决了单臂路由的问题(所有流量都要走路由器过),现网中比较推荐使用三层交换机实现vlan间路由;
原文地址:https://www.cnblogs.com/qiuhom-1874/p/15110336.html
- 部署Zipkin分布式性能追踪日志系统的操作记录
- 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(4)显示记录
- Android 2.x中使用actionbar - Actionbarsherlock (2)
- python读txt和xml
- 让Jexus支持高并发请求的优化技巧
- 数据压缩算法LZO (C#)
- Html之初体验
- 基于Wolfpack开发业务监控系统
- Android 2.x中使用actionbar - Actionbarsherlock
- Python-操作Memcache、Redis、RabbitMQ、
- 推荐[搜索引擎架构]的几篇文章
- 中小型商城系统中的分类/产品属性/扩展属性的数据库设计
- Linux下FTP虚拟账号环境部署总结
- Replace方法与正则表达式的性能比较
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 搭建 SkyWalking 服务(For ElasticSearch 7)
- 基于 SkyWalking 实现服务链路追踪
- Python 技巧篇-字符串灵活处理:字符串过滤、字符串拼接,字符串切片,特殊、超长字符串的处理实例演示
- Python 技巧篇-开头注释怎么写最好,开头注释需要包含什么,开头注释的重要性
- 在CentOS8下安装Python3和ansible
- 开发一个属于自己的Spring Boot Starter
- 如何让Tomcat使用APR连接器
- VueJS中使用前端虚拟接口Mock.js
- CentOS7下源码安装MySQL 8.x
- 最新!中国天气网api接口调用,key获取方式,数据请求秘钥获取,城市id获取方法
- Jmeter接口压测快速入门
- 超简单!Qt Designer插入图片,styleSheet加入图片,Qt加入背景图片
- 关于领域模型转换的那些事儿
- Windows图标显示异常解决方法。桌面图标异常,开始菜单图标异常,任务栏图标异常。图标缓存位置。
- Python基本语法与数字类型