百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

「干货」怎么避免子网划分造成的IP地址浪费?

bigegpt 2024-08-01 11:43 4 浏览

01技术背景


交换网络中,VLAN技术以其对广播域的灵活控制和部署方便而得到了广泛的应用。


但是在一般的三层交换机中,通常是采用一个VLAN对应一个VLANIF接口的方式实现广播域之间的互通,这在某些情况下导致了IP地址的浪费。


因为一个VLAN对应的子网中,子网号、子网定向广播地址、子网缺省网关地址不能用作VLAN内的主机IP地址,且子网中实际接入的主机可能少于编址数,多出来的IP地址也会因不能再被其他VLAN使用而被浪费掉。



例如,如图所示的VLAN规划中,VLAN2预计未来有10个主机地址的需求,但按编址方式,至少需要给其分配一个掩码长度是28的子网10.1.1.0/28,其中10.1.1.0为子网号,10.1.1.15为子网定向广播地址,10.1.1.1为子网缺省网关地址,这三个地址都不能用作主机地址,剩下范围在10.1.1.2~10.1.1.14的地址可以被主机使用,共13个。


这样,VLAN2子网至少浪费3个IP地址,三个VLAN子网一起至少浪费9个IP地址。同时,VLAN2子网实际地址需求只有10个,剩余的3个也不能再被其他VLAN使用。网络中的VLAN越多,浪费的IP地址也就越多。


为了解决上述问题,VLAN聚合应运而生。它通过引入Super-VLAN和Sub-VLAN的概念,使每个Sub-VLAN对应一个广播域,并让多个Sub-VLAN和一个Super-VLAN关联,只给Super-VLAN分配一个IP子网,所有Sub-VLAN都使用Super-VLAN的IP子网和缺省网关进行三层通信。


这样,多个Sub-VLAN共享一个网关地址,节约了子网号、子网定向广播地址、子网缺省网关地址,且各Sub-VLAN间的界线也不再是从前的子网界线了,它们可以根据各自主机的需求数目在Super-VLAN对应子网内灵活的划分地址范围,从而即保证了各个Sub-VLAN作为一个独立广播域实现广播隔离,又节省了IP地址资源,提高了编址的灵活性。


02VLAN聚合


VLAN聚合通过定义Super-VLAN和Sub-VLAN,使Sub-VLAN只包含物理接口,负责保留各自独立的广播域;Super-VLAN不包含物理接口,只用来建立三层VLANIF接口。


然后再通过建立Super-VLAN和Sub-VLAN间的映射关系,把三层VLANIF接口和物理接口两部分有机的结合起来,实现所有Sub-VLAN共用一个网关与外部网络通信,并用ProxyARP实现Sub-VLAN间的三层通信,从而在实现普通VLAN的隔离广播域的同时,达到节省IP地址的目的。


工作原理


相对每一个普通VLAN都有一个三层逻辑接口和若干物理接口,VLAN聚合定义的Super-VLAN和Sub-VLAN比较特殊:


?Sub-VLAN:只包含物理接口,不能建立三层VLANIF接口,用于隔离广播域。每个Sub-VLAN内的主机与外部的三层通信是靠Super-VLAN的三层VLANIF接口来实现的。


?Super-VLAN:只建立三层VLANIF接口,不包含物理接口,与子网网关对应。与普通VLAN不同的是,它的VLANIF接口的Up不依赖于自身物理接口的Up,而是只要它所含Sub-VLAN中存在Up的物理接口就Up。


一个Super-VLAN可以包含一个或多个Sub-VLAN。Sub-VLAN不再占用一个独立的子网网段。在同一个Super-VLAN中,无论主机属于哪一个Sub-VLAN,它的IP地址都在Super-VLAN对应的子网网段内。


这样,Sub-VLAN间共用同一个网关,既减少了一部分子网号、子网缺省网关地址和子网定向广播地址的消耗,又实现了不同广播域使用同一子网网段地址的目的,消除了子网差异,增加了编址的灵活性,减少了闲置地址浪费。



按照VLAN聚合的实现方式,令VLAN10为Super-VLAN,分配子网10.1.1.0/24,VLAN2~VLAN4作为Super-VLAN10的Sub-VLAN,如上图所示。


