OSPF基础
- Hello包的作用是为了 让别人发现我
1.OSPF 作用: 产生路由表
2.怎样产生 routing-table (RT)
核心原理
2.1 邻居表 ---> DR-->LSA
2.2 LSDB 链路状态数据库 拓扑表 -->SPF(最短路径优先算法)
2.3 RT(routing table) 路由表
DR: 根据端口的
为什么选DR:减少LSA的交换次数
在MA多路访问的环境下
把所有的LSA都发给DR,然后再由DR发送给其他人 其他人之间就不需要互相交换了
怎么选?
1.接口优先级 (0-255 越大越优) 0代表不参与DR选举
2.router-ID ()
1.手动配置为准
2.如果没有手动配置则会自动选举
(优先选最大IP的环回口 如果没有 择选最大IP的物理口)
3.不能抢占
修改router-ID 必须重启OSPF 再用户模式下 >reset ospf protool(进程)
点到点网络中是不需要选DR的 (P2P)
LSA:
DR/BDR 与其他路由器为邻接(FULL) 普通的路由器之间 只是邻居(2-WAY)
Ruter-ID(RID) 除了再DR选举有辅助作用,还有其他作用吗?
OSPF设计思想
给每一份链路状态(LSA)打上自己的名字 这个名字就是router-id
动态路由分为两类:
1.距离矢量路由协议 DV (RIP)
2.链路状态路由协议 LS (OSPF)
LSDB数据库存储的东西:
每台路由器的第一手资料 (LSA) 链路状态
唯一的缺点就是 数据库存储的东西 太大
第二个核心:
LSDB 太大 如何优划?
HCIA: 学习的是划分区域---> 每个区域只再内部同步LSDB
如何划分的? 区域划分也是根据端口划分的
必须要有一个区域0 --->骨干区域
其他区域必须和区域0相连
OSPF要求:邻居必须同属于一个区域
ABR:一部分接口属于普通区域,另外一部分数据区域0
有两套LSDB 一个属于区域0 一个属于其他区域
第二种解决方法就是 LSA分类
第三种方法就是 LSA 过滤
OSPF邻居建立过程
IP阶段第一个内容: 状态机 指的是邻居的状态
从邻居表----->LSDB 这个过程
当路由器刚启动的时候是没有任何邻居的
1.Down 没有发现邻居 向外发送Hello包 224.0.0.5
没有收到hello包
NB 非广播(不支持广播) 帧中继 VPN (目前几乎已经淘汰了)
也可以发送单播hello包 必须手动配置邻居
尝试状态 也是没有收到Hello包的
2.init 初始化状态
收到了hello包 (RID NBR(null)) NBR:邻居
发现新邻居,但是邻居没有发现我
3. 2-WAY 双向通信
收到了hello包 (RID:2.2.2.2 NBR:1.1.1.1)
邻居也发现了我
等待 MA 40秒 选DR P2P 不选DR
4. Exstart 预启动
会先交换第一个DD报文 RID越大就是主,小的就是从
使用序号seq 隐式确认
比如B是主 则B发送一个序号为100 A也会跟着发序号为100
MTU 1500字节 数据传输单元,如果不一致可能会导致卡在这里
5. Exchange 预交换
根据序号,完成DD报文的后面的交换
4.5和起来 做了一件事 :交换机了LSDB描述信息 (DD报文)
怎么判断DD报文有没有发完呢? 有一个标记字段来判定双方DD报文是否都发完了
flag 000
第一个0 代表 初始DD报文
第二个0 代表 有没有更多的DD报文了
第三个0 代表 主从关系
当主的发完之后,会发送空的 DD
6.Loading 加载状态
发送LSR 链路状态请求
LSU 链路状态更新 对方的
LSAck 链路状态确认
7. FULL 完成
周期性同步LSDB 1800S 30分钟
如果3600S 60分钟 没有同步LSDB 就会认为超时
链路状态信息
路由信息–>自己的直连(ip mask cost)
拓扑信息—>自己的邻居信息
OSPF支持的网络类型
如果是P2P网络的话 邻居状态会继续往下走,是不需要选DR的
如果是MA网络的话,就会选则DR
选举DR是需要等待 40S 的 40S后选好了DR BDR 后 再有设备接进来 优先级再高也不能抢占DR 除非重启OSPF进程
- OSPF定义了四种网络类型,分别是点到点网络,广播型网络,NBMA网络和点到多点网络。
- 点到点网络是指只把两台路由器直接相连的网络。一个运行PPP的64K串行线路就是一个点到点网络的例子。
- 广播型网络是指支持两台以上路由器,并且具有广播能力的网络。一个含有三台路由器的以太网就是一个广播型网络的例子。
OSPF协议报文头部
OSPF V2 只支持IPv4
建邻居要求 必须满足才能建立邻居
1 router ID 不同
2 Area ID 相同
3验证类型
明文
密文
null
4.mask 掩码需要一致
5.特殊区域相同
6.hello/dead 时间一致
这个时间是可以修改的
- RIP路由器之间是基于UDP 520的报文进行通信,OSPF也有其规定的通信标准。OSPF使用IP承载其报文,协议号为89。
- 在OSPF Packet部分,所有的OSPF报文均使用相同的OSPF报文头部:
- Version :对于当前所使用的OSPFv2,该字段的值为2。
- Type:OSPF报文类型。
- Packet length:表示整个OSPF报文的长度,单位是字节。
- Router ID:表示生成此报文的路由器的Router ID。
- Area ID:表示此报文需要被通告到的区域。
- Checksum:校验字段,其校验的范围是整个OSPF报文,包括OSPF报文头部。
- Auth Type:为0时表示不认证;为1时表示简单的明文密码认证;为2时表示加密(MD5)认证。
- Authentication:认证所需的信息。该字段的内容随AuType的值不同而不同。
OSPF报文类型
三种宣告的方式 network 使用通配符宣告接口
通配符0表示检测 1表示忽略
12.1.1.1 0.0.0.0 表示检测32位
比如路由器接口如下:
12.1.1.1/24 12.1.2.1/24 12.1.3.1/24
1.network 12.1.1.1 0.0.0.0 只有12.1.1.1/24启用OSPF
2.network 12.1.1.1 0.0.0.255 只有12.1.1.1/24启用OSPF
3.network 12.1.1.1 0.0.255.255 三个接口全部启用OSPF
OSPF产生的路由的掩码和宣告的通配符无关
1.通配符只能控制宣告的范围大小 不能控制产生路由的掩码
2.产生路由的掩码,与接口实际配置的掩码相同
3.环回口是特例,无论配置多少位掩码 都会产生32位掩码
4.环回口默认网络类型为P2P 如果修改位Broadcast,就可以产生与接口配置的掩码相同的路由
[R1-LoopBack0]ospf network-type p2p
1.产生32位路由
int lo0
ip add 1.1.1.1 32
ospf 1
area 0
network 1.1.1.0 0.0.0.255
2.产生32位路由
int lo0
ip add 1.1.1.1 24
ospf 1
area 0
network 1.1.1.0 0.0.0.255
3.产生32位路由
int lo0
ip add 1.1.1.1 24
ospf 1
area 0
network 1.1.1.0 0.0.0.0
4.1.产生24位路由
int lo0
ip add 1.1.1.1 24
ospf network-type broadcast //把该端口改为广播类型
ospf 1
area 0
network 1.1.1.0 0.0.0.255
修改hello报的时间 死亡时间会变为 4倍hello时间
[R1-GigabitEthernet0/0/0]ospf timer hello 3
作用:加快了删除邻居
P2MP 点到多点 不选DR 邻接邻居全都是full
造成的问题就是 LSA过多的交换
点到多点的hello时间为30
修改为非广播 就是不支持广播的
[R1-GigabitEthernet0/0/0]ospf network-type nbma
尝试单播的方式发送hello包
ospf 1 router-id 1.1.1.1
peer 12.1.1.2