在 VLAN 这篇文章中知道,设置 VLAN 目的是隔离大型的广播域,将其分成很小的广播域,从而更好的管理。但也就带来了一些问题:如流量不能在不同的 VLAN 间通信。

而为了解决这个问题,可以采用如下技术:

  • 添加路由器(单臂路由)
  • 三层交换机(SVI)

单臂路由

首先可以增加一个路由器,采用如下的拓扑结构:

但这同样有一个问题,就是一个 VLAN 需要占用一个路由器上的接口,那么,能不能向交换机的 Trunk 口那样,在一个接口上跑所有的 VLAN 呢。

答案是肯定的,就是通过子接口的概念,将一个物理接口虚拟成多个子接口,并且为每个子接口配置一个 VLAN。这一技术也称为单臂路由。

简单来说,单臂路由是指在路由器的一个接口上通过配置子接口(逻辑接口)的方式,实现原来相互隔离不同的 VLAN 之间的互联互通。

配置单臂路由:

#  Switch
Switch>en
Switch#conf t
Switch(config)#vlan 10,20
Switch(config)#int e 0/0
Switch(config-if)#switchport mode ac
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 10
Switch(config)#int e 0/1
Switch(config-if)#switchport access vlan 20
Switch(config-if)#no shu
Switch(config-if)#int e 0/2
Switch(config-if)#switchport trunk encapsulation dot1q
Switch(config-if)#switchport mode trunk
Switch(config-if)#no shu # PC: R1
Router>en
Router#conf t
Router(config)#no ip routing
Router(config)#ho R1
R1(config)#ip default-gateway 192.168.10.254
R1(config)#int e 0/0
R1(config-if)#ip add 192.168.10.1 255.255.255.0
R1(config-if)#no shu
R1(config-if)#do wr # PC: R2
Router>en
Router#conf t
Router(config)#no ip routing
Router(config)#ho R2
R2(config)#ip default-gateway 192.168.20.254
R2(config)#int e 0/0
R2(config-if)#ip add 192.168.20.1 255.255.255.0
R2(config-if)#no shu
R2(config-if)#do wr # Router: r4
Router>en
Router#conf t
Router(config)#ho r
r(config)#int e0/0
r(config)#no shu # configure sub-interface 10
r(config)#int e0/0.10
# config vlan for this sub-interface
r(config-subif)#encapsulation dot1Q 10
r(config-subif)#ip add 192.168.10.254 255.255.255.0
r(config-subif)#no shu # configure sub-interface 20
r(config)#int e0/0.20
r(config-subif)#encapsulation dot1Q 20
r(config-subif)#ip add 192.168.20.254 255.255.255.0
r(config-subif)#no shu

分析一下通讯过程:

R1 要给 R2 发送 ICMP,发现没有对应网关的 MAC 地址,将包搁置。发送 ARP 请求网关的 MAC 地址

Switch 学习后进行泛洪,R4 收到 ARP 请求,并做出 ARP 应答。

Switch 再次学习来自 R4 的 Arp 应答,并直接转发给 R1.

R1 解封装 ARP 应答包,并且将搁置的 ICMP 包添加 MAC 地址后,发出。

Switch 收到 ICMP 后,之间转发给 R4,R4 解封装发现 三层 IP 是给自己能到达网段的,进行封包:

4 层:ICMP 报头

3 层:IP 报头,源 IP 192.168.10.1/24 目的 IP 192.168.20.1/24

2 层: 源 MAC:aabb.cc00.4000 目的 MAC:不清楚

将包搁置,发送 Arp 请求 获取 R2 的MAC 地址

Switch 学习发来的 ARP 请求,并泛洪。R2 收到 Arp 请求做出应答,Switch 再次学习,然后直接转发给 R1。

R1 解析 ARP 应答,并将搁置的 ICMP 包发给 R2。

R2 又会做出 ICMP 应答,Switch 之间转发给 R1,R1 解封装发现 ICMP 的应答报文的目的 IP 是 R1,接着重新封装转发给 Switch。

Switch 再直接转发给 R1。

综上:我们可以发现一个有趣的现象,在 R4 和 交换机的链路上可以看到有双重的 Icmp 的 reqeust 和 reply 如下:

这里在解释一下两个 request 和 reply 的含义:

第一个 request 是:R1 发送 R4 (R4 是 R1 的网关) 并且应该带有 VLANID = 10 的 Tag,如下

第二个 request 是:R4 发给 R2 的 ICMP 包,并且应该带有 VLANID = 20 的 TAG,因为是从虚拟的子接口 Vlan20 发出,如下

第一个 reply 是:R2 发给 R4,带有 VLANID = 20 的 Tag,如下

第二个 replay 是:R4 发给 R1 的,带有 VLANID = 10 的 TAG,如下

因此我们可以推测出在 R4 内部,进行了 Tag 的去除和封装。

SVI(Switch Virtual Interface)

另一种方式就是通过三层交换机,来达到路由转发的功能。

