**OSPF路由原理——邻居建立过程抓包演示 **
一,知识预备
1.OSPF通告网络时通配符掩码如何写?
在通告网络时用命令network [network-address] [wildcard-mask] area [area-id]
这个 [wildcard-mask] 就是通配符掩码
直接举例
例1:network 4.4.4.4 0.0.0.255 area 0
将ip和通配符掩码单独拿出来再转换到二进制
00000100 00000100 00000100 00000100 (ip)
00000000 00000000 00000000 11111111 (通配符掩码)
通配符为0的为固定位,为1的为可变位,IP的后8位可变,前24位固定不变
即IP为 00000100 00000100 00000100 XXXXXXXX 的都在通告范围内
该路由器IP为“4.4.4.1~254“的接口都被配置进该区域(4.4.4.0和4.4.4.255排除)
例2:network 10.1.1.0 0.0.0.15 area 0
转换到二进制
00001010 00000001 00000001 00000000 (ip)
00000000 00000000 00000000 00001111(通配符掩码)
通告范围为 00001010 00000001 00000001 0000XXXX(10.1.1.1~15)
2.网络类型
OSPF网络类型
网络类型 | 选举DR | Hello间隔 | Dead间隔 |
---|---|---|---|
广播多路访问(broadcase) | 是 | 10秒 | 40秒 |
非广播多路访问(non-broadcase NBMA) | 是 | 30秒 | 120秒 |
点到多点(point-to-multipoint) | 否 | 30秒 | 120秒 |
点到点 (point-to-point) | 否 | 10秒 | 40秒 |
查看接口网络类型
内容分析
show ip ospf interface s1/1 //命令
Serial1/1 is up, line protocol is down
//接口up 链路down
Internet Address 1.1.1.1/8, Area 0
// 接口ip 掩码长度 所在区域
Process ID 1, Router ID 1.1.1.1, Network Type POINT_TO_POINT, Cost: 64
// 进程id 路由器id 网络类型 度量值
Transmit Delay is 1 sec, State DOWN
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
// Hello间隔 dead间隔
oob-resync timeout 40
3.DR/DBR选举
时间:邻居关系在two-way之后
选举规则(大的优先)
- 接口优先级(默认为1 )
- Router-id
- 路由器loopback的IP
- 物理接口IP
修改接口优先级(接口模式下)
R1(config-if)#ip ospf priority 222 //将接口优先级修改为222
思科特有:当优先级为0时不参加DR/BDR的选举。
OSPF区域类型
-
主干区域(骨干区域)连接各个区域的中心,就是area 0
-
标准区域 就很普通
-
末节区域(stub area)不接受外部自治系统的路由信息
-
次末节区域 (not-to-stubby nnsa)接收7类LSA,ABR负责把7类LSA转换成5类LSA。
-
完全末节区域 (totally stubby area)cisco特有:不接受外部自治系统路由,自治系统内其他区域路由的汇总。
OSPF LSA类型(常用的有6种)
类型 | 名称 | 路由代码 | 产生者 | 描述 |
---|---|---|---|---|
1 | Router LSA | O | 所有路由器 | 描述路由器上连接到某一个区域的链路或者某一个接口的状态信息。只在区域内扩散。链路状态ID为本路由器ID |
2 | Network LSA | O | DR | 描述一个多路访问网络和与之相连的所有网络,区域内扩散,链路状态ID为DR接口IP |
3 | Network summary LSA | O IA | ABR | 将区域内的网络通告给OSPF自治系统中的其他区域,链路状态ID为目标网络的地址 |
4 | ASBR summary LSA | O IA | ABR | 描述ABSR的可达性,链路状态ID为ABSR路由器的ID |
5 | Autonomous system external LSA | O E1 或 O E2 | ABSR | 含有自治系统外的路由信息,链路状态为外部网络的地址 |
7 | NSSA External LSA | O N1 或 O N2 | ABSR | ABSR产生的关于NSSA的信息,区域扩散,ABR可以将7类LSA转换为5类LSA,链路状态为外部网络的地址 |
5类LSA有E1,E2俩类型,E2类型在OSPF区域内传播不修改度量(Cost)值,E1会计算后添加度量值,默认是E2.
路由器写表时优先写类型为 O 的路由,尽管类型为 O IA 的路由度量值第也优先写O类的路由
简单了解OSPF数据包类型
前提知识:
- LSDB 描述路由器的路由表数据库
- LAS 描述单条路由表
-
Hello包
建立和维护OSPF关系。 -
DBD数据包(DataBase Description)
包含发送路由器的链路状态数据库的简略列表
(DBD包有3个字节用来选举主从路由器 ——flag字段:由3个bit构成“I,M,MS”
I:初始位,第一个DBD包表示为1,后续为0。
M:后继位,最后一个DBD包为0,其余为1。
MS:主从位,1表示为主路由器,0表示为从路由器) -
LSR数据包(Link-State Request)
向其他路由器请求对方有,自己没有的LSA。 -
LSU(Link-State Update)
回复LSR,包含一个或多个LSA。 -
LSAck(Link-State Acknowledgement)
包含自己LSDB的简略信息,发送给其他路由器对比是否相同。
OSPF邻居到邻接
1. Down(接口关闭状态)
此阶段与邻居没有交流
2. Init
收到对方的Hello包,但是邻居列表中没有自己路由器ID。(当路由器收到Hello包后将对方ID写进自己邻居表内)
3. Two-way
对方经过Hello包交互后成为邻居(邻居表都有对方)
此阶段进行DR/BDR选举(若不需要选举,直接进入下一状态)
4. Exstatr
发送DBD包,确定DBD序列号,确定主从关系(路由器ID高的为主)
(思科特有:两端接口MTU要相同)
5. Exchange
发送DBD(只带有LSA的报头)告诉对方自己的拥有的路由
6. Loading
确认缺少的LSA后,发送LSR请求自己需要的LSA,并根据对方的LSR发送对方请求的LSA,即发送LSU。
接收LSU后将LSA写表。
最后再发送一个LSAck,LSAck包含自己的LSDB信息,并且比对对方的LSAck,当LSDB同步后进入下一状态。
7. Full
进入Full状态后如果没有状态变化,默认30分钟自动更新一次状态
二,实验环节,感受OSPF建立邻居过程
实验平台在Win10下进行。使用GNS3,路由器使用3725,抓包工具为Wireshark。
搭建两台路由器使用接口f0/0连接(f0/0默认是广播多路,方便演示DR选举)
配置如下
R1
R1#configure terminal
R1(config)#interface loopback 0
R1(config-if)#ip address 1.1.1.1 255.255.255.0
R1(config-if)#exit
R1(config)#int f0/0
R1(config-if)#ip address 12.1.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#router ospf 1
R1(config-router)#network 1.1.1.1 0.0.0.0 area 0
R1(config-router)#network 12.1.1.1 0.0.0.0 area 0
R2
R2#configure terminal
R2(config)#interface loopback0
R2(config-if)#ip address 2.2.2.2 255.255.255.0
R2(config-if)#exit
R2(config)#interface f0/0
R2(config-if)#ip address 12.1.1.2 255.255.255.0
R2(config-if)#exit
R2(config)#router ospf 1
R2(config-router)#network 2.2.2.2 0.0.0.0 a 0
R2(config-router)#network 12.1.1.2 0.0.0.0 a 0
两端路由已配置完毕(R2的接口还没开启)。
开启对线路的抓包
可以看到每隔10秒就有一个源ip为12.1.1.1(R1)的路由在发送目的IP为224.0.0.5的OSPF Hello包,长度为90字节。
此时R1为Init,R2为Down
开启R2的端口
页面会反馈信息:
*Mar 1 00:04:58.107: %OSPF-5-ADJCHG: Process 1, Nbr 1.1.1.1 on FastEthernet0/0 from LOADING to FULL, Loading Done
(表示与F0/0接口关系到Full)
看下抓包:对OSPF进行筛选,观察过程
观察分组号16的Hello包,邻居表中有对方ID
R2收到后写表,邻居表都有对方,状态到Two-way
第一个DBD包分组17(I,M,MS都为1)还没选出主从默认MS位为1
经过俩都收到对方DBD后,DR就能确定了,R2发了一个Hello包(分组19)
翻车,DR是R1。路由器没配优先级默认是1,router-id也没配,环回接口R2(2.2.2.2)大于R1(1.1.1.1),所以理应R2为DR,留个眼
进入Exstart状态
R1,R2各发两个DBD(20-23)
前两个更正了I位和MS位并且带有LSA的头部(如分组20)
后两个将M位置0(最后一个DBD)
进入Loading状态:
发送LSR请求(分组24,25)
发送LSU(LSU才发送完整的LSA)
加表后发送LSAck (分组号34,35)
R2广播的LSAck中有产生一条2类LSA(2类LSA由DR产生,组播给域内其他路由器)
LSAck对比无误后进入Full状态。实验完毕。
补充:前面DR选举给了R1原因不明,把线路断了等邻居表超时(40秒)挂掉再连接上就好了
总结:本文主要讲的内容有通配符,DR选举,网络类型,区域类型,LSA类型,OSPF数据包类型,邻居建立过程。
文章为本人学习笔记及经验,如有表达不恰或者错误请谅解。欢迎各位路人甲反馈。