对比如下三种方式实现Vlan之间通信的利与弊

VLAN之间通信

VLAN在分割广播域的同时也限制了不同VLAN间的主机进行二层通信

解决vlan间通信方法如下:
? 二层交换机+一台路由器实现vlan之间通信(多臂路由)
? 单臂路由的方式实现vlan之间通信
? 现网中实际运用vlanif逻辑接口来实现vlan之间通信

1.二层交换机+一台路由器实现vlan之间通信

因为不同VLAN之间的主机是无法实现二层通信的,所以必须通过三层路由才能将报文从一个VLAN转发到另外一个VLAN,在二层交换机上配置VLAN,每一个VLAN使用一条独占的物理链路连接到路由器的一个接口上,来实现vlan之间的通信

实战演练


交换机的配置

#
vlan batch 2 to 3
#
interface GigabitEthernet0/0/1
 port link-type trunk
 port trunk pvid vlan 2
 port trunk allow-pass vlan 2
#
interface GigabitEthernet0/0/2
 port link-type trunk
 port trunk pvid vlan 3
 port trunk allow-pass vlan 3
#
interface GigabitEthernet0/0/3
 port link-type access
 port default vlan 2
#
interface GigabitEthernet0/0/4
 port link-type access
 port default vlan 3
#

路由器的配置

#
interface GigabitEthernet0/0/0
 ip address 192.168.1.254 255.255.255.0
#
interface GigabitEthernet0/0/2
 ip address 192.168.2.254 255.255.255.0
#

连通性的检测

分析一下通信过程

PC1访问PC2的过程

PC1自身的SIP是192.168.1.1,访问目标是192.168.2.1,PC1会用自身的掩码和目标IP地址做一个与运算,发现访问的目标和自己不在同一个网段,自己是192.168.1.0/24网段,目标是192.168.2.0/24网段,于是PC1会把数据发往AR1的G0/0/2接口,因为G0/0/2接口的IP地址恰好是我的网关地址,当数据到达交换机的时候,交换机进来会打上PVID是3的tag数据帧,交换机此时做的是解封装和封装停留在二层这块,因为交换机并没有做三层路由功能,查找MAC地址表项后,交换机会从G0/0/1接口发送出去,会剥离tag进行发送,因为路由器一般情况是下是不识别vlan数据帧的。
当PC1的数据包到达AR1的G0/0/0接口后,由于DIP是192.168.2.0/24网段,刚好AR1这边有直连路由,于是AR1查找路由表,发现去往192.168.2.0/24从接口G0/0/2接口发送出去,交换机收到路由器的数据后
交换机会进行解封装和封装动作,交换机从G0/0/2接口收到的数据,会打上vlan 3的数据tag,然后查找MAC地址表项从G0/0/4接口发送出去,会剥离tag进行发送,此时PC2就可以收到该数据了

PC2访问PC1的过程

PC2自身的SIP是192.168.2.1,访问目标是192.168.1.1,PC1会用自身的掩码和目标IP地址做一个与运算,发现访问的目标和自己不在同一个网段,自己是192.168.2.0/24网段,目标是192.168.1.0/24网段,于是PC2会把数据发往AR1的G0/0/2接口,因为G0/0/2接口的IP地址恰好是我的网关地址,当数据到达交换机的时候,交换机进来会打上PVID是3的tag数据帧,交换机此时做的是解封装和封装停留在二层这块,因为交换机并没有做三层路由功能,查找MAC地址表项后,交换机会从G0/0/2接口发送出去,会剥离tag进行发送,因为路由器一般情况是下是不识别vlan数据帧的。
当PC2的数据包到达AR1的G0/0/2接口后,由于DIP是192.168.1.0/24网段,刚好AR1这边有直连路由,于是AR1查找路由表,发现去往192.168.1.0/24从接口G0/0/0接口发送出去,交换机收到路由器的数据后
交换机会进行解封装和封装动作,交换机从G0/0/1接口收到的数据,会打上vlan 2的数据tag,然后查找MAC地址表项从G0/0/3接口发送出去,会剥离tag进行发送,此时PC1就可以收到该数据了