三层交换机,具有二层和三层转发的功能。

网关接口,用于三层交换机跨 VLAN 间路由,具体可以通过 interface vlan 接口配置命令来创建 svi,然后实现路由功能

SVI 配置:

# switch
Switch(config)#ip routing # 开启路由功能
Switch(config)#no ip cef # 关闭cef(这个属于模拟器的bug,真实环境下不用) # 创建 vlan
Switch(config)# vlan 10,20
# 配置模式
Switch(config-vlan)#int e 0/0
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 10
Switch(config-if)#no shutdown
Switch(config-vlan)#int e 0/1
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 20
Switch(config-if)#no shutdown # 创建SVI接口
Switch(config)#interface vlan 10
Switch(config-if)#no sh
Switch(config-if)#ip address 192.168.1.254 255.255.255.0 Switch(config)#interface vlan 20
Switch(config-if)#no sh
Switch(config-if)#ip address 192.168.2.254 255.255.255.0 # PC
# 关闭路由功能
PC1(config)#no ip routing # 配置 ip
PC1(config)#interface e0/0
PC1(config-if)#no sh
PC1(config-if)#ip address 192.168.1.1 255.255.255.0 # PC 配置网关
PC1(config)#ip default-gateway 192.168.1.254

由于是三层交换机,192.168.1.0/24 和 192.168.2.0/24 两个网段直接就可以互通了,不需要再去配置路由表,我们可以看一下路由表:

对三层交换机内部的讲解:

由于 e0/0 口是 access 口,所以会被打上相应 vlan ID=10 的 tag。

由于是三层交换机,通过 SVI 模拟路由器,也就是说明进行的是三层通信,可是传送过来的数据包中包含 tag,

也就说明存在一个能把 tag 拆掉的 access 口才能通信,所以推测这个口是虚拟的 Vlan 10,同时 Vlan 也是通往新网段的网关。

EtherChannel

有时交换机的带宽无法满足转发流量的需要,就会出现阻塞的情况。一般会升级接口的带宽,但有时往往特别大型的流量不是时常发生。手动的升级接口麻烦,甚至有些浪费。为了解决这个问题,EtherChannel 接口出现了,它可以将多个物理接口捆绑在一起同时进行流量的转发,在流量较大时增加连接接口的数量,从链路视角看,就是同时连接多根链路,实现并行传输。

同时也出现了一个问题,在之前介绍交换机 STP 的内容时,了解交换机内部通过 STP 来防止环路,会将某些接口 Block。当如果想用这种并行的链路连接,就必须形成环路。

最后为了保证在 STP 不失效的情况下,应用并行链路,就会采用 EtherChannel 这种配置。会将所有绑定的接口视为同一个接口,这样 STP 还能正常的运行。

但想要实现 Port-channel 接口,需要保证所有的接口配置完全相同:

  1. 物理接口支持 Etherchanbnel
  2. 物理接口保持一致
  3. 绑定的数量一致
  4. 接口模式一样(如二层接口,三层接口)
  5. 接口类型必须相同(带宽)
  6. 双工,
  7. 工作模式,trunk,switch
  8. vlan 相同

配置了 EtherChannel 的接口,具有如下优点:

  • 逻辑聚合接口
  • 高带宽
  • 负载均衡
  • 为 STP 提供一个逻辑接口
  • 冗余(在断开下,仍能保持运行)

配置 EtherChannel

配置 EtherChannel 有两种方式:

  1. 手动

    • 手动将交换机上多个端口,捆绑成一个
  2. 自动学习(PAGP思科私有,LACP公有)

LACP 的模式:

  • Passive:等待主动的接口,建立连接
  • Active:主动发送消息,和另一端的接口建立连接

下面是 LACP 的建立原则:

# bind interfaces
s1(config)#interface range ethernet 0/0 - 1
s1(config)#shutdown
s1(config)#channel-group 1 mode active
s1(config)#no shutdown
# apply configuration
s1(config)#interface port-channel 1
s1(config)#switchport trunk encapsulation dot1q
s1(config)#switchport mode trunk s1#show ip int bri
s1#show etherchannel summary # bind interfaces
s2(config)#interface range ethernet 0/0 - 1
s2(config)#shutdown
s2(config)#channel-group 1 mode active
s2(config)#no shutdown
# apply configuration
s2(config)#interface port-channel 1
s2(config)#switchport trunk encapsulation dot1q
s2(config)#switchport mode trunk s2#show ip int bri
s2#show etherchannel summary

总结

这篇文章中主要提到了三种技术:

  • 单臂路由和 SVI 是为了解决 VLAN 在不同网段间通信的问题。

  • EtherChannel 是为了解决物理端口带宽不够时,如果去调整的方案。