可以看出,Sub-VLAN2、Sub-VLAN3和Sub-VLAN4共用一个子网10.1.1.0/24,这样,该网络中就只有一个子网号10.1.1.0、一个子网缺省网关地址10.1.1.1和一个子网定向广播地址10.1.1.255共三个IP地址不能被主机使用,其余都可以被主机使用。


而且,各Sub-VLAN间的界线也不再是从前的子网界线了,它们可以根据其各自主机的需求数目在Super-VLAN对应子网内灵活的划分地址范围,比如Sub-VLAN2实际需要10个,就给它分配10.1.1.2~10.1.1.11的地址段。


Sub-VLAN之间的通信


VLAN聚合在实现不同VLAN共用同一子网网段地址的同时,也给Sub-VLAN间的三层转发带来了问题。


普通VLAN中,不同VLAN内的主机可以通过各自不同的网关进行三层互通。但是Super-VLAN中,所有Sub-VLAN内的主机使用的是同一个网段的地址,共用同一个网关地址,主机只会做二层转发,而不会送网关进行三层转发。


即实际上,不同Sub-VLAN的主机在二层是相互隔离的,这就造成了Sub-VLAN间无法通信的问题。


解决这一问题的方法就是使用ProxyARP。


假设Sub-VLAN2内的主机Host_1与Sub-VLAN3内的主机Host_2要通信,在Super-VLAN10的VLANIF接口上启用ProxyARP,如图所示。



Host_1与Host_2的通信过程如下(假设Host_1的ARP表中无Host_2的对应表项):


1.Host_1将Host_2的IP地址(10.1.1.12)和自己所在网段10.1.1.0/24进行比较,发现Host_2和自己在同一个子网,但是Host_1的ARP表中无Host_2的对应表项。


2.Host_1发送ARP广播报文,请求Host_2的MAC地址,目的IP为10.1.1.12。


3.网关L3Switch收到Host_1的ARP请求,由于网关上使能Sub-VLAN间的ProxyARP,开始使用报文中的目的IP地址在路由表中查找,发现匹配了一条路由,下一跳为直连网段(VLANIF10的10.1.1.0/24),VLANIF10对应Super-VLAN10,则向Super-VLAN10的所有Sub-VLAN接口发送一个ARP广播,请求Host_2的MAC地址。


4.Host_2收到网关发送的ARP广播后,对此请求进行ARP应答。


5.网关收到Host_2的应答后,就把自己的MAC地址回应给Host_1。


6.Host_1之后要发给Host_2的报文都先发送给网关,由网关做三层转发。


Sub-VLAN与其他网络的三层通信


以下图所示组网为例,介绍Sub-VLAN内主机与其他网络内的主机间通信过程。



用户主机与服务器处于不同的网段中,Switch_1上配置了Sub-VLAN2、Sub-VLAN3、Super-VLAN4和VLAN10,Switch_2上配置了VLAN10和VLAN20。


假设Sub-VLAN2下的主机Host_1想访问与Switch_2相连的Server,报文转发流程如下(假设Switch_1上已配置了去往10.1.2.0/24网段的路由,Switch_2上已配置了去往10.1.1.0/24网段的路由,但两交换机没有任何三层转发表项):


1.Host_1将Server的IP地址(10.1.2.2)和自己所在网段10.1.1.0/24进行比较,发现和自己不在同一个子网,发送ARP请求给自己的网关,请求网关的MAC地址,目的MAC为全F,目的IP为10.1.1.1。


2.Switch_1收到该请求报文后,查找Sub-VLAN和Super-VLAN的对应关系,知道应该回应Super-VLAN4对应的VLANIF4的MAC地址,并知道从Sub-VLAN2的接口回应给Host_1。


3.Host_1学习到网关的MAC地址后,开始发送目的MAC为Super-VLAN4对应的VLANIF4的MAC地址、目的IP为10.1.2.2的报文。


4.Switch_1收到该报文后,根据Sub-VLAN和Super-VLAN的对应关系以及目的MAC判断进行三层转发,查三层转发表项没有找到匹配项,上送CPU查找路由表,得到下一跳地址为10.1.10.2,出接口为VLANIF10,并通过ARP表项和MAC表项确定出接口,把报文发送给Switch_2。