不足点:

1.随着每个交换机上VLAN数量的增加,这样做必然需要大量的路由器接口,而路由器的接口数量是极其有限的。
2.某些VLAN之间的主机可能不需要频繁进行通信,如果这样配置的话,会导致路由器的接口利用率很低

2.单臂路由的方式实现vlan之间通信

将交换机和路由器之间的链路配置为Trunk链路,并且在路由器上创建子接口以支持VLAN路由,配置能够让路由器子接口识别vlan的tag数据
配置路由器子接口封装vlan 在路由器相应的子接口下配置下面两条命令

dot1q termination vid "几"

命令配置子接口对一层tag报文的终结功能,即配置该命令后路由器子接口在接收带有vlan tag 的报文时 将剥掉tag进行三层转发 在发送报文时 会将与该子接口对应vlan的vlan tag添加到报文中

ARP broadcast enable 

命令开启ARP广播的功能 如果不配置该命令 将会导致该子接口无法主动发送ARP广播报文,以及向外转发IP报文

实战演练


交换机的配置
S2的配置

vlan batch 10 20
#
interface Ethernet0/0/1
 port link-type access
 port default vlan 10
#
interface Ethernet0/0/2
 port link-type access
 port default vlan 20
#
interface GigabitEthernet0/0/2
 port link-type trunk
 port trunk allow-pass vlan 10 20
#
S3的配置
vlan batch 30
#
interface Ethernet0/0/1
 port link-type access
 port default vlan 30
#
interface GigabitEthernet0/0/2
 port link-type trunk
 port trunk allow-pass vlan 30
#

S1的配置

vlan batch 10 20 30
#
interface GigabitEthernet0/0/1
 port link-type trunk
 port trunk allow-pass vlan 10 20 30
#
interface GigabitEthernet0/0/2
 port link-type trunk
 port trunk allow-pass vlan 10 20
#
interface GigabitEthernet0/0/3
 port link-type trunk
 port trunk allow-pass vlan 30
#

路由器的配置

vlan batch 10 20 30
#
interface GigabitEthernet0/0/1.1
 dot1q termination vid 10
 ip address 192.168.1.254 255.255.255.0
 arp broadcast enable
#
interface GigabitEthernet0/0/1.2
 dot1q termination vid 20
 ip address 192.168.2.254 255.255.255.0
 arp broadcast enable
#
interface GigabitEthernet0/0/1.3
 dot1q termination vid 30
 ip address 192.168.3.254 255.255.255.0
 arp broadcast enable
#

结论:

分析一下通信过程

PC1访问PC2的过程

PC1自身的SIP是192.168.1.1,访问目标是192.168.2.1,PC1会用自身的掩码和目标IP地址做一个与运算,发现访问的目标和自己不在同一个网段,自己是192.168.1.0/24网段,目标是192.168.2.0/24网段,于是PC1会把数据发往AR1的G0/0/1.1接口,因为G0/0/1.1接口的IP地址恰好是我的网关地址,当数据到达交换机的时候,交换机进来会打上PVID是10的tag数据帧,交换机此时做的是解封装和封装停留在二层这块,因为交换机并没有做三层路由功能,查找MAC地址表项后,交换机会从G0/0/2接口发送出去,会保持tag进行发送,S1交换机收到tag为10的数据后,查找MAC地址表从G0/0/1接口发送出去,保持tag为10的标签进行发送,当这带有tag为10的数据到达AR1的G0/0/1.1接口后,由于该接口配置子接口对一层tag 10报文的终结功能,将剥掉tag 10进行三层转发 路由器查找路由表 发现从G0/0/1.2接口转发,在发送报文时 会将与该G0/0/1.2子接口对应vlan的vlan tag 20添加到报文中 并且由该子接口需要发送arp报文进行数据封装 所以 子接口需要支持主动发送arp报文的功能 所以需要在子接口上面配置该命令 ARP broadcast enable
当S1的数据包收到tag 20的数据后,会从G0/0/2接口发送出去,然后S2收到后,会从Eth0/0/2接口发送给PC2主机

