赞
踩
在整个邻居建立过程中,路由器通过发送OSPF包来完成进程间通信。
OSPF的包类型 | 描述 |
---|---|
hello包 | 用于发现和维持邻居关系,选举DR和BDR,周期性发送 |
数据库描述包(DBD) | 用于向邻居发送摘要信息以同步链路状态数据库 |
链路状态请求包(LSR) | 在路由器收到包含新信息的DBR后发送,用于请求更详细的信息 |
链路状态更新包(LSU) | 收到LSR后发送链路状态通告(LSA),一个LSU数据包可能包含几个LSA |
链路状态确认包(LSAck) | 确认已经收到LSU,每个LSA需要被分别确认 |
不同的数据包在不同的状态发送,不同的数据包也有不同的作用。
举个生活中的例子来说明这些数据包的作用:
A村和B村的村民会经常往来,见面说hello(hello包,会周期性地发)。
有一天,附近唯一的位于B村的车站搬迁了,B村的村民首先知道这件事,他告诉A村村民:车站搬迁了!(DBD,对车站搬迁的整件事做了一个概括)
A村村民自然很关心这件事情,想要知道更多的细节,于是A村村民会问:怎么回事啊?搬到哪里去了?(LSR,请求更详细信息)
B村村民于是告诉他:因为什么什么,车站现在在XXX路XX号,周围有什么什么……(LSU,更详细的信息,其中一条条的详细细节可以理解为LSA)
A村村民得知了情况,对B村村民说:好的,我知道了。谢谢你!(LSAck,确认LSU)
其实这个例子也就是在OSPF域中某路由发生变化(车站搬迁),从而让链路状态数据库重新收敛学习路由(A村村民得知车站新地址)的过程。
在OSPF的邻居建立过程中,路由器一共有5种状态:
down、attempt、init、2-way、exstart、exchange、loading、full
路由器刚刚通电,为down状态,在NBMA模式时将进入attempt状态。
attempt状态下路由器会尝试发送hello信息给邻居。
收到了hello信息,路由器进入init状态,并将该hello包的发送者的router-ID添加到hello包(即将从该接口发出去的hello包)的邻居列表中。
路由器接口收到邻居列表中含有自己router-ID的hello包,进入two-way状态,形成OSPF邻居关系,并把给路由器的router-ID添加到自己的OSPF邻居表中。选举出最大的两个router-ID。
进入exstart状态,选举DR和BDR,以及由DR路由器定义DBD序列号。
DR、BDR选举完成后,进入exchange状态,交换DBD信息。
DBD交换完成后,进入loading状态,对链路状态数据库和收到的DBD的LSA头部进行比较,发现自己数据库中没有的LSA就发送LSR,向邻居请求该LSA;邻居收到后,回应LSU;收到邻居发来的LSU,存储这些LSA到自己的链路状态数据库,并发送LSAck确认。
LSA交换完成后,进入full状态,所有形成邻居的OSPF路由器都拥有相同的链路状态数据库。
定期发送hello包,维持邻居关系。
拓扑图如下:
R5与R6通过直连端口相连,R5的e0/0口IP地址为192.168.1.1/24,R6的e0/0口IP地址为192.168.1.2/24。
为了观察OSPF的邻居建立过程,我们先配好R6的OSPF进程,再开启抓包、配置R5的OSPF进程,通过观察R5的数据接收来观察OSPF的邻居建立过程。
(config)#router ospf process-id //开启ospf进程
(config-router)#router-id ip address //手动指定router-ID
(config-router)#network ip address inverse-mask area area-id //宣告网段
(config-if)#ip ospf cost cost //修改接口cost
#show ip ospf neighbor //查看ospf邻居
#debug ip ospf adj //查看路由器邻接的整个过程
配好R6的OSPF进程后,开始抓包,再去配置R5的OSPF进程。
通过抓包软件我们可以看到:
从init状态到exstart状态没有OSPF数据包传送,故我们看不到。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。