首页> 网络> 【网络技术】OSPF路由协议原理详解——梁思洛

[文章]【网络技术】OSPF路由协议原理详解——梁思洛

收藏
0 4304 0

一、    OSPF的原理

       注:文中所有文字,图片均属原创,文中观点属于个人总结,谨供参考,如有纰漏或不当之处,敬请谅解。

1.1     OSPF Router ID的作用

1)     OSPF 通过路由器 ID 来辨认属于 OSPF 的路由器(简单来说就是给路由器起个名字,这个名字是在OSPF中起作用的)

2)     LSDB 通过路由器 ID 来区分不同的路由器

3)     默认情况下,路由器 ID OSPF 协议启动时 IP 最高的活动接口

4)     回环接口的优先级大于物理接口,如果存在回环接口则定义 IP 最高的活动接口为路由器 ID

5)     可以使用 router-id 命令定义路由器 ID,配置前、RID就是loopback 0的接口IP配置后就是人为指定的IP:推荐使用 router-id 命令或回环接  口以获得更好的稳定性

6)     如果 OSPF 已经运行,在新的回环接口启用前需重载路由器或移除现     有进程并重设 OSPF

Router#clear ip ospf process 用这条命令重设OSPF进程。

1.2     OSPF专业术语

1)     邻居关系:每台路由器与它的邻居建立联系(hello),这个关系叫邻接关系,两台OSPF路由器想成为邻居的条件:

1Area-id:两个路由器必须在共同的网段上,它们的端口必须属于该网段上的同一个区,且属于同一个子网

2、验证(Authentication OSPF):同一区域路由器必须交换相同的验证密码,才能成为邻居

3Hello IntervalDead Interval OSPF协议需要两个邻居路由器的这些时间间隔相同,否则就不能成为邻居路由器。

4stub区域标记:两个路由器可以在Hello报文中通过协商Stub区域的标记来成为邻居

2)     每台路由器向他的每个邻居发送链路状态通告(lsa),来获悉其他路     由器和网络,每个邻居在收到lsa以后依次向它的邻居转发这些通告(泛洪),直到LSA被扩散到整个网络。【其中LSA包括链路状态,路由器接口到链路的代价度量值以及链路所连接的所有邻居。】

3)     每台路由器在数据库中保存一份它所收到的lsa的备份,如果工作正常,所有的路由器的数据库应该相同

4)     通告完整的数据库,使用spf算法以自己为根计算到每个网络的最佳路径,并将信息保存在路由表中。

1.3 OSPF三张表的联系概括

     OSPF路由器通过发hello包发现邻居构建邻居表,接着相互通告LSA同步LSDB(拓扑数据库,包含一个区域内所有路由器、和他们的链路信息,一般同一个区域内的路由器拥有同一个LSDB),以构建一张整体的拓扑表(对网络心中有数),最后根据SPF算法构建一张路由选择表。

1.4     OSPF区域结构

     骨干区域(中转区域):主要是为快速高效地传输IP分组的OSPF区域,和连接其他类型的区域。(通常用area 0表示骨干区域)常规区域:主要是连接用户和资源的OSPF区域,它要和骨干区域相连。  (用area 0之外的表示常规区域)


1.5     DR作用

     所有邻居路由器只能通过 DR BDR 来建立邻接关系,并且只将LSA通告给它们。DR从邻居那里收到更新后,通过LSA通告给局域网上的所有邻居,确保     同一个局域网的LSDB都相同。发送给 DR BDR 的数据包使用多播地址 224.0.0.6 DR 到所有路由器的数据包使用多播地址 224.0.0.5EIGRP的组播地址是224.0.0.10

 

1.6     OSPF两个组播地址

     表示所有OSPF路由器:224.0.0.5

     表示所有DRBDR路由器:224.0.0.6

1.7     OSPF端口开销问题

(看流量的方向,开销只与出接口有关,与入接口无关)

快速以太网接口int f0/0 cost =1   10的八次方/100M=1

(这里的100M要转换成以bit为单位进行计算,其实就是100000000bit

串行接口int s1/1 cost =10的八次方/1544Kbit=1000000/1544000bit=64

环回接口int lo0 cost =1

顺带一提如何查看接口带宽:

r1#show int s 1/0 | in BW

  MTU 1500 bytes, BW 1544 Kbit, DLY 20000 usec,

r1#show int f 0/0 | in BW

  MTU 1500 bytes, BW 10000 Kbit, DLY 1000 usec,

r1#

可以 r2(config)#int f0/0

r2(config-if)#ip ospf cost 100   // 修改开销值可以用show ip ospf int f0/0查看

1.8     OSPF 计算

路由器通过下面的Dijkstra的最短路径算法找到到达目的地最佳的路径:同一个区域内的每一台路由器都拥有一致的链路状态数据库.区域中的路由器都以自己为根构建最短路径树.到达目的地整体链路成本之后最小的就是最好的路径.最好的路由条目将进入转发数据库 (routing table).

1.9     LSA 序列号

每一个LSDB中的LSA 都有一个序列号.这个序列号是一个 4-byte ,从 0x80000001开始 0x7FFFFFFF结束.OSPF 30 分钟泛洪每一个LSA (和时间相关的、EIGRP HELLO时间分别有5秒和60秒两种)来保证数据库的同步. 每次LSA 泛洪, 序列号都会增加1.最后LSA序列号会重新转回 0x80000001. 这时, 已经存在的LSA已经超时了 (one hour).  如果路由器同时遭遇两条 LSA,则要判定哪条 LSA 是最新的。拥有最高序列号的为最新

1.10  OSPF包类型

1)     helloHELLO:与邻居建立关系并维护邻居关系

hello包(重点)

不同的网络类型,发送hello包的频率也不一样,像以太网或者点对点网络发送hello时间是10s,如果是像非广播多路访问网络(NBMA网络)发送hello时间是30s

非广播多路访问网络(NBMA网络):

hello间隔和死亡间隔 : 多路访问网络上为10秒,死亡时间为40秒。两端必须匹配一致

hello间隔=4倍的死亡间隔(EIGRPHELLO时间和HOLDTIME3倍的关系)

接口模式下配置:

修改hello 时间: ip ospf hello-interval 20  (死亡时间自动修改)

修改死亡时间:   ip ospf dead-interval 40   (hello时间不会改变)

验证:show ip ospf interface s1/1

思考问题: hello的时间范围是1-65535  dead的时间范围1-65535,如果hello时间修改为65535,dead会怎么样?

show的结果: Hello 65535, Dead 262140 可以超越限制

恢复默认:   no掉配置

2)     DBD:数据库描述数据包:(描述一个OSPF路由器的本地LSA内容)

3)     LSR:状态请求:(请求相邻路由器,发送其LSA具体条目)

4)     LSU:链路状态更新: 向邻居发送LSA通告,和储存LSA

5)     LSAck:链路状态确认: 确认收到邻居路由器的LSA (EIGRP一样,ospf直接封装在IP包中传递)

6)     LSA(链路状态通告):报告路由器和链路的状态,(报告发生什么事和发生什么状态)它是LSU的重要内容。

7)     显式确认:当对方给我发一个包给他一个明确的应答 ( LSU )

8)     隐式确认:假如发送DBD,序列号不同,我也修改成一样的序列号告诉对发以示确认

 

网络
最近热帖
{{item.Title}} {{item.ViewCount}}
近期热议
{{item.Title}} {{item.PostCount}}