PC2访问PC1的过程

PC2自身的SIP是192.168.2.1,访问目标是192.168.1.1,PC1会用自身的掩码和目标IP地址做一个与运算,发现访问的目标和自己不在同一个网段,自己是192.168.2.0/24网段,目标是192.168.1.0/24网段,于是PC1会把数据发往AR1的G0/0/1.2接口,因为G0/0/1.2接口的IP地址恰好是我的网关地址,当数据到达交换机的时候,交换机进来会打上PVID是20的tag数据帧,交换机此时做的是解封装和封装停留在二层这块,因为交换机并没有做三层路由功能,查找MAC地址表项后,交换机会从G0/0/2接口发送出去,会保持tag进行发送,S1交换机收到tag为20的数据后,查找MAC地址表从G0/0/1接口发送出去,保持tag为20的标签进行发送,当这带有tag为20的数据到达AR1的G0/0/1.2接口后,由于该接口配置子接口对一层tag 20报文的终结功能,将剥掉tag 20进行三层转发 路由器查找路由表 发现从G0/0/1.1接口转发,在发送报文时 会将与该G0/0/1.1子接口对应vlan的vlan tag 10添加到报文中 并且由该子接口需要发送arp报文进行数据封装 所以 子接口需要支持主动发送arp报文的功能 所以需要在子接口上面配置该命令 ARP broadcast enable
当S1的数据包收到tag 10的数据后,会从G0/0/2接口发送出去,然后S2收到后,会从Eth0/0/1接口发送给PC1主机

思考:如果在子接口下面配置DHCP SERVER功能

请问:还需要在子接口上面启用arp广播功能吗?

不足点:

1、 存在单点故障的可能性
2、 此场景需要一台路由器,成本相对较高

3.现网中运用vlanif逻辑接口来实现vlan之间通信

在三层交换机上配置VLANIF接口来实现VLAN间路由

什么是三层交换机

二层交换机和路由器在功能上的集成构成了三层交换机,三层交换机在功能上实现了VLAN的划分、VLAN内部的二层交换和VLAN间路由的功能

三层交换机的原理


就是二层交换机和路由器的结合体,但是会比这种方式更加高效
三层交换机里面有路由引擎和交换引擎
? 当三层交换机识别到主机发送的DMAC地址不是我自己的时候,就会交给交换引擎,从对应的接口转发出去
? 当三层交换机识别到主机发送的DMAC地址是我自己的时候,就会交给路由引擎处理,三层交换机就会进行路由 从对应的vlan发送出来
? 第一个数据包交给路由引擎处理(CPU处理的)然后会把信息交给交换引擎 同一个数据流的后面的报文不会交给路由引擎处理了 都会交给二层的芯片的转发(更快) 因为芯片转发更快 这些信息包括出接口 arp信息等 这就是一次路由 多次交换

VLANIF接口

华为中低端交换机接口几乎都是二层功能 二层接口不能配置IP地址 但三层交换机需要一个逻辑接口 就是vlanif接口(思科是SVI接口) 这个接口具有三层功能 只要有接口在这个vlan当中 那么 这个vlanif就是up状态
在三层交换机上配置VLANIF接口来实现VLAN间路由。如果网络上有多个VLAN,则需要给每个VLAN配置一个VLANIF接口,并给每个VLANIF接口配置一个IP地址。用户设置的缺省网关就是三层交换机中VLANIF接口的IP地址

实战演练


交换机的配置

vlan batch 10 20
#
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 10
#
interface GigabitEthernet0/0/2
port link-type access
 port default vlan 10
#
interface GigabitEthernet0/0/3
port link-type trunk
 port trunk allow-pass vlan 20
#

结论:

分析一下通信过程

PC1访问PC2的过程

PC2访问PC1的过程

原文地址:https://blog.51cto.com/13817711/2464016

时间: 2024-11-03 18:01:19

