需要帮助了解链路状态路由

网络工程 路由 协议论
2022-03-01 20:33:32

我试图完全理解链路状态路由协议,因为我想编写一个程序,它为网络的每个节点创建一个路由表,用加权图表示。我知道要使用 Dijkstra 算法,我必须了解网络的完整拓扑。

所以,一开始我的节点只知道他们的邻居,我想构建 LSP 数据库——它代表了完整的网络拓扑——每个节点都应该知道。每个节点向其邻居发送有关指向其邻居的链接的链接成本的信息,并从其邻居接收有关其与相邻节点连接的链接成本的信息,但是节点如何获取有关连接到非相邻节点的节点的信息,如果链接状态数据包只带来有关相邻连接的信息并且只与相邻邻居通信?节点是否应该转发其他节点的LSP,而不是自己的LSP?

我将尝试举一个例子:如果我有节点 A 连接到节点 B,节点 B 连接到节点 C 和节点 C 连接到节点 D,如果它获得的唯一信息,A 怎么可能知道节点 D 的存在是来自 B 的链路状态数据包,它告诉“我已连接到 A 和 C”?即使在 B 知道 C 连接到 D 之后,B 也会继续告诉 A 其相邻连接,因此 A 永远不会知道除了 B(直接连接)和 C(通过 B 连接)之外的任何其他节点

我知道我缺少一些东西,任何帮助将不胜感激!

2个回答

LSA/LSP(OSPF vs IS-IS speak)通过网络泛滥。您确实是正确的,LSP(我更喜欢 ISIS)仅包含相邻节点的信息 + 来自提供 LSP 的节点的某些 IP 可达性信息,但洪水解决了这个问题,并允许您全面了解网络。

您可以查看路由器中的 LSP DB。这是我正在使用的虚拟环境的一些输出:

tsroot@R2-4> show isis database
IS-IS level 1 link-state database:
LSP ID                      Sequence Checksum Lifetime Attributes
R1-1.00-00                      0x1e   0x6880    52429 L1
R1-2.00-00                     0x122   0x17c4    62130 L1
R1-3.00-00                     0x320   0xca73      542 L1
R1-4.00-00                     0x3b8   0x9e67      761 L1
R2-1.00-00                     0x26a   0x90cd    62131 L1 L2
R2-2.00-00                     0x398   0x9ea4    62130 L1 L2
R2-4.00-00                     0x3ce   0x8ecb      793 L1 L2 Attached
R2-5.00-00                     0x2b4   0xa3b0    62137 L1 L2
R2-6.00-00                     0x26b   0x78d3    62028 L1 L2
R1-5.00-00                     0x1a4   0x285f    62131 L1
R1-6.00-00                     0x1cc   0x6069    61984 L1
  11 LSPs

我们可以看到我们已经从这个拓扑中的所有其他路由器收到了 LSP,显然我们也有我们的本地信息 (R2-4)。

可以更详细地查看 LSP:

tsroot@R2-4> show isis database R1-1 extensive
IS-IS level 1 link-state database:

R1-1.00-00 Sequence: 0x1e, Checksum: 0x6880, Lifetime: 52351 secs
   IPV6 Unicast IS neighbor: R2-1.00          Metric:       30
     Two-way fragment: R2-1.00-00, Two-way first fragment: R2-1.00-00
   IPV6 Unicast IS neighbor: R2-2.00          Metric:       30
     Two-way fragment: R2-2.00-00, Two-way first fragment: R2-2.00-00
   V6 IPV6 Unicast prefix: 2001:db8::13/128   Metric:        0 Internal Up
   V6 IPV6 Unicast prefix: 2001:db8:1:13:11::/112 Metric:       30 Internal Up
   V6 IPV6 Unicast prefix: 2001:db8:1:13:12::/112 Metric:       30 Internal Up

  Header: LSP ID: R1-1.00-00, Length: 156 bytes
    Allocated length: 284 bytes, Router ID: 0.0.0.0
    Remaining lifetime: 52351 secs, Level: 1, Interface: 330
    Estimated free bytes: 257, Actual free bytes: 128
    Aging timer expires in: 52351 secs
    Protocols: IPv6

  Packet: LSP ID: R1-1.00-00, Length: 156 bytes, Lifetime : 65531 secs
    Checksum: 0x6880, Sequence: 0x1e, Attributes: 0x1 <L1>
    NLPID: 0x83, Fixed length: 27 bytes, Version: 1, Sysid length: 0 bytes
    Packet type: 18, Packet version: 1, Max area: 0

  TLVs:
    Area address: 49.0276 (3)
    Speaks: IPV6
    Topology: ipv6 unicast
    Hostname: R1-1
    IPv6 address: 2001:db8::13
    IPV6 UnicastIS neighbor: R2-2.00, Metric: default 30
    IPV6 UnicastIS neighbor: R2-1.00, Metric: default 30
    IPV6 UnicastIPv6 prefix: 2001:db8::13/128 Metric 0 Up
    IPV6 UnicastIPv6 prefix: 2001:db8:1:13:11::/112 Metric 30 Up
    IPV6 UnicastIPv6 prefix: 2001:db8:1:13:12::/112 Metric 30 Up
  No queued transmissions

IS-IS level 2 link-state database:

tsroot@R2-4>

我们可以看到,其中包括邻接信息和到达这些邻居的度量:

   IPV6 Unicast IS neighbor: R2-1.00          Metric:       30
   IPV6 Unicast IS neighbor: R2-2.00          Metric:       30

有关于直接连接的 IP 前缀的信息:

   V6 IPV6 Unicast prefix: 2001:db8::13/128   Metric:        0 Internal Up
   V6 IPV6 Unicast prefix: 2001:db8:1:13:11::/112 Metric:       30 Internal Up
   V6 IPV6 Unicast prefix: 2001:db8:1:13:12::/112 Metric:       30 Internal Up

根据这些信息,我们可以通过在我们自己的节点 (R2-4) 处启动树来计算最短路径。还可以通过在相邻节点处对树进行生根来推断无循环备份路径。这称为 LFA(无环路替代方案),是实现 IP FRR(快速重新路由)的一种方式。

LSP 的泛滥是逐字发生的。即LSP 在被淹没之前甚至没有被解释。因此,重要的是 LSP 的大小等于或小于网络中具有最低 MTU 的链路。

我认为您的意思是 LSA,而不是 LSP。您缺少的是唯一的 RID(路由器 ID)。如果您查看 OSPF LSDB(链路状态数据库)中的 1 类 LSA,您将看到 LSA 中包含一个 RID 和该 RID 的所有相邻节点。

因此,在您的示例中,节点 D 将 LSA 及其所有相邻邻居和启用 OSPF 的接口通告给 C。然后 C 将自己的 LSA 和节点 D 的 LSA 通告给 B,等等。

因此 RID 允许路由器唯一地标识同一域中的其他链路状态路由器,即使它们不是直接相邻的