在不同网段使用 VLAN 通信 - SVI,单臂路由的更多相关文章

  1. 跨Vlan通信:单臂路由,三层交换机

    实验涉及命令以及知识补充(涉及Vlan通过的以太网口需要设置为Trunk口) 单臂路由 父接口 no ip address :删除实现单臂路由接口的IP no shutdown 虚拟子接口 R2(co ...

  2. 实现不同VLAN间的通信(单臂路由和链路聚合)

    单臂路由与链路聚合 1.单臂路由 1.1 链路类型 1.2 子接口 2. 链路捆绑 1.单臂路由 是指在路由器的一个接口上通过配置子接口,实现原来相互隔离的不同VLAN(虚拟局域网)之间的互联互通. ...

  3. 交换知识 VLAN VTP STP 单臂路由

    第1章 交换基础 1.1 园区网分层结构 层次 作用 出口层 广域网接入 出口策略 带宽控制 核心层 高速转发 服务器接入 路由选择 汇聚层 流量汇聚 链路冗余 设备冗余 路由选择 接入层 用户接入 ...

  4. 小知识get:利用单臂路由实现不同vlan间路由

    一.单臂路由概述 1.1.单臂路由实现不同vlan间通信 链路类型 交换机连接主机的端口为access链路 交换机连接路由器的端口为Trunk链路 子接口 路由器的物理接口可以被划分成多个逻辑接口 每 ...

  5. 单臂路由&链路捆绑

    单臂路由&链路捆绑 目录 一.单臂路由 1.1.单臂路由作用 1.2.单臂路由实现不同VLAN间通信的原理 二.单臂路由相关命令配置 三.链路捆绑 3.1.以太网链路聚合原理 3.2.命令配置 ...

  6. 单臂路由与三层交换机实现VLAN通信

    不同VLAN之间相互通信的两种方式 (单臂路由.三层交换) 试验环境:东郊二楼第三机房 试验设备:Catalyst 2950-24(SW3)                   Cisco 2611( ...

  7. 三层交换单臂路由vlan间通信综合实验之降龙要点[转]

    单臂路由三层交换机提供vlan间的通信之菜鸟之降龙详解要点: 图示 PC:左到右依次设置IP172.16.10.1,    20.1,  30.1,   40,1  ,50,1  /24 网关10.2 ...

  8. 三层交换单臂路由vlan间通信综合实验之降龙要点--Lee

    单臂路由三层交换机提供vlan间的通信之菜鸟之降龙详解要点: 图示 PC:左到右依次设置IP172.16.10.1,    20.1,  30.1,   40,1  ,50,1  /24 网关10.2 ...

  9. VLAN之间单臂路由通信

    实验目的 理解单臂路由的应用场景 掌握路由器子接口的配置方法 掌握子接口封装VLAN的配置方法 理解单臂路由的工作原理 实验原理 单臂路由解决用户需要跨越VLAN实现通信的情况. 原理:通过一台路由器 ...

随机推荐

  1. Socket模拟Web服务器

    效果如下: 源码下载地址:https://github.com/doyoulaikeme/DotNetSample/tree/master/DotNetSample3/SocketWebServer

  2. 小师妹学JVM之:Dirty cards和PLAB

    目录 简介 分代收集器中的空间划分 Write barrier和Dirty cards PLAB old space分配对象 总结 简介 分代垃圾回收器在进行minor GC的时候会发生什么操作呢?有 ...

  3. Jmeter(十六) - 从入门到精通 - JMeter前置处理器(详解教程)

    1.简介 前置处理器是在发出“取样器请求”之前执行一些操作.如果将前置处理器附加到取样器元件,则它将在该取样器元件运行之前执行.前置处理器最常用于在取样器请求运行前修改其设置,或更新未从响应文本中提取 ...

  4. 午间邂逅 | post 和 get 的兄弟情深

    前言 本文已经收录到我的 Github 个人博客,欢迎大佬们光临寒舍: 我的 Github 博客 学习导图: image-20200710142453734 image-202007101431049 ...

  5. CVE-2020-0796 漏洞复现

    漏洞介绍 2020年3月10日,微软在其官方SRC发布了CVE-2020-0796的安全公告(ADV200005,MicrosoftGuidance for Disabling SMBv3 Compr ...

  6. VirtualBox安装centos8

    原文链接:https://www.wjcms.net/archives/vagrantbox安装centos8 VirtualBox安装centos8 在线安装(不推荐) 打开git软件,直接运行命令 ...

  7. Python数据可视化:画饼状图、折线图、圈图

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. from math import pi import matplotlib ...

  8. java不需要递归列表转树形结构

    有时候我们需要将列表结构的数据转成树形结构的数据 废话不多说直接上代码 基础类 `@Data public class TreeNode { private Long id; private Long ...

  9. Captura - 免费好用还开源的录屏软件

    首先下载这个软件,国内下载很慢这里提供一个国内下载UCloud-OSS 软件打开后默认英文,现在我们切换到中午模式 在录制屏幕的同时获取声音

  10. 使用SQL语句进行数据复制

    使用SQL语句对数据或者表进行复制,一般用于两张表结构相同的时候使用. SQL Server中,如果目标表存在: insert into 目标表 select * from 原表; SQL Serve ...