OSPF实验
说明:若有不对之处,欢迎指出
1 报文交互以及状态
1.1组网图
1.2配置接口的IP地址(略)和配置OSPF基本功能
在配置R1和R2之前,可以在R1的0/0/0接口抓包,便于后面通过报文分析整个交互流程
先配置R1:
[Huawei]router id 1.1.1.1
[Huawei]ospf
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 10.10.10.1 0.0.0.255
再配置R2:
[Huawei]router id 2.2.2.2
[Huawei]ospf
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 10.10.10.2 0.0.0.255
1.3抓包分析
当R1开启OSPF,R2未开启OSPF时,R1以组播形式向224.0.0.5(OSPF路由器)发送hello报文。源接口未激活 OSPF的IP,目的地址为组播IP224.0.0.5,source router为1.1.1.1,Area为0,MASK为24位,hello间隔为10s,此时未建立邻居,所以邻居字段为空。
Hello报文格式如下:
当R2部署部署OSPF后,R2周期放hello报文
R1收到R2的hello报文。R1在自己发送的hello报文的邻居字段写入r2的router ID2.2.2.2。
R1发给R2
R2收到R1的hello报文,并在报文的邻居字段发现自己的router-id,于是R2知道R1发现了自己,收到过自己的报文,此时R2将R1添加到邻居表,将R1的状态置位2-way。2-way建立后,进入ExStart状态R1和R2进行DD报文交互,在DD报文交互时,R1和R2互相发送不携带任何LSA信息的报文,并将各自的比特位设置为1,MS设置为1进行Master/Slave协商,即自认为自己是master。DD报文中I位为1时,为选举M/S。0时为M/S选举完成。M位(more)为1即还有更多 DD报文,MS位为1即为Master,0为salve。R2给R1发送报文,认为自己是Master,序列号为306
R2发给R1
R1收到R2的报文。R1认为自己是Master,序列号为306.发送给R2
R1发给R2
R2收到R1的报文,由于R2的router-id大,此时胜出为Master。DD报文交互由R2主导使用R2规定的序列号306。当Master/Slave选举完成后,R1进入Exchange状态,发送 DD报文给R2,由于R2为Master,R1向R2发送报文时候用R2规定的序列号306。
协商完成 R1发给R2
R2收到报文后,R2进入Exchange状态。R2发送报文给R1,sequence加1,双方有多个LSA时候,需要交互多个DD报文,Master路由器将DD序列号逐次加1,Slave使用Master的序列号发送自己的DD报文
R2发给R1
R1收到R2的报文,R1与R2各有1个LSA,也就是R1向R2发送LSA,序号为306,R2向R 发送报文序号为307,此后再无多余的LSA,即M位为0。R2向R1发送LSA后,此LSA为最后一个,即M设置为0.R1收到R2的LSA后,确认此为R2最后一个报文。R1与R2收到对方最后一个DD报文后,就彻底知道对方的LSDB的LSA(头部)
当通过DD报文知道对端的LSA后,状态变为Loading,路由器向邻居发送LSR请求LSA完整数据,对方通过LSU进行回应,LSU包括 LSA的完整信息,在收到LSU报文后,路由器发送LSack的LSR进行确认,DD报文是头部,LSU报文是完成LUA信息。
R1向R2的LS Update为1类LSA。同理R2向R1的也是1类LSA
当网络类型为广播形式时候,需要选举DR和BDR,所有的OSPF路由器将LSA信息发送给224.0.0.5即 OSPF路由器,如果需要向DR和BDR发送OSPF报文,使用组播224.0.0.6为目的地址。
对于R1和R2本身只有1类LSA即Router lsa。对于DR会产生2类LSA即network lsa。2类LSA描述DR接入网络中与之形成邻接关系的路由器,只在接口所属区域内泛洪。R1向224.0.0.5泛洪。
R2收到R1发送2类LSA后,进行组播LS ack确认,1类LSA通过单播进行请求确认,2类LSA通过组播进行请求确认
当R1与R2没有其他LSA需要从邻居获取后,便将邻居状态切换为FULL
2 DR/BDR选举实验
2.1组网图
2.2配置接口的IP地址(略)和配置OSPF基本功能
先配置R3:
[Huawei]router id 3.3.3.3
[Huawei]ospf
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255
再配置R1:
[Huawei]router id 1.1.1.1
[Huawei]ospf
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255
再配置R2:
[Huawei]router id 2.2.2.2
[Huawei]ospf
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255
再配置R4:
[Huawei]router id 4.4.4.4
[Huawei]ospf
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255
2.3实验分析
1、路由器刚启用OSPF后,用dispaly ospf peer 命令查看各路由器邻居关系和DR/BDR情况,如下图
由图可以看到,DR为192.168.1.3,BDR为192.168.1.1。因为最先启用OSPF协议的是R3,R3发hello包给其他路由器,认定自己是DR,由于DR/BDR的非抢占性,即使后面其他路由依次启用OSPF协议,也认定R3为DR,依次R1启用OSPF协议,R1为BDR。这里体现了OSPF的非抢占性
2、此时因为4个路由器的优先级都是1,将R4的优先级设置为100,进入接口后设置,命令为ospf dr-priority 100。再输入dis ospf peer,查看DR/BDR变化情况
如上图可以看出,DR/BDR是没有变化的,也就是网络中DR/BDR已经存在的情况下,接口上的路由器优先级的配置并不会立即生效
3、将R3的接口shutdown后,观察DR/BDR的变化情况,如下图
此时之前的BDR192.168.1.1变为DR。由于192.168.1.4的优先级比192.168.1.2的优先级高,于是成为BDR,接下来马上可以看见其他的变化
此时DR为192.168.1.4,因为在R1,R2,R4中,R4的优先级是最高的,所以R4选举成为DR。剩下R1和R2,优先级是一样的,此时比较router id,R2的Routerid2.2.2.2比R1的Router id 1.1.1.1大,所以R2选举成为BDR。这两次变化可以发现其实当DR挂了后最开始选举的BDR替代了BDR,最后再重新选举了一次DR/BDR
4、总结:
l 优先级为0的路由器不参与DR/BDR的选举
通过这个条件可以控制DR/BDR的选举,如果想让一个LAN上某台路由器永远是DR,则可以将其他路由器的DR 优先级设置为0
l DR/BDR是终身制,不是被抢占的
只要某台路由器在一个LAN上,已经被选取为DR,则它会一直是DR!只有等它重启或者关机了,才会重新选取,也就是说DR/BDR是终身制的,这样做主要是为了网络的稳定,在真实网络中,稳定是压倒一切的!即使某种技术最新,某个设备性能最强,但是如果影响到稳定,就不会被优先选择。
l 先选取BDR,后选取DR
在一个LAN上,先根据优先级和Router ID 选取一个BDR;如果 LAN上此时没有DR,则BDR会转化为DR,在LAN上重新选取BDR
l 其他路由器(DR other)需要和BDR建立邻接关系
BDR首先和DR形成邻接关系;其他路由器(DR other)也要和BDR形成邻接关系
这样做是有原因的,当DR出现故障后,BDR会成为新的DR。如果DRother不和
BDR形成邻接关系,网络的流量就会中断时间很长,因为建立邻居关系需要花很长的时间。在这段时间内,网内流量是不通的。
DR other和BDR形成邻接关系,当BDR切换为DR时,只需要发送 LSA,向DR other 通知新的DR即可,LSDB的内容基本不变,使得BDR起到真正的备份作用。
l 网络中DR/BDR已经存在的情况下,接口上的路由器优先级的配置并不会立即生效
l 当路由器的邻居关系稳定后如果邻居的状态是FULL,这说明他和邻居之间形成了邻接关系
l 如果邻居的关系是2-way,则说明他们都不是DR或BDR,两者之间不需要交换LSA
l 如果在一个MA网络上只有唯一的一台具有DR选举资格的路由器,那么热这台路由器将成为DR,而且在这个网络上没有BDR,其他所有的路由器都将只和这台DR路由器建立邻接关系
l 如果没有具有DR选举资格的路由器和一个MA网络相连(例如所有路由器的接口DR优先级都是0)那么这个网络上将没有DR或者BDR路由器,而且也不建立任何邻接关系
l DR与BDR,DR与Drother,BDR 与Drother之间都是FULL状态,Drother之间都是2-way状态,所有的Drother都只和DR以及BDR建立邻接关系
l DROther感知到网络拓扑的变化时,向组播地址224.0.0.6发送LSU报文,DR和BDR会监听这个组播地址
l DR使用组播地址224.0.0.5发送LSU报文,而其他的OSPF路由器则监听这个组播地址;
3 OSPF多区域、虚连接、LSA
3.1组网图
3.2配置接口IP和配置OSPF
[AR1]router id 1.1.1.1 //手动指定全局Router ID
[AR1]ospf
[AR1-ospf-1]are 1
[AR1-ospf-1-area-0.0.0.1]net 1.1.1.0 0.0.0.255
[AR2]router id 1.1.1.2
[AR2]ospf
[AR2-ospf-1]are 1
[AR2-ospf-1-area-0.0.0.1]net 1.1.1.0 0.0.0.255
[AR2-ospf-1-area-0.0.0.1]qu
[AR2-ospf-1]area 0
[AR2-ospf-1-area-0.0.0.0]net 2.2.2.0 0.0.0.255
[AR3]router id 2.2.2.2
[AR3]ospf
[AR3-ospf-1]area 0
[AR3-ospf-1-area-0.0.0.0]net 2.2.2.0 0.0.0.255
[AR3-ospf-1-area-0.0.0.0]net 3.3.3.0 0.0.0.255
[AR4]router id 3.3.3.2
[AR4]ospf
[AR4-ospf-1]are 0
[AR4-ospf-1-area-0.0.0.0]net 3.3.3.0 0.0.0.255
[AR4-ospf-1-area-0.0.0.0]qu
[AR4-ospf-1]area 2
[AR4-ospf-1-area-0.0.0.2]net 4.4.4.0 0.0.0.255
[AR5]router id 4.4.4.2
[AR5]ospf
[AR5-ospf-1]area 2
[AR5-ospf-1-area-0.0.0.2]net 4.4.4.0 0.0.0.255
[AR5-ospf-1-area-0.0.0.2]qu
[AR5-ospf-1]area 3
[AR5-ospf-1-area-0.0.0.3]net 5.5.5.0 0.0.0.255
[AR6]router id 5.5.5.2
[AR6]ospf
[AR6-ospf-1]are 3
[AR6-ospf-1-area-0.0.0.3]net 5.5.5.0 0.0.0.255
虚连接:
[AR4]ospf
[AR4-ospf-1]area 2
[AR4-ospf-1-area-0.0.0.2]vlink-peer 4.4.4.2
[AR5]ospf
[AR5-ospf-1]area 2
[AR5-ospf-1-area-0.0.0.2]vlink-peer 3.3.3.2
AR3上引入环回口地址,通过引入直连可实现
ospf 1
import-route direct route-policy test
#
route-policy test permit node 0
if-match ip-prefix test
#
ip ip-prefix test index 9 permit 172.16.1.0 24
ip ip-prefix test index 10 permit 172.16.2.0 24
配置到此可查看各路由器信息并分析
AREA1配置Stub
未配置之前查看routing
配置Stub需要在区域内所有路由器进行配置
[AR1]ospf
[AR1-ospf-1]area 1
[AR1-ospf-1-area-0.0.0.1]stub
[AR2]ospf
[AR2-ospf-1]area 1
[AR2-ospf-1-area-0.0.0.1]stub
Area1配置完全Stub
[AR2-ospf-1-area-0.0.0.1]stub no-summary
Area1配置NSSA
[AR1]ospf
[AR1-ospf-1]area 1
[AR1-ospf-1-area-0.0.0.1]nssa
[AR2]ospf
[AR2-ospf-1]area 1
[AR2-ospf-1-area-0.0.0.1]nssa
3.3实验分析
R1:
分析R1的OSPF lsdb
如上图,1类LSA (Router)有两条,就是本区域的路由器产生的,2类LSA(Network)有1条,是由 DR产生的,注意他的Metric为0,三类LSA(sum-Net)有四条是由ABR产生的,,例如LINKStrateID为5.5.5.0 AdvRouter 1.1.1.2 可以这样理解,
可以看见此区域产生了两条1类LSA, 每条1类LSA都有一个 LINKID,也就是每台路由器各有一个接口直连到此区域,下面是1类LSA的详细信息
1类 LSA就是每台路由器描述自己家门口的状态,并且只会告诉给全村的人,只在本区域内泛洪,RID为1.1.1.2的路由器如上图有写是ABR,这个接口属于AREA1,1类LSA的信息都是本路由器的信息
LSA2描述TransNet(包括Broadcast和NBMA)网络信息,由DR产生,描述在该MA网络上连接的所有路由器的RouterID(包括DR)以及该MA网络的掩码。LSA2只在本区域内泛红,不允许跨域ABR,如上图LSA2没有COST字段,因此需要借助1类LSA来进行SPF算法
LSA3是网络汇总LSA,由ABR产生,R2既属于R1又属于R0,她是一台ABR,
它将AREA1的LSA做个归纳为AREA0生成3类LSA,就是将Area1这个区域的路由信息泛红到Area0中,然后泛红到其他区域,这样其他路由器能根据这个计算到AREA1的路由,反之,区域1的路由器也可以通过ABR泛红过来的其他LSA3了解其他区域的路由,例如,LINKID 5.5.5.0 AdvRouter1.1.1.2可以理解为本区域的路由器要想去5.5.5.0网段,首先得去找1.1.1.2,把本区域的路由信息汇总给1.1.1.2,这个路由器再把那些信息通告出去交给5.5.5.0网段,至于后面怎么交给5.5.5.0网段就不用管了,反正汇总给AdvRouter 1.1.1.2就行了。
分析4类LSA之前先看看5类LSA
LSA5 为外部路由,被重发布进入OSPF以后,将产生5类LSA,在OSPF中进行传递
LSA5由ASBR产生。这里R3就是ASBR,R3将172.16.2.0/24和172.16.1.0/24网段重发布进入了OSPF,可以这样理解,本区域的路由器想要去外部路由或者想要知道外部路由信息得先知道去哪里找,这里通告者为2.2.2.2,那就知道了把信息交给2.2.2.2,他知道怎么去往外部路由。但是从本路由器到2.2.2.2还是一个问题,这里就引入了LSA4,下面看LSA4
LSA4 是一个指向ASBR的LSA,由该LSAB所在的区域中的ABR产生,ASBR作为域边界路由器,将外部的路由通过重发布的方式注入了OSPF区域,这些外部路由在OSPF中进行传递,而我们内部的路由器想要去外部,则需要知道1、知道外部路由已经被注入2、知道ASBR的位置,将信息交给 ASBR,而有些路由信息和ASBR不在一个区域,那么就需要ABR来传递,因此LSA4由ABR产生,用来告诉与ASBR不在同一个区域内的其他OSPF Router关于外部路由的信息。
这个也可以理解为 内部路由器要去外部路由,将信息交给ASBR,但是不能直接去ASBR2.2.2.2,如上图路由要到2.2.2.2 看他的通告者1.1.1.2 将内部路由交给ABR1.1.1.2就行了
下面看看R2的路由信息:
R2是ABR,其接口分别处在area1和area0,area0区域中有4.4.4.2这条LSA信息,因为在R4和R5路由器配置了虚连接,如果没有配置虚连接,这里是不会有4.4.4.2这条LSA信息的,有了虚连接后,相当于R5和R3之间可以直接联系,不经过R4的同意。其他的LSA如R1分析一样。
R3
R3的路由信息和R2差不多
R4
R5
R5的路由信息以上区域LSA多了一个区域0的LSA信息,还是因为R5和R4之间配置了虚连接,192.168.1.1和192.168.2.1LSA信息是R1中通告进去的。
R6的OSPF LSA如下图和R3R4 一个道理
4 OSPF特殊区域
4.1组网图
4.2配置接口IP和配置OSPF
[RouterA] router id 10.2.1.1
[RouterA] ospf
[RouterA-ospf-1] area 0
[RouterA-ospf-1-area-0.0.0.0] network 10.1.1.0 0.0.0.255
[RouterA-ospf-1-area-0.0.0.0] quit
[RouterA-ospf-1] area 1
[RouterA-ospf-1-area-0.0.0.1] network 10.2.1.0 0.0.0.255
[RouterA-ospf-1-area-0.0.0.1] quit
[RouterA-ospf-1] quit
[RouterB] router id 10.3.1.1
[RouterB] ospf
[RouterB-ospf-1] area 0
[RouterB-ospf-1-area-0.0.0.0] network 10.1.1.0 0.0.0.255
[RouterB-ospf-1-area-0.0.0.0] quit
[RouterB-ospf-1] area 2
[RouterB-ospf-1-area-0.0.0.2] network 10.3.1.0 0.0.0.255
[RouterB-ospf-1-area-0.0.0.2] quit
[RouterB-ospf-1] quit
[RouterC] router id 10.4.1.1
[RouterC] ospf
[RouterC-ospf-1] area 1
[RouterC-ospf-1-area-0.0.0.1] network 10.2.1.0 0.0.0.255
[RouterC-ospf-1-area-0.0.0.1] network 10.4.1.0 0.0.0.255
[RouterC-ospf-1-area-0.0.0.1] quit
[RouterC-ospf-1] quit
[RouterD] router id 10.5.1.1
[RouterD] ospf
[RouterD-ospf-1] area 2
[RouterD-ospf-1-area-0.0.0.2] network 10.3.1.0 0.0.0.255
[RouterD-ospf-1-area-0.0.0.2] network 10.5.1.0 0.0.0.255
[RouterD-ospf-1-area-0.0.0.2] quit
[RouterD-ospf-1] quit
[RouterD] ip route-static 3.1.2.1 24 10.5.1.2
[RouterD] ospf
[RouterD-ospf-1] import-route static
[RouterD-ospf-1] quit
配置stub区域
[RouterA] ospf
[RouterA-ospf-1] area 1
[RouterA-ospf-1-area-0.0.0.1] stub
[RouterA-ospf-1-area-0.0.0.1] quit
[RouterA-ospf-1] quit
[RouterC] ospf
[RouterC-ospf-1] area 1
[RouterC-ospf-1-area-0.0.0.1] stub
[RouterC-ospf-1-area-0.0.0.1] quit
[RouterC-ospf-1] quit
配置AREA1为Toally stub区域
[RouterA] ospf
[RouterA-ospf-1] area 1
[RouterA-ospf-1-area-0.0.0.1] stub no-summary
[RouterA-ospf-1-area-0.0.0.1] quit
配置AREA1为NSSA区域
[RouterA-ospf-1] area 1
[RouterA-ospf-1-area-0.0.0.1] nssa
[RouterA-ospf-1-area-0.0.0.1] quit
[RouterA-ospf-1] quit
[RouterC] ospf
[RouterC-ospf-1] area 1
[RouterC-ospf-1-area-0.0.0.1] nssa
[RouterC-ospf-1-area-0.0.0.1] quit
[RouterC-ospf-1] quit
配置RC引入静态路由
[RouterC] ip route-static 3.1.2.1 24 10.4.1.2
[RouterC] ospf
[RouterC-ospf-1] import-route static
[RouterC-ospf-1] quit
4.3实验分析
查看RC的ospf lsdb
引入静态路由后查看RC的ABR/ASBR的信息
将RA和RC设置为stub区域后查看RC路由表,已经看不到AS外部的路由,取而代之的是一条缺省路由
查看RC的ospf lsdb信息,是1、2、3类LSA ,LSA3是0.0.0.0/0(ABR向区域内发起的一条3类缺省路由LSA)
配置AREA1为Toally stub区域后,可以查看RC的OSPF的路由表,看到路由表项进一步减少,只保留了一条通往外部区域的缺省路由
查看RC的ospf lsdb 信息,是1、2、3类LSA,LSA3是0.0.0.0/0(ABR向区域内发起的一条3类缺省路由LSA)其余的LSA都减少了
配置AREA1为 NSSA区域后查看 RC的ospf lsdb
RC的OSPF lsdb 只看见1、2、3、7类路由了
RC配置一条静态路由后,可以看到 RD路由表从 NSSA区域引入了一条外部路由
配置静态路由前
配置静态路由后