5.Switch_2根据正常的三层转发流程把报文发送给Server。


Server收到Host_1的报文后给Host_1回应,回应报文的目的IP为10.1.1.2,目的MAC为Switch_2上VLANIF20接口的MAC地址,回应报文的转发流程如下:


?Server给Host_1的回应报文按照正常的三层转发流程到达Switch_1。到达Switch_1时,报文的目的MAC地址为Switch_1上VLANIF10接口的MAC地址。


?Switch_1收到该报文后根据目的MAC地址判断进行三层转发,查三层转发表项没有找到匹配项,上送CPU,CPU查路由表,发现目的IP为10.1.1.2对应的出接口为VLANIF4,查找Sub-VLAN和Super-VLAN的对应关系,并通过ARP表项和MAC表项,知道报文应该从Sub-VLAN2的接口发送给Host_1。


?回应报文到达Host_1。


Sub-VLAN与其他设备的二层通信


Switch_1上配置了Sub-VLAN2、Sub-VLAN3和Super-VLAN4,Switch_1的IF_1和IF_2配置为Access接口,IF_3接口配置为Trunk接口,并允许VLAN2和VLAN3通过;


Switch_2连接Switch_1的接口配置为Trunk接口,并允许VLAN2和VLAN3通过。



从Host_1进入Switch_1的报文会被打上VLAN2的Tag。在Switch_1中这个Tag不会因为VLAN2是VLAN4的Sub-VLAN而变为VLAN4的Tag。


该报文从Switch_1的Trunk接口IF_3出去时,依然是携带VLAN2的Tag。


也就是说,Switch_1本身不会发出VLAN4的报文。就算其他设备有VLAN4的报文发送到该设备上,这些报文也会因为Switch_1上没有VLAN4对应的物理接口而被丢弃。


因为Switch_1的IF_3接口上根本就不允许Super-VLAN4通过。对于其他设备而言,有效的VLAN只有Sub-VLAN2和Sub-VLAN3,所有的报文都是在这些VLAN中交互的。


这样,Switch_1上虽然配置了VLAN聚合,但与其他设备的二层通信,不会涉及到Super-VLAN,与正常的二层通信流程一样,此处不再赘述。


03配置VLAN聚合示例


组网需求


某公司拥有多个部门且位于同一网段,为了提升业务安全性,将不同部门的用户划分到不同VLAN中,如图1所示,VLAN2和VLAN3属于不同部门。


各部门均有访问Internet需求,同时由于业务需要,不同部门间的用户需要互通。





配置思路


可以在SwitchB上部署VLAN聚合,将不同部门的VLAN聚合到SuperVLAN中,这样,不同部门的用户可通过SuperVLAN访问Internet。


同时,为使部门间用户互通,在SuperVLAN上部署ProxyARP功能。采用如下思路配置VLAN聚合:


1.在SwitchA和SwitchB上配置VLAN和接口,将不同部门用户划分到不同VLAN中,并透传各VLAN到SwitchB。


2.在SwitchB上配置Super-VLAN及其对应的VLANIF接口、上行路由,使不同部门的用户能够访问Internet。


3.在SwitchB上启用Super-VLAN的ProxyARP功能,使不同部门的用户间三层互通。


操作步骤


1.配置VLAN和接口,将不同部门用户划分到不同VLAN中,并透传各VLAN到SwitchB。


a.配置SwitchA


#配置接口GE0/0/1为Access类型。接口GE0/0/2、GE0/0/3、GE0/0/4的配置与GE0/0/1类似,不再赘述。


<HUAWEI>system-view

[HUAWEI]sysname SwitchA

[SwitchA]interface gigabitethernet 0/0/1

[SwitchA-GigabitEthernet0/0/1]port link-type access

[SwitchA-GigabitEthernet0/0/1]quit


#创建VLAN2并向VLAN2中加入GE0/0/1和GE0/0/2。


[SwitchA]vlan 2

[SwitchA-vlan2]port gigabitethernet 0/0/1 0/0/2

[SwitchA-vlan2]quit

#创建VLAN3并向VLAN3中加入GE0/0/3和GE0/0/4。

[SwitchA]vlan 3

[SwitchA-vlan3]port gigabitethernet 0/0/3 0/0/4

