- 接口视图下执行undo portswitch命令切换到三层模式前,需要清除接口下所有非默认配置。
- 接口视图下执行portswitch命令由三层模式切换回二层模式前,请清除接口下所有的三层业务配置。
例如:将接口10GE1/0/1切换为三层模式。
<HUAWEI> system-view
[~HUAWEI] interface 10ge 1/0/1
[~HUAWEI-10GE1/0/1] undo portswitch
[*HUAWEI-10GE1/0/1] commit
例如:将接口10GE1/0/1切换为三层模式。
<HUAWEI> system-view
[~HUAWEI] interface 10ge 1/0/1
[~HUAWEI-10GE1/0/1] undo portswitch
[*HUAWEI-10GE1/0/1] commit
在典型OSPF网络设计和实施中我们需要考虑的第一点,就是Router ID的选择。
这是因为OSPF作为一种链路状态路由协议其计算路由的依据是LSA(链路状态通告),每个运行OSPF的路由器都会发送并泛洪LSA报文到整个网络,这样网络中每个运行OSPF的路由器都会收集到其他设备发送过来的LSA并且放入LSBD(链路状态数据库),然后开始进行SPF(最短路径算法)运算,计算出一棵以自己为根到其他网络的无环树。由此可以看出保持每个路由器LSDB的稳定性是保证OSPF网络稳定的前提。那么在LSDB中对于不同OSPF设备发送来的LSA是如何进行区分的呢,答案就是使用Router ID。如果一个路由器的Router ID发生变化,那么此路由器会重新进行LSA泛洪,从而导致全网OSPF路由器都会更新其LSDB并且重新进行SPF计算,使得OSPF网络发生振荡。因此选择一个稳定的Router ID是OSPF网络设计的首要工作。
了解了Router ID的重要性后,我们来看看一个OSPF路由器是如何选择Router ID的。
路由器的Router ID可以手工配置,如果没有通过命令指定Router ID,系统会从当前接口的IP地址中自动选取一个作为路由器的Router ID。其选择顺序是:优先从Loopback地址中选择最大的IP地址作为路由器的Router ID,如果没有配置Loopback接口,则在接口地址中选取最大的IP地址作为路由器的Router ID。只有当被选举为Router ID的接口IP地址被删除或修改后,才会进行Router ID的重新选举。
在实际工程中,推荐手工指定OSPF路由设备的Router ID。具体做法是首先规划出一个私有网段用于OSPF的Router ID选择。例如:192.168.1.0/24。在启用OSPF进程前就在每个OSPF路由器上建立一个Loopback接口,使用一个32位掩码的私有地址作为其IP地址,这个32位的私有地址即作为该路由设备的Router ID。如果没有特殊要求,这个Loopback接口地址可以不发布在OSPF网络中。
OSPF是一个需要层次化设计的网络协议,在OSPF网络中使用了一个区域的概念,从层次化的角度来看区域被分为两种:骨干区域和非骨干区域。骨干区域的编号为0,非骨干区域的编号从1到4294967295。处于骨干区域和非骨干区域边界的OSPF路由器被称为ABR(区域边界路由器)。
实际上OSPF区域的规划也就是把网络中的OSPF路由器做归类的过程。在设计OSPF区域时,我们首先需要考虑的第一点是网络的规模,对于小型的典型网络,例如只有几台路由设备作为核心和汇聚的网络可以考虑仅规划一个骨干区域Area 0。但是在大型的OSPF网络中,网络的层次化设计是必须要考虑的。
对于大型的OSPF网络,一般在规划上都会遵循核心,汇聚,接入的分层原则,而OSPF骨干路由器的选择必然包含两种设备,一种是位于整网核心位置的核心设备,另一种是位于区域核心的汇聚设备,通常都是高端路由设备,例如华为NE系列高端路由器,或者华为S77&97系列高端路由交换机。非骨干区域的设计则是根据地理位置和设备性能而定,如果在单个非骨干区域中使用了较多的低端三层交换产品,由于其产品定位和性能的限制,应该尽量减少其路由条目数量,把区域规划得更小一些或者使用特殊区域。
实际工程中对于非骨干区域的Area编号的规划也是有讲究的,尽量不要使用类似Area1、2、3……这种连续的编号,推荐使用Area 10 、20 、30……这种递增方式,这样主要是考虑提供Area编号上的冗余,在后期网络扩容的时候便于用户增加区域编号。
特殊区域的使用可以达到优化非骨干区域的路由表项的目的。实际上对于非骨干区域,一般可能存在如下两种诉求需要减少路由表项的规模:
1、 非骨干区域仅有一个ABR做出口,任何访问区域外的流量都要经过这个出口设备,此时其实这个区域内的路由器没必要了解外部网络的细节,仅需要有个出口能够出去即可。
2、 有些时候非骨干区域的设备可能使用了一些较为低端的三层交换机,其产品定位使得其不可能承受过多的路由条目,为了精简其路由条目数量可以采用配置特殊区域的方法进行路由表项的优化。
华为路由器和交换机产品支持OSPF协议中定义四种特殊区域类型:Stub区域,Totally Stub区域,NSSA区域,Totally NSSA区域。
在绝大部分的情况下,典型OSPF网络的非骨干区域中都仅仅需要知道缺省路由出口在哪里,因此建议把非骨干区域统一规划成Totally NSSA区域,这样将极大的精简非骨干区域内部路由器的路由条目数量,并且减少区域内部OSPF交互的信息量。对于少数存在特殊需求的网络,请根据实际情况灵活使用几种区域类型。
由于OSPF骨干区域需要负责区域之间的路由交互,所以骨干区域设备的路由表规模往往会比较大,因此骨干区域的路由表规模同样需要考虑精简和优化的问题。
对于OSPF的非骨干区域来说,使用特殊区域能够精简其内部路由器的路由表,那么对于OSPF骨干区域的路由器来说又是如何优化其路由表的呢?答案就是对非骨干区域使用的IP网段作出合理规划以便于区域边界的路由汇聚。
建议新建OSPF网络能够在前期就作出利于路由汇总的IP网络设计,对于扩建的网络尽量进行IP地址的重新规划,通过区域汇总能精简骨干区域路由器的路由表,减少骨干区域内OSPF交互的信息量。同时,路由汇总以后,单点的链路故障或者网络震荡不至于影响整个网络的路由更新,因此路由汇聚还可以提高网络的稳定性。
对于一个大型OSPF网络来说,很大一部分的业务流量并不在网络内部,而是通往Internet出口,因此缺省路由的设计也是典型OSPF网络的一大设计要点。
在实际的大多数工程案例中,典型网络的出口往往不止一个,如何有效的将出口流量分担到多条链路上就成为了OSPF设计中的一个难点。虽然有很多种手段能够达到分担流量的目的,但是最简单也是最安全的方法是使用OSPF内在的选路机制。因为OSPF路由器对一条路由的优劣衡量是通过计算其cost值来实现的,cost值小的路由会被路由器优先放入路由表。通过调整OSPF接口的cost值可以使得路由器选择不同的链路出口来达到负载分担的目的。
不过在调整cost值之前还有一项必须要做的工作。因为OSPFv2出现的时间较早,没有考虑到带宽的飞速发展,因此缺省情况下,OSPF计算cost值使用的参考带宽为100M,也就是说缺省情况下,OSPF把100M带宽以上的端口统统认为其cost是1。很明显,在网络骨干带宽迈向10T的今天已经显得非常的不合时宜。幸运的是设备提供了更改参考带宽的功能,使用bandwidth-reference value命令选择一个合适的参考带宽成为OSPF网络建设中必须要做的一项工作。对于OSPF网络的选路优化,推荐首先选择合适的参考带宽,然后通过调整OSPF接口cost值来实现。
而在路由器中黑洞路由类似于宇宙中的黑洞,凡是命中黑洞路由的报文都统统被丢弃,而且不向发送者反馈任何差错信息。
黑洞路由的这种巨大魔力使得它在防止路由环路方面有着广泛的应用。在很多场景下路由聚合确实能够做到精简路由,提高网络稳定性的作用,但是任何事物都具有两面性,路由聚合也不例外,路由聚合带来的缺陷就是容易产生路由环路,而黑洞路由可以用来弥补这种缺陷。所以典型OSPF网络设计中,路由聚合和黑洞路由往往是配合使用的,
对于一个大型OSPF网络来说,安全性是必须要考虑到的问题。在OSPF网络设计中,通常会禁止将OSPF报文发往用户端,这是为什么呢?这主要是为了防止终端用户窥探OSPF报文信息,因为如果用户能截获OSPF报文,那就意味着他可能知道如何加入此OSPF网络。此时要破坏这个OSPF网络已经是轻而易举的事,例如接入一台路由器到OSPF网络中,并且使得该路由器的OSPF进程处于不稳定的状态中,就会导致OSPF网络发生振荡甚至瘫痪。
在实际工程中,为了保证OSPF网络的安全与稳定,推荐在OSPF网络的边缘设备上使用静默接口的的方式来阻止通往用户侧的OSPF报文。具体做法是在OSPF网络的边缘设备上配置silent-interface命令,用来禁止该接口接收和发送OSPF报文。禁止接口收发OSPF报文后,该接口的直连路由仍可以发布出去,但接口的Hello报文将被阻塞,接口上无法建立邻居关系。这样用户侧就无法窥探到网络中的OSPF报文。
BGP/MPLS IP VPN场景中PE和CE之间需要进行路由传递,就要得到各路由协议的支持。由于传统路由器只有一张路由表,为了不影响原来的路由信息,各路由协议必须扩展其功能才能在BGP/MPLS IP VPN场景中使用。
OSPF对其自身协议进行扩展,创立OSPF VPN多实例。支持在BGP/MPLS IP VPN场景的PE和CE之间运行,进行路由的学习和发布。在多实例场景中,路由器上会存在多个独立的路由表,之间的路由信息相互隔离。
PE和CE之间运行路由协议虽然有很多,但是最常用的还是EGBP。那么为什么还要有OSPF VPN多实例呢?也许是因为其他路由协议都支持了,OSPF不能不支持的心理在作祟;也许是网络发展进程中,PE和CE已经习惯使用OSPF了吧。
OSPF 出现的背景:
了解SPF 算法和LSA通告(ospf进程生成)LSA生成 LSDB
使用SPF算法来计算一个无环路的拓扑图
Router ID就是用于在自治系统中唯一标识一台运行OSPF的路由器的32位整数。每个运行OSPF的路由器都有一个Router ID。Router ID的格式和IP地址的格式是一样的,在实际网络部署中,考虑到协议的稳定,推荐使用路由器Loopback0的IP地址做为路由器的Router ID。
只有重新配置系统的Router ID或OSPF的Router ID,并且重新启动OSPF进程后,才会进行Router ID的重新选取。
>reset ospf process
减少在广播和NBMA网络中路由器之间的邻接关系。指定DR和其它路由器进行路由信息的传递。
在广播网和NBMA网络中,任意两台路由器之间都要传递路由信息。
网络中有n台路由器,则需要建立n*(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。为解决这一问题,OSPF定义了指定路由器DR。通过选举产生DR(Designated 路由器)后,所有其他设备都只将信息发送给DR,由DR将网络链路状态LSA广播出去。为了防止DR发生故障,重新选举DR时会产成业务中断,除了DR之外,还会选举一个备份指定路由器BDR。这样除DR和BDR之外的路由器(称为DR Other)之间将不再建立邻接关系,也不再交换任何路由信息,这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量.
DR 最好在OSPF网络是不变的,即时有后加入的设备优先级更高。
根据二层链路的不同,DR/BDR的选举过程会有不同
在一个网段中会指定一个DR,如果区域中有多个网段则会在每个网段中产生一个DR。
这表示DR/BDR与邻居间建立的是邻接关系,
而DROther之间建立的只是邻居关系。
说到这儿,小伙伴们是不是又产生了很多新的疑问?为什么Full就表示邻接关系,2-Way就表示邻居关系?邻居关系和邻接关系又有什么区别?
查看ospf 设备之间的邻接或者邻居关系可以通过dis ospf peer brief ,如果不是邻接关系不会交换路由信息。
OSPF 网络中为什么一定要有DR/BDR?
1、 如果广播网络里只存在DR,但并不存在BDR,这时候网络是什么状况?
如果在一个多访问网络上只有唯一的一台具有选取资格的路由器相连,那么这台路由器将成为DR路由器,而且在这个网络上没有BDR路由器,其他所有的路由器都将只和这台DR路由器建立邻接关系。如果 DR故障网络将瘫痪。
如果广播网络上不存在具备DR/BDR选举资格的设备,那么这个网络上将没有DR或者BDR路由器,而且也不会建立任何邻接关系。在这种情况下,网络上所有的路由器的邻居状态都将停留在“2-Way”状态
设备上OSPF 进程怎么交换LSDB的?答案是通过链路直连的OSPF接口。

在上面的信息中,通过其中一些描述链路基本状况的字段,就可以了解OSPF接口相连的链路信息。
OSPF 接口状态机
OSPF设备从接口获取了链路信息后,然后与相邻设备建立邻接连接,交互这些信息。在建立邻接关系之前,邻居设备间需要明确角色分工,才能正常建立连接。那角色分工通过什么来了解呢?其实在图1的接口信息中,我们还有一个非常关键的字段没有介绍,那就是State字段。通过这个字段,我们就可以了解OSPF设备在一段链路中的作用。而这也就是OSPF接口的七般变化。每个设备通过这七般变化,顺势而为,扮演好自己在这段链路中的角色。

1)邻居关系:OSPF设备启动后,会通过OSPF接口向外发送Hello报文,收到Hello报文的OSPF设备会检查报文中所定义的参数,比如Hello报文发送间隔、网络类型、IP地址掩码等,如果双方一致就会形成邻居关系,两端设备互为邻居。
2)邻接关系:位于邻居关系之上,如果两端需要进一步交换DD报文、交互LSA信息,才建立邻接关系。
这也就解答了第二篇里面广播链路/NBMA链路的一些疑问。在广播链路/NBMA链路里,因为DROther之间不需要交换LSA信息,所以建立的就是邻居关系。而DR与BDR之间,DR/BDR与DROther之间需要交互LSA信息,所以建立的是邻接关系。如上图所示。
而P2P链路/P2MP链路则只有邻接关系。
后面会介绍到邻居状态机,如果根据邻居状态理解,邻居关系是指邻居状态达到了2-way状态,而邻接关系则需要达到Exstart以上状态。
邻居状态机总共有8种状态:

1、LSDB日益庞大。
随着网络规模日益扩大,当一个大型网络中的路由器都运行OSPF路由协议时,如果所有路由器都运行在同一个区域里,由于OSPF要求同一个区域的所有路由器都具有相同的链路状态数据库,所以此时路由器数量的增多会导致LSDB非常庞大,占用大量的存储空间,并使得运行SPF算法的复杂度增加,导致路由器CPU负担很重。
2、信息传递效率降低。
在大型网络中,拓扑结构发生变化是不可避免的,网络会经常处于“动荡”之中,造成网络中会有大量的OSPF协议报文在传递,这些协议报文占用了业务报文的传输带宽,所以降低了网络的带宽利用率。更为严重的是,每一次变化都会导致网络中所有的路由器重新进行路由计算。
3、网络稳定性降低。
OSPF单区域运行情况下,任何一台路由器的拓扑发生变化都会导致全网的LSA泛洪,网络中所有其他路由器都要重新计算刷新路由。这样势必会影响整个网络运行的稳定性。比如某条链路质量较差,处于闪断中,那么此时整个网络的路由就会长时间处于动荡之中,严重降低了网络的稳定性。

OSPF说的子母连环阵其实就是将一个OSPF网络分为多个区域。如图2所示,OSPF将自治系统划分成不同的区域。区域是从逻辑上将路由器划分为不同的组,每个组用区域号(Area ID)来标识。区域的边界是路由器,而不是链路。一个网段(链路)只能属于一个区域,或者说每个运行OSPF的接口必须指明属于哪一个区域。
骨干区域
OSPF划分区域之后,并非所有的区域都是平等的关系。其中有一个区域其区域号(Area ID)是0,通常被称为骨干区域。骨干区域是连接所有其他OSPF区域的中央区域,骨干区域负责区域之间的路由,非骨干区域之间的路由信息必须通过骨干区域来转发。对此,OSPF有两个规定:
l 所有非骨干区域必须与骨干区域保持连通;
2 骨干区域自身也必须保持连通。
标准区域
标准区域是最通用的区域,它传输区域内路由,区域间路由和外部路由。
特殊区域
OSPF为了进一步精细化管理LSA的传播,还划分了4个特殊区域:
l Stub区域:Stub区域不允许自治系统外部的路由(Type5 LSA)在区域内传播。
2 Totally Stub区域:Totally Stub区域既不允许自治系统外部的路由(Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播。
stub 和Totall-stub 的区别在于,Stub内不能有ASBR,也就是说stub 区域内不允许有路由重分发,而NSSA区域内有ASBR,允许重分发,进入stub区域的外部路由会成为默认路由,Totall-Stub区域内的路由是明细路由,外部区域和其它路由进入Totall-Stub区域会成为默认路由。
3 NSSA区域:NSSA区域允许引入少量通过本区域的ASBR到达的外部路由,但不允许其他区域的外部路由AS-external-LSA(Type5 LSA)在区域内传播。
4 Totally NSSA区域:Totally NSSA区域既不允许其他区域的外部路由ASE LSA(Type5 LSA)在区域内传播,也不允许区域间路由Network-summary-LSA(Type3 LSA)在区域内传播。
为了避免区域间的环路,OSPF规定直接在两个非骨干区域之间发布路由信息是不允许的,只允许在一个区域内部或者在骨干区域和非骨干区域之间发布路由信息。因此,每个区域边界路由器(ABR)都必须连接到骨干区域。

假设OSPF允许非骨干区域之间直接传递路由,则可能会导致区域间环路。例如图4所示的网络中,骨干区连接到网络N,这个路由信息会传递至区域1,假设非骨干区之间允许直接传递路由信息的话,那么这条路由信息最终又被传递回去,形成区域间的路由环路。为了防止这种区域间环路,在图4这种网络拓扑中,OSPF禁止Area1和Area3,或者Area2和Areea3之间直接交互路由信息,而必须通过Area0这个骨干区域进行路由交互。这样就能防止区域间环路的产生。
OSPF 路由器的角色
| 路由器角色 | 含义 |
| 区域内路由器(Internal Router) | 该类路由器的所有接口都属于同一个OSPF区域。 |
| 区域边界路由器ABR(Area Border Router) | 该类路由器可以同时属于两个以上的区域,但其中一个必须是骨干区域。 ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。 |
| 骨干路由器(Backbone Router) | 该类路由器至少有一个接口属于骨干区域。 所有的ABR和位于骨干区域Area0内部的路由器都是骨干路由器。 |
| 自治系统边界路由器ASBR(AS Boundary Router) | 与其他AS交换路由信息的路由器称为ASBR。 ASBR并不一定位于AS的边界,它可能是区域内路由器,也可能是ABR。 |





可以看到,OSPF的区域划分是基于接口的,同一个路由器的不同接口可以属于不同的区域,每个运行OSPF的接口必须指明属于哪一个区域。
R2作为区域边界路由器(ABR)负责传递区域间路由信息,所以ABR必须同时知道骨干区和标准区域的路由信息。
但是在实际应用中,可能会因为各方面条件的限制,无法满足所有非骨干区域与骨干区域保持连通的要求,此时可以通过配置OSPF虚连接来解决这个问题。
虚连接(Virtual link)是指在两台ABR之间通过一个非骨干区域建立的一条逻辑上的连接通道。

可以看到,虚链接的存在增加了网络的复杂程度,而且使故障的排除更加困难。因此,在网络规划中应该尽量避免使用虚链接,设计者应该仅仅把它用来作为修复无法避免的网络拓扑问题的一种临时手段。虚链路可以看作是一个标明网络的某个部分是否需要重新规划设计的标志。
记住:LSDB是LSA的汇总
ospf 网络通过LSA 通告形成LSDB ,每种LSA 通告的信息不同,担任的角色 不一
1、Router-LSA:将运行OSPF的网络比作为一个部落,部落划分了很多区域比作村子。那Type 1 LSA就是村子里村民做的自我介绍,这个信息只在这个村子传播,每个村民都了解该村其他村民的信息。
2、Network-LSA:假设DR是一个村子的村长,负责描述与之交互的所有村民的信息。并将这些信息在整个村子里传播
3、Network-summary-LSA :由区域边界路由器ABR发布,用来描述区域间的路由信息,ABR相当于通信联络员,负责村子与村子之间的通信。ABR将一个村子的Type1 Type2的信息进行汇总形成路由信息传递到另外一个村子,另外一个村子同样将该村Type1 Type2的信息进行汇总形成路由信息传递到这个村子。
4、ASBR-Summary-LSA:ASBR也是通信联络员,与ABR不同的是,ASBR是部落间的通信员,负责部落间的通信。一个部落所有村子里的村民如果想要和其他部落通信,必须经过ASBR。ASBR-summary-LSA的作用就是告诉非ASBR所在村的其他村的村民,ASBR在哪,怎么才能去ASBR。
5、AS-external-LSA:
顾名思义,此种LSA是描述到AS外部的路由,由自治系统边界路由器ASBR发布,在整个AS中泛洪(除了STUB区域和NSSA区域,后面章节会详细介绍到)这种很容易理解了,就是部落内任意一个村民到该部落外部的路由。由部落间通信联络员ASBR发布。
6、NSSA-LSA:


为什么要划分特殊区域?目的是减少LSA在区域内的通行数量 。
从网络优化的角度考虑,我们通常在保证网络可达性的同时尽量减小路由表项的规模,尽量减少网络中LSA报文的泛洪

这种情况下,就产生了OSPF的第一种类型的特殊区域――Stub区域。 配置Stub之后,自治系统外部的路由就不会在本区域内传播了,但允许区域间的路由传播,这样就减少了Area 2中LSA数量。
对于Area 2中的路由器来说,其实区域间的明细路由它也没必要都了解,仅保留一个出口让Area 2中的路由器的数据包能够出去就足够了。这就产生了OSPF的第二种类型的特殊区域――Totally Stub区域,也叫完全Stub区域。配置了Totally Stub区域以后,既不允许自治系统外部的路由在区域内传播,也不允许区域间路由在区域内传播。这样就能达到进一步减少区域内LSA数量的目的。

假设Area2原来作为一个Stub区域运行,但是某一天有个外部网络需要通过Area2接入到这个OSPF网络。也就是需要将自治域外部路由引入并传播到整个OSPF自治域中,此时可以在RTA上将外部路由注入到OSPF域,但是这种配置将使RTA成为ASBR,因此,Area2也就不是Stub区域了。 针对这种场景,OSPF定义了NSSA区域(Not-So-Stubby-Area NSSA) ,为了容易记忆,大家可以把它叫做“不那么Stub区域”,意思是在Stub区域的基础上做了一定的变通(允许引入外部路由了),所以就变得“不那么Stub”了。类似的,如果想进一步减少LSA数量,可以配置成Totally NSSA区域。
https://support.huawei.com/enterprise/zh/doc/EDOC1100087027
VXLAN即虚拟扩展局域网,是大二层网络中广泛使用的网络虚拟化技术。在源网络设备与目的网络设备之间建立一条逻辑VXLAN隧道,采用MAC in UDP(User Datagram Protocol)封装方式,即,将虚拟机发出的原始以太报文完整的封装在UDP报文中,然后在外层使用物理网络的IP报文头和以太报文头封装,这样,封装后的报文就像普通IP报文一样,可以通过路由网络转发,这就像给二层网络的虚拟机插上了路由的翅膀,使虚拟机彻底摆脱了二、三层网络的结构限制。
为什么需要VXLAN呢?这和服务器的虚拟化趋势紧密相关,一方面出现了虚拟机动态迁移,要求虚拟机在迁移前后的IP和MAC地址不能改变;另一方面,租户数量激增,需要网络提供隔离海量租户的能力。
在服务器虚拟化后,虚拟机动态迁移变得常态化,为了保证迁移时业务不中断,就要求在虚拟机迁移时,不仅虚拟机的IP地址不变,而且虚拟机的运行状态也必须保持原状(例如TCP会话状态),所以虚拟机的动态迁移只能在同一个二层域中进行,而不能跨二层域迁移。
众所周知,同一台二层交换机可以实现下挂服务器之间的二层通信,而且服务器从该二层交换机的一个端口迁移到另一个端口时,IP地址是可以保持不变的。这样就可以满足虚拟机动态迁移的需求了。VXLAN的设计理念和目标正是由此而来的。
VXLAN提供一套方法论,在IP网络基础上,当源和目的之间有通信需求时,便在IP网络之上创建一条虚拟的隧道,透明转发用户数据。任意两点之间都能通过VXLAN隧道来通信,忽略底层网络的结构和细节。从服务器的角度看,VXLAN为它们将整个基础网络虚拟成了一台巨大的“二层交换机”,所有服务器都连接在这台虚拟二层交换机上。而基础网络之内如何转发都是这台“巨大交换机”内部的事情,服务器完全无需关心。
基于这种“二层交换机”的模型,就很容易理解为什么VXLAN可以实现VM动态迁移了:将虚拟机从“二层交换机”的一个端口换到另一个端口,完全无需变更IP地址。
Vxlan 如何工作的?
介绍VXLAN隧道的建立过程,并在这个过程中更好地理解VXLAN的工作原理
在介绍VXLAN隧道的建立过程前,先来了解VXLAN网络模型中一些常见的概念。如下图所示,两台服务器之间通过VXLAN网络进行通信。在两台TOR交换机之间建立了一条VXLAN隧道,TOR交换机将服务器发出的原始数据帧加以“包装”,好让原始报文可以在承载网络(比如IP网络)上传输。当到达目的服务器所连接的TOR交换机后,离开VXLAN隧道,并将原始数据帧恢复出来,继续转发给目的服务器。

VTEP(VXLAN Tunnel Endpoints,VXLAN隧道端点)是VXLAN网络的边缘设备,是VXLAN隧道的起点和终点,源服务器发出的原始数据帧,在VTEP上被封装成VXLAN格式的报文,并在IP网络中传递到另外一个VTEP上,并经过解封转还原出原始的数据帧,最后转发给目的服务器。
VNI(VXLAN Network Identifier,VXLAN 网络标识符),VNI是一种类似于VLAN ID的用户标识,一个VNI代表了一个租户,属于不同VNI的虚拟机之间不能直接进行二层通信。
VNI还可分为二层VNI和三层VNI,它们的作用不同,二层VNI是普通的VNI,用于VXLAN报文同子网的转发;三层VNI和VPN实例进行关联,用于VXLAN报文跨子网的转发。
和VLAN类似,不同VNI之间的主机,以及VXLAN网络和非VXLAN网络中的主机不能直接相互通信。为了满足这些通信需求,VXLAN引入了VXLAN网关的概念。VXLAN网关分为二层网关和三层网关,VXLAN二层网关用于终端接入VXLAN网络,也可用于同一VXLAN网络的子网通信;VXLAN三层网关用于VXLAN网络中跨子网通信以及访问外部网络。
根据三层网关部署方式的不同,VXLAN三层网关又可以分为集中式网关和分布式网关
VXLAN隧道由一对VTEP IP地址确定,创建VXLAN隧道实际上是两端VTEP获取对端VTEP IP地址的过程,只要对端VTEP IP地址是三层路由可达的,VXLAN隧道就可以建立成功。
VXLAN隧道的建立分为静态方式和动态方式两种。
静态方式没有控制平面,用户通过手动指定VXLAN隧道的源IP为本端VTEP的IP、目的IP为对端VTEP的IP,建立VXLAN隧道。静态方式手工配置工作量大,灵活性较差,不适合大规模的组网场景。
动态方式的VXLAN隧道的建立借助VXLAN EVPN协议作为VXLAN的控制平面,在两端VTEP之间建立BGP EVPN对等体,然后对等体之间利用VXLAN EVPN路由实现VTEP的自动发现、主机信息相互通告等,从而实现动态建立VXLAN隧道。数据平面则依据控制平面建立的转发表项执行报文的转发。动态方式灵活性高,适合大规模的VXLAN组网场景