对比如下三种方式实现Vlan之间通信的利与弊的相关文章

不同vlan间的通信简单配置(三种方式)

不同vlan间的通信简单配置 1.单臂路由(图) 环境:一台路由器,一台二层交换机,两台pc机 二层交换机的配置一般模式:Switch>输入enable进入特权模式:Switch>enable输入configure terminal进入全局配置模式:Switch#configure terminal Enter configuration commands, one per line.  End with CNTL/Z.创建vlan 10 和 vlan 20:Switch(config)#vl

java创建线程的三种方式及其对比

Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实例,即创建了线程对象. (3)调用线程对象的start()方法来启动该线程. package com.thread; public class FirstThreadTest extends Thread{ int i = 0; //重写run方法,run方法的方

并发编程(壹):创建线程的三种方式及其对比

创建线程的三种方式及其对比 1. 继承 Thread类 (1). 继承Thread类.并重写run()方法,该方法无参数,无返回值: (2). 创建子类实例,并实例化对象: (3). 通过start()方法启动,注意:不是通过run()方法启动. public class ThreadDemo extends Thread{ public void run(){ System.out.println("继承Thread创建线程的."); } } public class ThreadA

0166 DOM 之 节点操作: 删除节点,删除留言案例,复制(克隆)节点,动态生成表格案例,创建元素的三种方式,innerHTML和createElement效率对比

1.1.1 删除节点 node.removeChild(child) // 此处的node指 父节点 node.removeChild() 方法: 从 node节点中删除一个子节点,返回删除的节点. <button>删除</button> <ul> <li>熊大</li> <li>熊二</li> <li>光头强</li> </ul> <script> // 1.获取元素 va

【Struts2】Struts2获取session的三种方式

1.Map<String,Object> map =  ActionContext.getContext().getSession(); 2.HttpSession session = ServletActionContext.getRequest().getSession(); 3.让Action实现SessionAware接口,并实现public void setSession(Map<String, Object> session) {} 方法,Struts2会在实例化Act

宿主机为linux、windows分别实现VMware三种方式上网(转)

一.VMware三种方式工作原理1 Host-only连接方式  让虚机具有与宿主机不同的各自独立IP地址,但与宿主机位于不同网段,同时为宿主主机新增一个IP地址,且保证该IP地址与各虚机IP地址位于同一网段.最终结果是新建了一个由所有虚机与宿主主机所构成的局域网,但该局域网与宿主主机本身所处的现有局域网是相互独立的,如果不做额外路由设置,这两个局域网之间不会连通,因此新建的局域网可以认为是一个单独从属于当前宿主主机的私有网络,其成员为当前宿主主机和相关的所有虚机,这也是Host-only命名的

Spring的依赖注入(DI)三种方式

Spring依赖注入(DI)的三种方式,分别为: 1.  接口注入 2.  Setter方法注入 3.  构造方法注入 下面介绍一下这三种依赖注入在Spring中是怎么样实现的. 首先我们需要以下几个类: 接口 Logic.java 接口实现类 LogicImpl.java 一个处理类 LoginAction.java 还有一个测试类 TestMain.java Logic.java如下: package com.spring.test.di; public interface Logic {

Jdbc注册驱动的三种方式

Jdbc注册驱动的三种方式 分类: [Java 基础] 2012-05-17 07:34 2558人阅读 评论(0) 收藏 举报 jdbc数据库javavectorurljar 关于驱动包 jdbc中注册驱动,首先导入对应的包,例如mysql-connector-java-5.0.8-bin.jar.驱动包是java和具体数据库之间的连接桥梁,由数据库厂商开发.每一种数据库对应一款驱动jar,甚至每一个版本的数据库都有自己对应版本的驱动jar. 关于java.sqlDriverManger类 J

iOS中的视图跳转的三种方式(代码跳转,根据桥跳转,按钮跳转)

#import "ViewController.h" #import "SecondViewController.h" @interface ViewController () @property (retain, nonatomic) IBOutlet UITextField *textField; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // D