实验环境如上图,抓取AR1的G0/0/1端口,对ospf的5种报文形式进行分析
第一步:启动后,各端口开始发送hello报文
形势图如下:
hello报文为组播报文。
hello报文内容分析:
确认邻接关系过程大概如下:
第一步,A发送组播hello报文,邻居为空,B接到hello报文,知道自己有个A的邻居,而且hello的各项数据都和自己匹配(hello报文的时间、区域id、区域类型、认证等)
第二步,B发送组播hello报文,邻居带上他已知的A,A在这里看到了自己,并也知道了B,也发现各项数据都匹配。
第三步:A发送组播hello报文,另据带上他已知的B,B收到后在hello报文看到了自己,于是邻居关系建立。
满足:1知道2,1知道2知道1
2知道1,2知道1知道2,就可以建立邻居关系(2-way)
这就是著名的ospf三次握手。
文字太难理解,可以看图:
这里涵盖了ospf的三个状态:down,init,2-way,down是双方不知道,init是正在ospf三次握手,2-way是建立邻居关系。
进入2-way后,便开始进入ExStart状态发送dd报文(DRother和DRother之间不会走到这一步,他们只会停留在2-way状态)
首先是12.0.0.2发送给12.0.0.1
报文分析:
双方通过dd报文里交换自己掌握的路由表信息(LSA的头部),如果发现对方有自己所欠缺的路由表信息,就会发送LSR(申请发送更详细的路由表来)
12.0.0.2申请LSR
具体内容如下
然后是12.0.0.1发送回复报文-LSU
可以看到里面有介绍非常详细的路由表。
12.0.0.2收到LSU之后后的回复LSA(表明已收到)
总结:
OSPF的发送的报文的标准流程大概如下:
首先互相发送HELLO报文,确认环境中有多少个邻居存在。(互不相识是down,正在三次握手是init,完成是邻居2-way)
这一步会通过优先级route id确认环境中的DR(指定路由器)和BDR(备用路由器)和DR other(其他路由器),在这个环节,就只有DR和BDR会和其他路由器交流,DRother之间是不会继续的。
继续的话则会发送DD报文,确认主从关系,互相交流自己掌握的路由表,也就是LSDB(仅仅是个大概,LSDB的头部报文),这一步是Ex-start.
若通过DD报文A发现B掌握了自己没有的路由表,则会向B发送LSR-路由表申请,里面会包含A想要申请的路由信息,而B收到后会发送LDU,其中包含LSDB的详细信息的报文。A在收到了LSU后会组播发送LDA,告诉其他路由器自己已经学会了新的表格。