ospf的五种报文,七种状态,七种LSA类型,三张表

一.OSPF的七种类型LSA(link state advertise )链路状态通告:


1、路由器LSA (Router LSA)
由区域内所有路由器产生,并且只能在本个区域内泛洪广播。

LSA传播范围:本域内传递

Ls id:始发该lsa的路由器Router ID

Adv rtr:始发该lsa的路由器的Router ID

link count 中的内容:transnet型 :link id:该网段DR的ip地址,data:本路由器在该网段的ip地址

                                  stubnet型:link id :该网段的网络地址,data:该网段的子网掩码(如果是32位的子网掩码就是环回口,不是32位的就是p2p接口)

2、网络LSA (Network LSA)
由区域内的DR或BDR路由器产生,也仅仅在本区域内部进行泛洪广播。

LSA传播范围:本域内传递

Ls id:该网段DR的IP地址

Adv rtr:始发该lsa的路由器-也就是DR(因为2类lsa由DR产生)的Router ID

内容:netmask 和Attached Router:该网段的所有路由器的router-id

3、网络汇总LSA (network summary LSA)
由ABR产生,可以通知本区域内的路由器通往区域外的路由信息。

在一个区域外部但是仍然在一个OSPF自治系统内部的缺省路由也可以通过这种LSA来通告。

如果一台ABR路由器经过骨干区域从其他的ABR路由器收到多条网络汇总LSA,那么这台始发的ABR路由器将会选择这些LSA通告中代价最低的LSA,并且将这个LSA的最低代价通告给与它相连的非骨干区域。

LSA传播范围:域间路由,能泛洪到整个AS中,始发路由器除外。

Ls id:该自治系统区域外的某个网段的网络地址

Adv rtr:始发该LSA的路由器的Router ID

4、ASBR汇总LSA (ASBR summary LSA)
也是由ABR产生,但是它是一条主机路由,指向ASBR路由器地址的路由。

LSA传播范围:泛洪到整个AS中,(把ASBR的Router ID传播到其他区域,让其他区域的路由器得知ASBR的位置。)

LS ID:ASBR的Router ID

Adv rtr:始发该LSA的ABR的Router ID

内容:无

注意:在ASBR直连的区域内,不会产生4类的LSA,因为ASBR会发出1类的LSA,其中会指明自己是ASBR。

5、自治系统外部LSA (

### OSPF协议中涉及的三张及其功能 #### 1. 邻接 (Neighbor Table) 邻接记录了当前路由器与其邻居之间的关系。它主要用于维护OSPF协议运行过程中形成的邻居列,这些邻居通过定期发送Hello报文保持联系[^2]。 - **作用**: 邻接帮助路由器识别哪些设备在其直连范围内,并建立稳定的邻居关系。只有建立了邻居关系后,才能进一步交换链路状态信息。 - **内容**: 中通常包含邻居的Router ID、接口地址、优先级以及其他与邻居交互的状态参数。 #### 2. 拓扑 (Link-State Database, LSDB) 拓扑也称为链路状态数据库(LSDB),它是OSPF的核心数据结构之一。每台路由器都会构建一份完整的网络拓扑图,这张图基于收到的所有链路状态通告(LSA)。 - **作用**: 拓扑存储整个区域内所有路由器的链路状态信息,使每台路由器都能掌握网络的整体布局。通过分析LSDB,路由器可以利用Dijkstra算法计算到达各个目标的最佳路径[^1]。 - **内容**: 数据库中的每一项都是一条LSA,描述了一种特定类型的链路状态更新消息。例如Type-1 LSA示单个路由器的信息,而Type-5 LSA则代外部路由[^3]。 #### 3. 路由 (Routing Table) 路由最终决定了如何转发数据包到目的地。虽然它不是直接由OSPF生成的,而是通过对LSDB进行处理得出的结果,但它却是实际指导流量走向的关键工具。 - **作用**: 提供精确的目的地IP地址对应的下一跳地址或者出口接口信息,从而完成高效的数据传输任务。 - **内容**: 包括但不限于目的网络、子网掩码、度量值(metric),以及相应的出站接口和下一跳节点等字段。 以上三种格各司其职,在OSPF的工作流程里紧密配合,共同保障了复杂环境下动态寻径的需求得以满足。 ```python # 示例代码展示如何模拟简单的OSPF结构 class OspfTables: def __init__(self): self.neighbor_table = {} self.lsdb = [] self.routing_table = {} def add_neighbor(self, router_id, state="Down"): self.neighbor_table[router_id] = {"state": state} def update_lsdb(self, lsa_entry): self.lsdb.append(lsa_entry) def calculate_routing_table(self): # 这是一个简化版的伪逻辑演示 for entry in self.lsdb: destination_network = entry['destination'] metric = entry['metric'] next_hop = entry.get('next_hop', None) self.routing_table[destination_network] = { 'metric': metric, 'next_hop': next_hop } ospf_instance = OspfTables() ospf_instance.add_neighbor("R2", "Full") ospf_instance.update_lsdb({"destination": "192.168.1.0/24", "metric": 1}) ospf_instance.calculate_routing_table() print(ospf_instance.routing_table) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值