OSPF支持触发更新,能够快速检测并通告自治系统内的拓扑变化。
OSPF可以解决网络扩容带来的问题。当网络上路由器越来越多,路由
信息流量急剧增长的时候,OSPF可以将每个自治系统划分为多个区域,
并限制每个区域的范围。OSPF这种分区域的特点,使得OSPF特别适
用于大中型网络。OSPF还可以同其他协议(比如多协议标记切换协议
MPLS)同时运行来支持地理覆盖很广的网络
OSPF要求每台运行OSPF的路由器都了解整个网络的链路状态信息,
这样才能计算出到达目的地的最优路径。OSPF的收敛过程由链路状态
公告LSA(Link State Advertisement)泛洪开始,LSA中包含了路由器
已知的接口IP地址、掩码、开销和网络类型等信息。收到LSA的路由器
都可以根据LSA提供的信息建立自己的链路状态数据库LSDB(Link
State Database),并在LSDB的基础上使用SPF算法进行运算,建立
起到达每个网络的最短路径树。最后,通过最短路径树得出到达目的网
络的最优路由,并将其加入到IP路由表中
OSPF直接运行在IP协议之上,使用IP协议号89。
OSPF有五种报文类型,每种报文都使用相同的OSPF报文头。
- Hello报文:最常用的一种报文,用于发现、维护邻居关系。并在广
播和NBMA(None-Broadcast Multi-Access)类型的网络中选举指
定路由器DR(Designated Router)和备份指定路由器BDR(
Backup Designated Router)。- DD报文:两台路由器进行LSDB数据库同步时,用DD报文来描述自
己的LSDB。DD报文的内容包括LSDB中每一条LSA的头部(LSA的
头部可以唯一标识一条LSA)。LSA头部只占一条LSA的整个数据量
的一小部分,所以,这样就可以减少路由器之间的协议报文流量。- LSR报文:两台路由器互相交换过DD报文之后,知道对端的路由器
有哪些LSA是本地LSDB所缺少的,这时需要发送LSR报文向对方请
求缺少的LSA,LSR只包含了所需要的LSA的摘要信息。- LSU报文:用来向对端路由器发送所需要的LSA。
- LSACK报文:用来对接收到的LSU报文进行确认。
在配置OSPF时,需要首先使能OSPF进程。
命令ospf [process id]用来使能OSPF,在该命令中可以配置进程ID。如
果没有配置进程ID,则使用1作为缺省进程ID。
命令ospf [process id] [router-id <router-id>]既可以使能OSPF进程,还
同时可以用于配置Router ID。在该命令中,router-id代表路由器的ID。
命令network用于指定运行OSPF协议的接口,在该命令中需要指定一
个反掩码。反掩码中,“0”表示此位必须严格匹配,“1”表示该地址
可以为任意值。
GRE用来对某些网络层协议如IPX(Internet Packet Exchange)的报文
进行封装,使这些被封装的报文能够在另一网络层协议(如IP)中传输
。GRE可以解决异种网络的传输问题。
IPSec VPN技术可以创建一条跨越共享公网的隧道,从而实现私网互联
。IPSec VPN能够安全传输IP报文,但是无法在隧道的两个端点之间运
行RIP和OSPF等路由协议。GRE可以将路由协议信息封装在另一种协
议报文(例如IP)中进行传输。
GRE封装报文时,封装前的报文称为净荷,封装前的报文协议称为乘客
协议,然后GRE会封装GRE头部,GRE成为封装协议,也叫运载协议
,最后负责对封装后的报文进行转发的协议称为传输协议。
GRE封装和解封装报文的过程如下:
- 设备从连接私网的接口接收到报文后,检查报文头中的目的IP地址
字段,在路由表查找出接口,如果发现出接口是隧道接口,则将报
文发送给隧道模块进行处理。- 隧道模块接收到报文后首先根据乘客协议的类型和当前GRE隧道配
置的校验和参数,对报文进行GRE封装,即添加GRE报文头。- 然后,设备给报文添加传输协议报文头,即IP报文头。该IP报文头
的源地址就是隧道源地址,目的地址就是隧道目的地址。- 最后,设备根据新添加的IP报文头目的地址,在路由表中查找相应
的出接口,并发送报文。之后,封装后的报文将在公网中传输。- 接收端设备从连接公网的接口收到报文后,首先分析IP报文头,如
果发现协议类型字段的值为47,表示协议为GRE,于是出接口将报
文交给GRE模块处理。GRE模块去掉IP报文头和GRE报文头,并根
据GRE报文头的协议类型字段,发现此报文的乘客协议为私网中运
行的协议,于是将报文交给该协议处理
interface tunnel interface-number命令用来创建Tunnel接口。创建
Tunnel接口后,需要配置Tunnel接口的IP地址和Tunnel接口的封装协议
。
tunnel-protocol命令用来配置Tunnel接口的隧道协议。
source { source-ip-address | interface-type interface-number }命令用
来配置Tunnel源地址或源接口。
destination dest-ip-address命令用来指定Tunnel接口的目的IP地址。
在本端设备和远端设备上还必须存在经过Tunnel转发的路由,这样,需
要进行GRE封装的报文才能正确转发。经过Tunnel接口转发的路由可以
是静态路由,也可以是动态路由。配置静态路由时,路由的目的地址是
GRE封装前原始报文的目的地址,出接口是本端Tunnel接口。