OSPF:open shortest path first 链路状态路由协议
1)路由信息传递与路由器计算分离
2)基于SPF算法(最短路径)
3)以“累计链路开销”作为选路参考值
Link State(链路状态)指的是路由器的接口状态,在ospf中路由器的某一接口的链路状态包含了
1)该接口的IP地址以及掩码
2)该接口的带宽
3)该接口所连接的邻居
ospf作为链路状态路由协议,不直接传递各路由器的路由表,而传递链路状态信息,各路由器基于链路状态信息独立计算路由
OSPF工作过程:1、邻居建立 2、同步链路状态数据库 3、计算最优路由
ospf的路由计算过程可以简化描述为
1)路由器之间发现并建立邻居关系
2)每台路由器残生并向邻居泛洪链路状态信息,同时手机来自其他路由器状态信息,完成LSDB(Link State Database)的同步
3)每台路由器基于LSDB通过SPF算法,计算 得到一颗以自己为根的SPT(shortest path tree),再以SPT为基础计算去往各邻居连接网络的最优路由,并形成路由表。
ospf基本工作原理
Router ID:用于在自治系统中唯一标识一台运行ospf的路由器,每台运行的ospf的路由器都有一个Router ID 。
32位无符号整数,格式和ip地址的格式是一样的
Router ID选举规则
1)手动配置OSPF路由器的Router ID(通常建议手动配置)
2)如果没有手动配置Router ID ,则由路由器使用loopback接口中最大的ip地址作为Router ID
3)如果没有配置loopback接口,则路由器使用物理接口中最大的ip地址作为Router ID
注意:OSPF的路由器Router重新配置后,可以通过重置OSPF进程来更新ROUTER id
发现并建立邻居——hello报文
hello报文作用:邻居发现、邻居建立、邻居保持
状态含义:
1)Down:这是邻居的初始状态,表示没有从邻居受到任何信息
2)Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己的Router ID不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。
3)2-way:在此状态下,路由器发现自己的Router ID存在于收到的Hello报文的邻居列表中,已确认可以双向通信
邻居建立过程如下:
①RTA和RTB的Router ID分别为1.1.1.1 和2.2.2.2.当RTA启动ospf后,RTA会发送第一个Hello报文,此报文中邻居列表为空,此时状态为Down,RTB收到RTA的这个Hello报文,状态置为Lint。
② RTB发送Hello报文,此报文中邻居列表为空,RTA收到RTB的Hello报文,状态置为 Init。
③ RTB向RTA发送邻居列表为1.1.1.1的Hello报文,RTA在收到的Hello报文邻居列表 中发现自己的Router ID,状态置为2-way。 ④ RTA向RTB发送邻居列表为2.2.2.2的Hello报文,RTB在收到的Hello报文邻居列表中 发现自己的Router ID,状态置为2-way。
因为邻居都是未知的,所以Hello报文的目的IP地址不是某个特定的单播地址。邻居从无 到有,OSPF采用组播的形式发送Hello报文(目的地址224.0.0.5)。对于不支持组播的 网络,OSPF路由器如何发现邻居呢?
发现并建立邻居—手动建立
1)ospf支持单播方式建立邻居关系
2)对于不支持组播的网络可以通过手动配置实现邻居的发现与维护
链路信息主要包括
P2P网络连接了一对路由器,广播、组播数据包都可以转发。
P2P网络的例子:两台通过PPP(Point-to-Point Protocol)链路相连的路由器网络。
广播型网络支持两台及两台以上的设备接入同一共享链路且可以支持广播、组播报文的 转发,是OSPF最常见的网络类型。
广播型网络的例子:通过以太网链路相连的路由器网络。
同时因为一个广播型网络中存在多台设备,邻居关系建立以及链路信息同步方面, OSPF都有对应的特性来减少同一网络多台设备带来的不利影响。
与广播型网络不同的是NBMA网络默认不支持广播与组播报文的转发。在NBMA网络上, OSPF模拟在广播型网络上的操作,但是每个路由器的邻居需要手动配置。
BMA(non-broadcast multiple access)型网络的例子:通过全互连的帧中继链路相连 的路由器网络。
在现在的网络部署中,NBMA网络已经很少了。
将一个非广播网络看成是一组P2P网络,这样的非广播网络便成为了一个点到多点( P2MP)网络。在P2MP网络上,每个路由器的OSPF邻居可以使用反向地址解析协议( Inverse ARP)来发现。P2MP可以看作是多个P2P的集合,P2MP可以支持广播、组播的 转发。
没有一种链路层协议默认属于P2MP类型网络,也就是说必须是由其他的网络类型强制 更改为P2MP。常见的做法是将非完全连接的帧中继或ATM改为P2MP的网络。
协议号:89
version:版本,该字段值是2
type:类型
packet length:整个ospf报文的长度,单位是字节
Router ID:路由器ID
Area ID:此报文需要被通告到的区域
chescksum:校验字段
auth type:为0时表示不认证;为1 时表示简单的明文认证;为2时表示加密(MD5)认证
authentication:认证所需的信息
Type=1为Hello报文,用来建立和维护邻居关系,邻居关系建立之前,路由器之间需要 进行参数协商。
Type=2为数据库描述报文(DD),用来向邻居路由器描述本地链路状态数据库,使得 邻居路由器识别出数据库中的LSA是否完整。
Type=3为链路状态请求报文(LSR),路由器根据邻居的DD报文,判断本地数据库是否 完整,如不完整,路由器把这些LSA记录进链路状态请求列表中,然后发送一个LSR给 邻居路由器。
Type=4为链路状态更新报文(LSU),用于响应邻居路由器发来的LSR,根据LSR中的请 求列表,发送对应LSA给邻居路由器,真正实现LSA的泛洪与同步。
Type=5为链路状态确认报文(LSAck),用来对收到的LSA进行确认,保证同步过程的 可靠性。
DD、LSR、LSU、LSAck与LSA的关系:
DD报文中包含LSA头部信息,包括LS Type、LS ID、Advertising Router 、LS Sequence Number、LS Checksum。
LSR中包含LS Type 、LS ID和Advertising Router 。
LSU中包含完整的LSA信息。
LSAck中包含LSA头部信息,包括LS Type、LS ID、Advertising Router、LS Sequence Number、LS Checksum。