[SwitchA-vlan3]quit


#配置SwitchA连接SwitchB的接口,透传VLAN2和VLAN3到SwitchB。


[SwitchA]interface gigabitethernet 0/0/5

[SwitchA-GigabitEthernet0/0/5]port link-type trunk

[SwitchA-GigabitEthernet0/0/5]port trunk allow-pass vlan 2 3

[SwitchA-GigabitEthernet0/0/5]quit


b.配置SwitchB


#创建VLAN2、VLAN3、VLAN4、VLAN10,并配置SwitchB连接SwitchA的接口,使VLAN2和VLAN3透传到SwitchB。


<HUAWEI>system-view

[HUAWEI]sysname SwitchB

[SwitchB]vlan batch 2 3 4 10

[SwitchB]interface gigabitethernet 0/0/5

[SwitchB-GigabitEthernet0/0/5]port link-type trunk

[SwitchB-GigabitEthernet0/0/5]port trunk allow-pass vlan 2 3

[SwitchB-GigabitEthernet0/0/5]quit


2.配置Super-VLAN及其对应的VLANIF接口


#在SwitchB上配置Super-VLAN4,并将VLAN2、VLAN3加入到Super-VLAN4,作为其Sub-VLAN。


[SwitchB]vlan 4

[SwitchB-vlan4]aggregate-vlan

[SwitchB-vlan4]access-vlan 2 to 3

[SwitchB-vlan4]quit


#创建并配置VLANIF4,使不同部门的用户可通过Super-VLAN4访问Internet。


[SwitchB]interface vlanif 4

[SwitchB-Vlanif4]ip address 10.1.1.1 255.255.255.0

[SwitchB-Vlanif4]quit


3.配置上行路由


#在SwitchB上配置上行接口GE0/0/1,透传SwitchB与出口网关Router的互联VLAN。


[SwitchB]interface gigabitethernet 0/0/1

[SwitchB-GigabitEthernet0/0/1]port link-type trunk

[SwitchB-GigabitEthernet0/0/1]port trunk allow-pass vlan 10

[SwitchB-GigabitEthernet0/0/1]quit


#创建并配置VLANIF10,指定其IP地址为SwitchB与出口网关Router对接的IP地址。


[SwitchB]interface vlanif 10

[SwitchB-Vlanif10]ip address 10.10.1.1 255.255.255.0

[SwitchB-Vlanif10]quit


#在SwitchB上配置一条到出口网关Router的缺省静态路由,使用户能够访问Internet。


[SwitchB]ip route-static 0.0.0.0 0.0.0.0 10.10.1.2

说明:

还需要在出口网关Router上配置其与SwitchB对接的接口,指定其IP地址为10.10.1.2.


4.配置用户IP地址


分别为各用户配置IP地址,并使它们和VLAN4处于同一网段。

配置成功后,各部门用户可以访问Internet,但VLAN2的用户与VLAN3的用户间不可以相互Ping通。


5.配置ProxyARP


#在SwitchB的Super-VLAN4下配置ProxyARP,使不同部门的用户间三层互通。


[SwitchB]interface vlanif 4

[SwitchB-Vlanif4]arp-proxy inter-sub-vlan-proxy enable

[SwitchB-Vlanif4]quit


6.验证配置结果


配置完成后,VLAN2的用户与VLAN3的用户可以相互Ping通,且都可以访问Internet。


相关推荐

得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践

一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...

warm-flow新春版:网关直连和流程图重构

本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...

扣子空间体验报告

在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...

spider-flow:开源的可视化方式定义爬虫方案

spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...

solon-flow 你好世界!

solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...

新一代开源爬虫平台:SpiderFlow

SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...

通过 SQL 训练机器学习模型的引擎

关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...

鼠须管输入法rime for Mac

鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...

Go语言 1.20 版本正式发布:新版详细介绍

Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...

iOS 10平台SpriteKit新特性之Tile Maps(上)

简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...

程序员简历例句—范例Java、Python、C++模板

个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...

Telerik UI for iOS Q3 2015正式发布

近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...

ios使用ijkplayer+nginx进行视频直播

上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...

IOS技术分享|iOS快速生成开发文档(一)

前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...

macOS下配置VS Code C++开发环境

本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...