2. 网络拓扑基础:节点与链路、图论基础

各位同学,咱们今天聊点实在的。路由算法听起来高大上,但说白了,它解决的就是一个最朴素的问题:「从A点到B点,怎么走最划算?」

要回答这个问题,我们得先搞清楚网络长什么样。我刚开始接触路由协议时,总觉得这东西玄乎。后来发现,把网络抽象成一张图,一切就清晰了。嗯,这就是图论的魅力。

2.1 节点与链路:网络世界的「点」和「线」

先看个最简单的场景。你家里有三台设备:电脑、手机、智能电视。它们通过一个路由器连接。这个路由器,就是节点。电脑到路由器的网线,就是链路

在路由的世界里:

  • 节点(Node):就是路由器、交换机这些网络设备。我习惯叫它「路口」。
  • 链路(Link):连接两个节点的物理或逻辑通道。说白了就是「路」。

你想想看,一个城市的路网,路口是节点,道路是链路。路由协议要做的,就是在这张「路网」上找到最优路径。

核心概念:每个节点至少有一条链路连接到其他节点。如果某个节点没有链路,它就「孤立」了,数据包永远到不了它那里。我在项目中遇到过这种情况——一个分支机构的路由器配置错误,导致整条链路断开,全网路由表里都看不到它。

2.2 图论基础:顶点、边、权值

图论是路由算法的数学基础。别被「图论」两个字吓到,其实它就是我们刚才说的那套东西,只是换了个学术名字。

  • 顶点(Vertex):就是节点。图论里叫顶点,网络里叫节点。一回事。
  • 边(Edge):就是链路。连接两个顶点的线。
  • 权值(Weight):这条边的「代价」。可以是距离、延迟、带宽、跳数……

举个例子。假设有三台路由器:R1、R2、R3。R1到R2的延迟是10ms,R2到R3的延迟是20ms,R1到R3的延迟是50ms。那么:

  • 顶点:R1, R2, R3
  • 边:R1-R2, R2-R3, R1-R3
  • 权值:10, 20, 50

从R1到R3,走R1→R2→R3的总代价是10+20=30,比直接走R1→R3的50要小。所以路由协议会选择经过R2的路径。

我的经验:权值的设计是路由协议的精髓。OSPF用带宽算代价,EIGRP用带宽和延迟综合算。我曾经在项目中把一条千兆链路的OSPF Cost设成了1,结果所有流量都往那条链路上挤,差点把链路撑爆。权值设不好,路由就「偏科」。

2.3 网络拓扑的表示方法

光说理论不够,咱们得知道怎么把拓扑画出来、写出来。常用的表示方法有三种:

2.3.1 图形表示法

最直观的方式。节点画成圆圈,链路画成线,权值标在线上。我平时做方案时,第一件事就是画拓扑图。下面这张SVG图展示了我们刚才说的三台路由器拓扑:

网络拓扑示例:三台路由器 R1 R2 R3 10ms 20ms 50ms(直连,但代价高) 图例: 低代价路径 高代价路径

2.3.2 邻接矩阵表示法

用矩阵来存拓扑关系。行和列都是节点,交叉点的值就是权值。没有直接连接的,用∞(无穷大)表示。

还是刚才的例子:

R1 R2 R3
R1 0 10 50
R2 10 0 20
R3 50 20 0

你看,R1到R2是10,R2到R3是20,R1到R3是50。对角线全是0(自己到自己没代价)。

注意:邻接矩阵在节点少的时候很好用。但如果有1000个节点,矩阵就是1000×1000,100万个格子。大部分格子都是∞,浪费内存。我曾经在一个有500台路由器的网络中用过邻接矩阵,结果内存直接爆了。后来改用邻接表,才解决问题。

2.3.3 邻接表表示法

只存「有连接」的节点对。每个节点后面跟一个链表,链着它的邻居和权值。

R1 -> (R2, 10) -> (R3, 50)
R2 -> (R1, 10) -> (R3, 20)
R3 -> (R1, 50) -> (R2, 20)

这种表示法省内存。你想想看,一个节点通常只有几个邻居,不会跟全网所有节点都直连。邻接表只存有效信息,效率高得多。

2.4 拓扑结构对路由的影响

不同的拓扑结构,路由协议的表现完全不同。我总结了几种常见拓扑:

  • 星型拓扑:所有节点连到一个中心节点。中心节点压力大,但管理简单。我见过很多企业网用这种结构。
  • 环型拓扑:节点首尾相连成环。好处是冗余,坏处是跳数多。RIP协议在这种拓扑下容易出问题,因为最大跳数限制是15。
  • 网状拓扑:节点之间全互联。冗余度最高,但链路数量是n(n-1)/2,n大了根本受不了。
  • 树型拓扑:层次化结构。互联网骨干网就是这种,核心层、汇聚层、接入层。

避坑指南:我曾经在一个环型拓扑中部署OSPF,结果因为Cost值没配好,导致路由环路。数据包在环里转圈圈,TTL耗尽才被丢弃。后来我养成了一个习惯——任何环型拓扑,必须启用环路检测机制,比如OSPF的SPF算法本身就能防环,但前提是Cost配置要合理。

2.5 小结

好了,这一章的内容就这些。总结一下:

  • 网络拓扑由节点链路组成
  • 图论用顶点权值来抽象网络
  • 拓扑可以用图形邻接矩阵邻接表三种方式表示
  • 不同的拓扑结构对路由协议有直接影响

这些基础概念,是后面所有路由算法的基础。你想想看,没有拓扑图,路由协议连路都找不到,还谈什么最优路径?


专注资料整理