目录
全网最详解答OSPF基础
OSPF的头部:
版本号:2--指的是ospf协议的版本
类型:指的是数据包的类型
- 1--Hello
- 2---DBD
- 3---LSR
- 4---LSU
- 5--LSACK
报文长度:
路由器ID---指的就是RID---携带的是发出数据包设备的RID
区域ID---发出数据包接口所在区域的ID
校验和---校验书的完整性
验证类型:
认证类型如下
1,不认证 (none)(0)2,明文认证(simpl)(1)3,md5--比对摘要值(2)
Hello包 :
周期发现,建立和保活邻居关系,DR和BDR选举
网络掩码---指的是数据包发出的接口对应的网络掩码---邻居双方这个参数必须相同才能建立邻居关系,但是这个参数在点到点网络中是不生效的
Hello间隔:--hello时间(死亡时间)---这两个不相同不能建立邻居关系
可选项--每一个标记都代表设备遵循OSPF 的某一个特性
其中包含特殊区域的标记位。这个标记不同,则邻居无法建立
路由器优先级:指发出数据包的接口在进行DR/BDR的选举的优先级
DR/BDR---在没有选出来之前,使用0.0.0.0填充,选出来过后,用对应接口的IP进行填充
邻居---可变长的.....
以上标红部分为影响邻居关系建立的参数
还有一个---认证类型 --这是公共部分的内容(头部)
头部:
Hello:
DBD包:
数据库描述报文,----使用未携带数据的DBD包进行主从关系的选举
----使用携带数据的DBD报文进行共享数据库摘要信息
接口最大传输单元---MTU---发送接口所支持的MTU值,华为设备默认不开启检测MTU值。
开启MTU值:R1-GigabitEthernet0/0/0]ospf mtu-enable
注意:MTU值不同无法建立邻接关系---如果双方设备都开启MTU值的检测,如果DBD中的MTU值不同会卡在EXSTART的状态,因为主从关系选举的时候就会发送这个DBD包,里面会有MTU值,就会比对MTU的大小
I位--init--该为置1,表示该数据包是主从关系选举的数据包--那么这个数据包的LSA的头部数据将不复存在
M--more--该位置1表示不止一个DBD包,后面还有其他的DBD包需要发送;为0表示发送完了
MS---master---该位置1,表示发送这个数据包的设备为主
DD序列号----1,隐性确认--可靠性 2,排序--在DBD报文中会逐次加1,确保DBD报文传输的可靠性和有序性
过程分析:当A刚开始跟B进行通信的时候,此时就是主从关系的选举,I位置1,M位置1,MS也为1(因为刚开始发的时候都认为自己是主),所以就可以确认seq也是一个随机值(序列号);此后B准备给A发,序列号也为一个随机值,并且可选项也都为1,如果此时A为主,那么B就会给A发送LSA的摘要信息,此时B就会给A发第二个DBD包此时I=0,M=0,MS=0,然后seq(b)就该跟A一样(为主的主导隐性确认),发完后,A也会给B发 I=M=0,MS=1,seq=a+1
抓包实现:
最开始两个数据包发送未携带数据的DBD包进行主从关系的选举:此时里面都该为1,都认为自己DR:R2:
R1:
然后因为R2的RID比较大,R2顺利成章成为了DR:
最后seq+1
诶?我已经交互完了,并且,我上一个的M位已经置0了,为什么还有R1的DBD包呢?
并且我发现:
I位置0了,说明不是主从关系的选举了,但是我下面也没有LSA的头部信息
通过分析,从需要发送这个确认收到了主的摘要信息,这里只有序列号,所以其实这个是隐性确认的DBD包,通过序列号进行确认
DBD包的三种格式:
1,I为置1,进行主从关系选举
2,I位置0,携带LSA信息
3,I位置0,且不携带LSA的头部信息
LSR包:
三个参数其实是一组参数---都是为了去唯一标识一条LSA信息--也叫LSA的三元组
LSU--链路状态更新报文
真正携带LSA信息的数据包