静态路由的缺点:手动添加、比较繁琐,而且没有办法更新路由信息(删除增加路由,旧的路由信息不会主动删除,新的路由信息还需要手动添加),不方便排错。(1~3台设备才会用到静态路由)
可以自动更新学习路由信息——其实有多个协议OSPF、RIP、EIGRP、IS-IS
动态路由的分类:
①距离矢量路由协议:RIP\EIGRP(思科私有,15年之后才变为共有)
类似于一个方向标路牌,指明方向和距离(只有一条路)
②链路状态路由协议: OSPF\IS-IS
类似于地图中有很多路到达目的地,我们可以选择其中最快最近的路径(有多条路)
是一个公有协议,属于链路状态路由协议,是以组播的方式发送。
OSPF组播地址:224.0.0.5 224.0.0.6
链路:路由器接口
状态:跟邻居设备之间的关系
优点:保证百分百无环路、收敛快、扩展性、支持认证
大型企业网中:由于每一台路由器都需要学习整个拓扑的路由信息,导致负担过重,通过多区域划分来解决负载过重的问题。
多区域划分:
①骨干区域 0(单区域时,必须有骨干区)
②非骨干区域
骨干区域一般都和非骨干区域相连
OSPF状态机制
OSPF中有五个报文
①HELLO报文(包):用于邻居的发现、建立以及维护
思科 HELLO报文时间——10s(每隔10s会发出一个新的报文,华为一般是30s)
dead时间——40s(每10s发送一次HELLO报文,如果发送四次了都没有回复,就死掉了)
②DBD:记录数据库摘要信息
③LSR:链路状态请求报文
④LSU:链路状态更新报文
⑤LSack:链路状态确认
首先通过HELLO报文去发现并建立邻居关系,当所有的邻居关系都建立完之后,会把这些关系存到链路状态数据库当中,存进来之后,如果其中某一台路由信息断了,或者加了新的信息,这个时候路由器就会发送链路状态请求报文,请求新的邻居或者某一个邻居关系,看看是否断开或者有新加入的,另外一台路由器就会回复一个链路状态更新报文,在每一步的过程中都会有ack报文确认。
状态:
①Down 本地一旦发出hello包,进入下一个状态
②ini初始 本地收到的hello包中若存在本地RID,进入下一个状态
什么是RID呢?
RID:router ID——就是路由器的ID,是用来唯一标识某台OSPF路由器,在路由器的id在网络当中是唯一的,不能冲突(一般建议使用本台设备的IP作为RID)
1.手工指定RID(优先级最高)
2.若没有手工指定RID,则优先使用回环口IP地址
3.没有手工指定RID,也没有创建回环口的时候,选择双up物理接口中最大的为RID
手工指定>回环口>物理接口大IP
③2way双向通信 邻居关系建立的标志
④Exstart预启动
⑤Exchange准交换
⑥loading加载
⑦Full转发 邻接关系建立的标志 到达full状态表示OSPF完全写成功
邻居表:启用OSPF之后,会加进组播地址224.0.0.5,并且会往组播地址里面发送hello包,处于这个组播中的其他OSPF路由器会接收到来自本台设备发送的hello包,将这个hello包里的RID加到自己的邻居表里面
查看邻居表命令:
cisco:show ip ospf neighbor(一般都是在特权模式下查看,想在配置模式下查看前加个do)
huawei:display ospf peer brief
(display ospf brief——查看OSPF摘要信息)
拓扑表(链路状态数据库LSDB):
包含了收到所有的链路状态通告,OSPF在发送路由更新时,发送的就是链路状态数据库
查看拓扑表命令:
cisco:show ip ospf database
huawei:display ospf (进程号)lsdb
路由表:
通过链路状态数据库去运行SPF算法得到最优路径(SPF算法——树形结构),然后将最优路径添加到自己的路由表中。
查看路由表命令:
cisco:show ip ospf route
huawei:display ip routing-table protocol ospf
OSPF的选路标准,以自己为中心,构建一个最短的路径树
OSPF的选路标准:
1.OSPF的链路代价计算:从源到目的路径上,所有的路由器出站接口开销的总和
2.OSPF接口开销的计算:cost=10^8/接口带宽(单位是BW)
DR:指定路由器
BDR:备份指定路由器
DRTHOR:其他路由
DR和BDR的信息是相通的,都会加入一个组播地址224.0.0.6。只有在广播多路的访问的环境下才有DR和BDR的概念。(在串行链路中是没有DR和BDR选举机制的)
先选举BDR,然后BDR会自动升级为DR,再选举一台BDR。DR和BDR的选举必须是在同一个网段。(类比与太子上位成皇上,立新的太子,太子和皇上的选举必须是在同一个国家)
DR的选举:非抢占的(太子得等皇上死了之后才能上位)
1:端口优先级。(优先级越大越优先。串行链路不参与选举 )
2:如果有回环口,选择回环口最大的IP地址的路由器作为本网的DR。
3:如果没有回环口,会选择物理端口最大的IP的路由器作为本网的DR.
优先级>回环口>RID
新建拓扑(ensp华为模拟器和CPT)
[Huawei]ospf 接进程号XXX //启用ospf进程号为XXX——如图,进程号范围为1——65535
我们先来配置R1↓
[Huawei]ospf 110 //启用ospf,进程号为110
需要将信息通告到某一个区域,首先需要进入那个区域
[Huawei-ospf-110]area 0 //进入骨干区域(0表示骨干区域)
[Huawei-ospf-110-area-0.0.0.0]network 12.12.12.0 0.0.0.255 //通告直连路由的路由信息(注意,是直连网段) network后接直连的网段 以及其网段对应的反掩码,所谓反掩码就是子网掩码取反得到的,简单来说就是转换成二进制之后0变成1,1变成0.
接着再来配置R2
注意这里的进程号是可以选择和R1同一个进程号的,没有说进程号一定要唯一匹配
R2有两个直连网段,要注意两个直连网段都要通告
R3的配置同理R1,不再赘述
配置完成之后实现R1和R3的通信
[Huawei]ospf 110 router-id 1.1.1.1 //手工指定RID
新建拓扑
首先第一步还是去配置各个端口的ip地址,注意再注意,配置各个端口ip地址的时候顺便把no shutdown打开端口, 思科跟华为不同,默认端口都是关闭的。
配置与华为有些许差别。
Router(config)#router ospf 110——启用ospf,进程号为110
Router(config-router)#network 12.12.12.0 0.0.0.255 area 0 ——通告直连路由的路由信息,进入骨干区0
同理配置R1,R2
查看R1的拓扑表,观察到R1的RID为23.23.23.2,在同一台路由器R1上,R1左边的接口ip为12.12.12.2,由于23.23.23.2更大,所以作为R1的RID。这里注意,RID的选举是在同一台设备上进行比较的,而不是在一条链路中比较,R1的RID是通过左右两个端口的IP地址比较得到的,R0和R2都只有一个端口,那么那个端口的IP地址就是他们的RID。而DR是在链路中比较的,例如这个拓扑,R1的右端是23.23.23.2,R2是23.23.23.3,所以这条链路当中,就选择23.23.23.3作为DR,另外一条链路一个是12.12.12.1,还有一个是12.12.12.2,选择12.12.12.2作为DR,图中可能因为小bug导致显示12.12.12.1为DR
Router#sh ip ospf database——查看拓扑表
Router#show ip ospf neighbor——查看邻居表
我们想更改DR可以选择改变优先级或者手工指定rid(是先比较优先级再比较rid的)
企图手工指定rid,提示需要先清空OSPF进程
Router#clear ip ospf process //清除OSPF进程
Router(config)#router ospf 110
Router(config-router)#router-id 1.1.1.1 //手工指定rid (要先进入进程号)
DR选举是非抢占的,当DR没有消失的时候,尽管你更改了rid,依旧没有用,这就是清除OSPF进程的作用,可以理解为重新选举DR,这个时候更改了的rid才能够派上用场。
依照拓扑图新建拓扑
R3和R4之间像闪电一样的线表示串行线。本次实验不要关闭日志,后面做ospf需要看日志提示。
用Serial线连接Serial口,Serial表示串行链路
交换机暂时还没有讲到,不需要做配置,连上去就好
配置R1:
配置R2:
另一个接口作为PC1的网关
配置R3:
配置R4:
另一个接口作为PC2的网关
略
R1:
R2:
R3:
R4:
注意R1只需要通告一次,R2和R3都需要通告两次,配置略。
实验需求:在R4上使用接口级命令的方式启用OSPF
[Huawei-Ethernet0/0/0]ospf enable 110 area 0——接口级命令的方式启用OSPF
注意了,这里是先进入接口,然后再启用OSPF,常规的router ospf启用方法是,选择进程号——area 0进入骨干区——network写直连网段信息
为什么用接口级命令的方式启用OSPF,不用通告直连网段的信息呢?
因为在接口上他会直接把接口上的ip直接通告进去
如果是思科的设备,这个时候就已经启用成功了,PC1已经可以实现和PC2的通信。但是华为设备不行。
还需要创建进程——配置骨干区域,相当于进入端口启用OSPF起到了,省略了通告直连网段信息的步骤,但前两步还是不能省略。
查看邻居表:
观察到R1的RID为192.168.123.1,不应该是回环口优先,应该是1.1.1.1才对嘛?因为我们回环口没有通告进ospf中。同时下面的Neighbor id对应的应该是2.2.2.2和3.3.3.3,其实就是出了bug。
通告完之后要reset ospf,这里提到一下undo ospf 110 和reset ospf process的区别问题
undo就是把这个ospf删掉,reset就是清除进程,原来在ospf区域当中选举出了DR和BDR,reset就是把选举环节中间的缓存清除,恢复成一开始刚配置OSPF的一个状态,然后重新选举DR和BDR。
结果我们发现最后RID还是192.168.123.1,这边借用一下大佬的回答
查看拓扑表:
会发现在同一区域中的设备,拓扑表基本都差不多,只发现age值不一样,因为不同设备启用ospf的时间不一样,先启用的age值就会更大。
查看路由表:
后接protocol ospf表示限制只看ospf的路由表,也可以不加。
直接display ospf brief
在串行链路中,不参与DR和BDR的选举,只有在广播多路访问中才会出现DR和BDR的选举。
display ospf brief
观察到R2是DROther。
观察到R1是BDR。
这里依旧出现了一个小bug,如果优先级相等,而且没有回环口的情况下DR——BDR——DOther是按RID大小往下排,所以这里的BDR应该是R2才对。但没关系,ensp的bug就是很多,隔一段时间重新display一下路由器都能发现有些配置变了。
想让R2成为DR,两种办法——更改优先级和指定RID。我们先来尝试更改优先级。
[Huawei-Ethernet0/0/0]ospf dr-priority 优先级设置——更改优先级
现在R2成为DR,我们还想让R3成为BDR。
如图,再把R3的优先级改成50,50也比本来的10来的大,现在正常情况下,DR是R2,BDR是R3。
我们发现DR还是R3,因为之前提到的,DR的选举是非抢占的,所以必须要先把前面的数据清零,重新选举。
reset ospf process——注意是在用户模式下的命令。
还有一个注意点,我们修改了R2和R3的优先级,需要分别在R2和R3 reset。
一致,自己去看,略。
提示显示,你需要restart ospf进程才可以,就是之前提到的reset。
[Huawei]ospf 110 router-id 1.1.1.1 //手工指定RID
修改成功。R3同理。
新增路由器,配置ip地址,再通告直连网段。小细节,R5和R1,R6和R4都要通告,不要仅通告R5和R6。
测试联通成功。
这项实验目的主要就是让你感受动态路由比静态路由方便的地方。
同理配置其他路由器
配置R1,R2,R3:
Router(config)#router ospf 110——启用ospf,进程号为110
Router(config-router)#network 12.12.12.0 0.0.0.255 area 0 ——通告直连路由的路由信息,进入骨干区0
对比华为——三步走
R4使用接口级命令启用OSPF:
对比一下华为的,[Huawei-Ethernet0/0/0]ospf enable 110 area 0
show ip route ——查看路由表
show ip route ospf(show ip ospf route也可以)——查看只有ospf的路由表
C表示直连,O表示OSPF。
show ip ospf neighbor——查看邻居表
思科邻居表上可以查看到DR.BDR.DROTHER的信息。
我们查看一下R3的邻居表
Pri表示优先级,ospf为1,串行链路为0,0表示不参与DR和BDR的选举。
show ip ospf database——查看拓扑表
刚刚在R1上启用了回环口,所以这个时候R1的RID变成了1.1.1.1,思科就没有bug真好。
这个部分就是对DR的描述,去同链路中其他路由器查看拓扑表,这一块的信息是一样的。
详情见实验要求六,略。
R1#show ip ospf database——查看拓扑表
R1#show ip ospf neighbor——查看邻居表
ospf默认优先级为110。要让R2成为DR,修改优先级>110。
我们再把R1的优先级改为90。理想状态下,DR变成了R2,BDR变成了R3,DOTHER变成了R1。记得要清除OSPF进程。
小细节——不仅仅要clear R1,还要clear R2和R3。
再来查看
总结:对于DR和BDR的选举,优先级>回环口>RID大小
略
Router(config)#router ospf 110
Router(config-router)#router-id 1.1.1.1 //手工指定rid (要先进入进程号)
还是那句话,记得clear ospf进程。