GRE的问题 --- 因为GRE搭建的是一个点到点的隧道,所以,导致其扩展性较差(当存在多个私网需要相互连接时,需要彼此之间都搭建GRE隧道才行)
MGRE --- 多点通用路由封装技术
NHRP协议 --- 下一跳解析协议 ---- 自动学习隧道地址和物理地址的对应关系的一种方法。
原理:需要在私网中选出一个物理接口不会发生变化的作为NHRP的中心(NHS --- 下一跳服务器)。剩下的分支都需要知道中心的隧道IP 和物理接口IP,他们需要将自己的物理接口IP和隧道IP发送给中心
(如果分支的物理接口的IP地址发生变化,则需要立即将对应关系重新发送)。这样,NHS将会收集所有分支的地址映射关系。之后需要通讯时,查看对应关系,封装对应的接口IP地址即可。分支之间需要
进行通讯,则先将数据发给中心,由中心进行转发。
----- 这种中心站点到分支站点的架构 --- HUB-SPOKE架构
因为MAGRE搭建的逻辑拓扑是一个多节点的网络,但是,发送信息时依然是点到点的发送,无法使用广播或者组播行为,所以,这样的网络我们可以称为NBMA网络。(他属于逻辑上搭建出的NBMA网络,真正意义上物理设备搭建出的NBMA网络是帧中继。)
MGRE的配置过程
给中心站点进行配置(边界路由器出接口的公网IP地址不会发生变化的作为NHS,即中心站点)
[r1]int t 0/0/0 --- 创建隧道接口
[r1-Tunnel0/0/0]ip address 192.168.5.1 24 --- 配置隧道IP地址
[r1-Tunnel0/0/0]tunnel-protocol gre p2mp --- 选择封装类型 ---- 选择MGRE
[r1-Tunnel0/0/0]source 15.0.0.1 --- 定义源IP地址
[r1-Tunnel0/0/0]nhrp network-id 100 --- 创建NHRP域
给分支站点进行配置
[r2]int t 0/0/0
[r2-Tunnel0/0/0]ip address 192.168.5.2 24
[r2-Tunnel0/0/0]tunnel-protocol gre p2mp
[r2-Tunnel0/0/0]source GigabitEthernet 0/0/1 --- 以接口作为封装源,以应对IP地址的变化
[r2-Tunnel0/0/0]nhrp network-id 100 --- 加入NHRP域,必须是和
中心站点创建相同的域
[r2-Tunnel0/0/0]nhrp entry 192.168.5.1 15.0.0.1 register ---
找中心站点进行注册
隧道地址 物理接口
地址
<r1>display nhrp peer all --- 可以查看NHRP信息收集情况
通过RIP获取路由信息
1,中心站点可以收到分支的数据包,但是,分支不能收到中心站点的数据报 --- MGRE环境下不支持广播或者组播行为 ---- 在中心站点开启伪广播 --- 分别给所有节点发送单播以达到广播的效果
[r1-Tunnel0/0/0]nhrp entry multicast dynamic --- 开启中心
站点伪广播
2,开启伪广播后,分支站点只能收到中心站点的路由信息,却不能收到其他分支站点的路由信息。
--- RIP水平分割导致
[r1-Tunnel0/0/0]undo rip split-horizon --- 关闭接口水平分割
功能
OSPF --- 开放式最短路径优先协议
选路佳,收敛快,占用资源少
RIP存在3个版本 --- RIPV1,RIPV2 --- IPV4
RIPNG ---- IPV6
OSPF也存在三个版本 --- OSPFV1(实验室阶段夭折),OSPFV2 --- IPV4
OSPFV3 ---- IPV6
RIPV2和OSPFV2的异同点:相同点:
1,RIPV2和OSPFV2一样,都是无类别的路由协议(传递路由信息的时候携带子网掩码),都支持VLSM和CIDR。
2,OSPFV2和RIPV2(224.0.0.9)都是以组播的形式传递信息。 ---- 224.0.0.5/224.0.0.6
3,OSPFV2和RIPV2都支持等开销负载均衡。不同点:
OSPF和RIP不同,RIP要求仅适用于中小型的网络环境中,OSPF可以应用于中大型的网络环境中。
OSPF为了适应中大型网络环境,需要进行结构化部署。--- 区域划分当网络规模不大时,我们也可以将OSPF网络划分在一个区域内,这样的OSPF网络 --- 称为单区域OSPF网络
如果,一个OSPF网络当中包含多个OSPF区域 --- 称为多区域OSPF网络
区域划分的主要目的 --- 区域内部传递拓扑信息,区域之间传递路由信息
区域边界路由器 --- ABR --- 同时处于多个区域,并且一个接口对应一个区域,至少有一个接口属于骨干区域。
区域之间可以存在多个ABR,一个ABR也可以对应多个区域
区域划分的要求:1,区域之间必须存在ABR
2,区域划分必须按照星型拓扑结构划分 ---- 所有区域需要连接在中心区域上,这个中心我们称之为骨干区域。
为了方便对各个区域进行区分和管理,我们给每个区域设计一个编号 --- 区域ID(area ID) ---- 由32位二进制构成 --- 可以通过点分十进制的形式来表示,也可以直接使用十进制来进行表示。 ---- 规定,骨干区域的区域ID必须是0。
1,OSPF的数据包
OSPF一共存在5种数据包
hello包 --- 用来周期发现,建立和保活邻居关系 hello的周期发送时间 ---- 10S(30S)死亡时间 --- dead time ---- 4倍的hello时间 ----
40S(120S)
因为OSPF传递的是拓扑信息,需要将所有路由器的位置关系表示清楚,所以,需要有一个参数对所有的路由器进行区分和标定。
我们引入RID来完成这个工作。
RID需要满足的条件:1,唯一性(全OSPF网络内部唯一即可);
2,格式统一 --- 由32位二进制构成,采用IP地址的格式
RID的获取方法(两种)
1,手工配置:仅需满足以上两点要求即可。
2,自动获取:如果是自动获取,设备将会在自己环回接口的IP地址中选择最大的作为自己的RID。如果没有环回接口,则将在自己的物理接口上选择IP地址最大的作为RID。 hello包中会携带这个RID。
DBD包 ---- 数据库描述报文 --- 携带的是数据库(LSDB --- 存放
LSA信息的数据库)的目录信息
LSR包 ---- 链路状态请求报文 --- 基于DBD包请求未知的LSA信息
LSU包 --- 链路状态更新报文 --- 真正携带LSA信息的数据包
LSAck包 ---- 链路状态确认报文 --- 确认包
OSPF存在没30MIN一次的周期更新。
![]() |
2,OSPF的状态机
Two-way --- 标志着邻居关系的建立。
(条件匹配)
EXSTART状态 ---- 主从关系选举 ---- 使用的未携带数据的DBD包(主要是为了和之前的邻居关系进行区分),通过比较RID大小进行主从关系选举,RID大的为主,可以优先进入下一个阶段。
FULL状态 --- 标志着邻接关系的建立。 ---- 邻接关系主要是为了和之前邻居关系进行区分。邻居关系,仅能使用hello包进行周期保活,只有邻接关系,可以去交换LSA信息。
down状态 --- 启动OSPF之后,发出hello包进入下一个状态
init(初始化)状态 --- 收到Hello包中包含本地的RID时进入下一个状态
Two-way(双向通讯)状态 --- 标志着邻居关系的建立
(条件匹配) 条件匹配成功,则进入下一个状态;否则,只能停留在邻居关系,靠Hello包进行周期保活。
Exstart(预启动)状态 --- 使用未携带数据的DBD包进行主从关系选举,比较RID,RID大的为主,可以优先进入下一个状态
Exchange(准交换)状态 --- 使用携带数据的DBD包进行数据库目录摘要的共享。
Loading(加载)状态 --- 查看对端的DBD包中的信息和本地的LSDB数据库目录信息进行对比,基于未知的LSA信息发送LSR包,对端回复LSU包,需要LSACK进行确认。
FULL状态 --- 标志着邻接关系的建立
3,OSPF工作过程 启动配置完成后,OSPF向本地所有运行OSPF协议的接口以组播 224.0.0.5发送hello包。Hello包中携带本地的RID以及本地已知邻居的
RID。之后,将收集到的邻居关系记录在一张表中 --- 邻居表。
邻居表建立之后,将进行条件匹配;失败则将停留在邻居关系,仅使用hello包进行周期保活。
匹配成功,则开始建立邻接关系。首先使用未携带数据的DBD包进行主从关系选举。之后,使用携带数据的DBD包进行数据库目录的共享。之后,本地使用LSR/LSU/LSACK数据包来获取未知的LSA信息;完成本地数据库的建立。 --- LSDB(链路状态数据库) --- 生成数据库表。
最后,基于本地的链路状态数据库,生成有向图,之后,通过SPF算法将有向图转换成最短路径树。之后,计算本地到达未知网段的路由信息,将路由信息添加到路由表中。
收敛完成后,hello包依然需要进行10S(30S)一次的周期保活,没
30MIN进行一次周期更新。
网络结构突变
1,增加一个网段:触发更新,直接通过LSU包将变更信息发送,需要
ACK确认。
2,断开一个网段:触发更新,直接通过LSU包将变更信息发送,需要
ACK确认。
3,无法沟通:死亡时间 --- 40S(120S)
4,OSPF的基本配置
1,启动OSPF进程
[r1]ospf 1 router-id 1.1.1.1 --- 1 进程号,仅具有本地意义;手工配置RID在启动进程时完成
[r1-ospf-1]
2,创建区域
[r1-ospf-1]area 0
[r1-ospf-1-area-0.0.0.0]
3,宣告宣告的目的:1,激活接口 --- 只有激活的接口才能收发OSPF的数据
2,发布路由 --- 只有激活接口对应网段信息才能发布出去
[r1-ospf-1-area-0.0.0.0]network 12.0.0.0 0.0.0.255 --- 反掩码 --- 由连续的0和连续的1组成(0对应的位不可变,1对应位可变)
[r1]display ospf peer --- 查看OSPF的邻居表
[r1]display ospf peer brief ---- 查看邻居关系的简表
[r1]display ospf lsdb --- 查看数据库表
[r1]display ospf lsdb router 2.2.2.2 --- 展开一跳LSA信息
华为设备给OSPF定义的默认优先级为10。
OSPF是以带宽作为开销值的 ---- COST = 参考带宽 / 真实带宽 --华为设备OSPF默认的参考带宽是100Mbps
OSPF开销值为小数时的处理逻辑,当该数值为大于1的小数,则将直接舍弃小数部分取整即可;如果是小于1的小数,则将直接设置为1。
[r1-ospf-1]bandwidth-reference 1000 --- 修改参考带宽值注意,参考带宽修改,则所有设备上都需要改成相同的。
Hello 数据包
Network Mask:表示发送Hello数据包(参与OSPF进程)的路由器接口的网络掩码。仅只有广播介质(MA网络环境中)才会检查此字段值。
Hello Interval:表示每隔多长时间发送一次Hello数据包,单位为秒。对于两台尝试建立OSPF邻接关系的路由器来说,Hello 和 Dead 时间必须一致。其中Broadcast和P2P,此字段值为10s;其他网络环境中,此字段值为30s。
Options:表示(发送Hello数据包的)路由器所支持的能力。
DN位,为MPLS/VPN所用。
O位用于不透明LSA(opaque LSA)详见RFC2370。
DC位表示路由器支持按需电路特性。参考网上博文 OSPF DC按需链路技术 剖析
EA位表示路由器支持(接收及转发)外部属性LSA。
N/P位表示路由器支持非完全端区域(not-so-stubby area,NSSA)。
MC位表示路由器具备组播OSPF能力。
E位,E位置位时,表示路由器具备接收外部LSA的能力。
T位 表示路由器支持ToS(通常为0)。
Router Prionrity :默认情况下,此字段值被设置为1。在选举DR/BDR时起着重要作用;OSPF路由器发送Hello数据包中路由器优先级字段值越高,越有可能成为DR。此字段值为0,则不参与DR选举。
Dead Intervar:默认情况下,此字段值是Hello Interval字段值的4倍。表示一段以秒为单位的时间。
Designated Router:表示DR路由器的IP地址。若DR不存在或尚未发现,此字段值为0.0.0.0。DR通过Hello协议选举而出。具有最高优先级的路由器(所发Hello数据包中路由器优先级字段值最高的路由器)将成为发包接口所处网络内的DR。在路由器优先级字段值相等的情况下,Router-ID值最高的路由器(所发Hello数据包中指定路由器字段值最高的路由器)将成为(发包接口所处网络内的)DR。 可以说OSPF是接口敏感型的协议。
Backup Designated Router:标识BDR,指明BDR的接口IP地址。若无BDR,此字段值为0.0.0.0。BDR通过Hello协议选举而出。
Neighbor:包含通过Hello数据包获知的邻居路由器的Router-ID。
DBD数据包
Interface MTU :此字段值指明发包接口(发送DBD数据包的路由器接口)所能发出的数据包的最大长度,单位为字节。由OSPF虚链路发出的DBD数据包的接口MTU字段值必须设置为0。
Options:与Hello数据包所含字段相同。
I位:此位置1时,则表示邻居双方发出的首个DBD数据包。
M位:此位置1时,则表示DBD数据包尚未发送完毕。
MS位:主/从位。此位置1时,表示在DBD交换过程中,发包路由器为“主”路由器,此位置0时,则为“从”路由器。
DBD Sequence Number:此字段包含由“主”路由器设置的唯一值(序列号),在数据库交换过程中使用。只有“主”路由器才能增加此字段的值(序列号的值)。
LSA Headers:此字段包含若干链路状态数据库包头。
LSR数据包
-
LS Type:标识所请求的LSA类型。
-
LS-ID:表示特定LSA的链路状态ID。
-
Advertising Router:包含生成LSA的路由器的Router-ID。
LSU数据包
OSPF路由器会发此类数据包来实施LSA的泛洪。单个LSU数据包内会包含多条LSA。OSPF路由器也会发送LSU数据包,来回应(邻居路由器发出的)LSU数据包。以泛洪方式发出的LSA由LSA确认数据包进行确认。只要有一条未经确认的LSA,(OSPF路由器就会)每隔重传间隔时间重传一次。
LSack 数据包
用来对每条LSA进行确认。OSPF路由器也会发送LSack数据包,来应答LSU数据包。可用单个LSack数据包一次性确认收到的多条LSA。LSack数据包负责LSU数据包的可靠传输。
链路状态确认数据包以组播的方式发送。若(发送LSack数据包的)路由器为DR/BDR,则IP包头的组播目的IP地址为224.0.0.5(所有SPF路由器地址)。否则,LSack数据包IP包头的组播目的IP地址为226.0.0.6(DR/BDR地址)。