北京金桥世纪
ID、Date、Type和Metric等四项。
这里的Type指的是交换机接口的连接类型,见表2:
表2 交换机接口的四种连接类型
1 2 3 4 连接类型 P2P TransNet StubNet Virtual ? 说明:
描述 点对点连接 连接到传输网络 连接到存根网络 虚拟通道
连接标识 邻居路由器标识 DR的接口地址 网络IP地址 邻居路由器标识 连接数据 自身的IP接口地址 自身的IP接口地址 网络掩码 自身的IP接口地址 传输网络是指接入了两台或更多路由器的网络。如果路由器与DR完全邻接,或路由器自身为DR且与至少一台其他路由器邻接,则所接入的网络的网络类型就是传输网络类型。
存根网络就是接入了一台路由器的网络,即该网络只通过一个路由器和外界联系。如果某网络只接入了当前路由器,则该接口的连接类型就是存根网络类型。
另外,最开始显示的0.1.1.1 area 0的LSDB中有这么一条LSA:
Type LinkState ID AdvRouter Age Len Sequence Metric Where Stub 201.0.0.0 0.1.1.1 1124 24 0x0 0 SpfTree
这个Stub类型的LSA似乎很熟悉,可它又不是五类LSA中的一种,那么它是哪来的?比较这个LSA和0.1.1.1生成Router LSA,发现该LSA的LinkState ID和0.1.1.1发布的Router LSA中的一个StubNet连接相同。
咨询过开发的同事,了解到原来V3实现OSPF时,为方便计算路由,把Router LSA中的StubNet连接单独拿出来列为一个LSA。
注意,这类“LSA”虽然有老化时间,但是它的序列号是永远为0,也就是说它的内容是不会改变的。再仔细想想,其实StubNet路由的处理方法和AS外的路由(作为第五类LSA)很类似,都是单独对待的。
就拿刚才的LSA举例:
Link ID: 201.0.0.0 表示发布路由器接入的网络IP地址是201.0.0.0 Data : 255.0.0.0表示发布路由器接入的网络IP地址的掩码是8位的。 Type : StubNet 表示201.0.0.0/8只接入了0.1.1.1一个路由器 Metric : 1 表示从发布路由器传送数据包到该网段所需花费为1 下面是连接为传输网络的例子:
Link ID: 192.168.100.2 表示发布路由器接口所在网段的DR的接口地址 Data : 192.168.100.1 表示发布路由器接口自身在地址 Type : TransNet 表示该网络接入了多台路由器
Metric : 5 表示从发布路由器传送数据包到该网段所需花费为5
再来看一下0.3.3.3发布的Router LSA:
Type : Router Ls id : 0.3.3.3 Adv rtr : 0.3.3.3
北京金桥世纪
Ls age : 190 Len : 60 Seq# : 0x800003d6 Chksum : 0x2f57 Options : (DC) ABR Link count: 3 Link ID: 192.168.110.3 Data : 192.168.110.3 Type : TransNet Metric : 9 Link ID: 192.168.120.2 Data : 192.168.120.3 Type : TransNet Metric : 8 Link ID: 0.5.5.5 Data : 192.168.140.3 Type : Virtual Metric : 11 这里出现了第四类连接类型:虚拟通道:
Link ID: 0.5.5.5 表示0.3.3.3的虚拟邻居是0.5.5.5 Data : 192.168.140.3 表示在与该IP地址关联的接口建立虚连接 Type : Virtual
Metric : 11 表示0.3.3.3到邻居0.5.5.5的距离为11
1.6 Network LSA
第二类LSA:Network LSA。
例子:由网段192.168.100.0/24 的DR(IP为192.168.100.2)生成的Network LSA: Type LinkState ID AdvRouter Age Len Sequence Metric Where Net 192.168.100.2 0.2.2.2 1752 32 0x8000000d 0 SpfTree
生成时间:当网络类型为广播或NBMA时,会选举产生DR。仅当DR与网络上至少一台路由器完全邻接后,才生成Network LSA。
用display OSPF 100 lsdb network verbose命令可以查看该LSA的详细内容: Type : Net
Ls id : 192.168.100.2 Adv rtr : 0.2.2.2 Ls age : 1294 Len : 32
Seq# : 0x80000003 Chksum : 0xd684 Options : (DC)
Net mask : 255.255.255.0
Attached Router 0.2.2.2
北京金桥世纪
Attached Router 0.1.1.1
Net mask指明了网段的掩码,Ls id字段是DR的接口IP地址,Net mask结合Ls id字段就可以计算出网络地址,这个LSA描述的网络是192.168.100.0/24。
Attached Router:与DR完全邻接的邻居列表,由其OSPF进程的router id来识别,DR自己也包含在这个列表中。
1.7 由一、二类LSA计算域内路由
此时,0.1.1.1上area 0内的LSA如下: Area: 0.0.0.0
Type LinkState ID AdvRouter Age Len Sequence Metric Where 1 Rtr 0.1.1.1 0.1.1.1 1764 60 0x80000063 0 SpfTree 2 Rtr 0.5.5.5 0.5.5.5 515 36 0x80000009 0 SpfTree 3 Rtr 0.2.2.2 0.2.2.2 345 48 0x80000159 0 SpfTree 4 Rtr 0.3.3.3 0.3.3.3 201 60 0x80000156 0 SpfTree 5 Net 192.168.100.2 0.2.2.2 345 32 0x80000003 0 SpfTree 6 Net 192.168.110.3 0.3.3.3 201 32 0x80000003 0 SpfTree 7 Net 192.168.120.2 0.2.2.2 345 32 0x80000056 0 SpfTree
有了第一、二类LSA就可以来计算area 0的域内路由了。每个路由器上area 0内的LSDB是相同的,不同的是:它们各自为政、以自己为根计算SPF。这里以0.1.1.1为例计算SPF。
1.7.1 域内路由计算1:计算最短路径树
为方便最短路径树计算,rfc2328使用了称为节点的数据结构来包装LSA、LSA的发布者以及其它信息。节点中包含四个子项:标识、与节点关联的LSA、下一跳列表、从树根到到本节点的距离。
? 节点标识/Vertex (node) ID:
32位数,用于唯一标识节点。有两种节点类型:路由器和网络。对于路由器节点,节点标识就是OSPF路由器标识;对于网络节点,就是网络上DR的IP地址。 ? 一个LSA/An LSA:
每一个传输节点都有相关联的LSA。对于路由器节点就是Router LSA;对于传输网络,就是Network LSA。即节点标识和对应LSA的LS标识保持一致。 ? 下一跳列表/List of next hops:
从树根到该节点最短路径的下一跳列表。由于存在等值多路径,可能会有多条最短路径。每个下一跳都标记有输出接口。
? 从树根的距离/Distance from root:
从树根到节点最短路径的距离,是最短路径中各组成部分距离值之和(在Router-LSA和Network-LSA中宣告)。
算法中使用到的另外一个重要的数据结构是候选节点列表,该列表存放了当前从树根可达的而又不在最短路径树上的节点。
最短路径树的计算过程大致如下:
北京金桥世纪
计算从树根到候选节点列表中各节点的路径距离;选取路径最短的节点加入最短路径树,并从候选节点列表中删除。再检查新节点的邻接节点,并增加/修改候选列表。如此递归,直至候选列表为空。
首先由一、二类LSA生成节点数据结构,见下表。
表3 最短路径树计算所需的节点数据结构
序号 标识 1 2 3 4 5 6 7 0.1.1.1 0.5.5.5 0.2.2.2 0.3.3.3 节点标识 类型 router router router router 01 02 03 04 - LSA 下一跳列表 从树根的距离 192.168.100.2 netowrk 05 192.168.110.3 netowrk 06 192.168.120.2 netowrk 07 此时候选节点列表为空: 候选列表: 空
开始计算最短路径树:
1、 0.1.1.1以自己为根计算最短路径树,则最先把节点0.1.1.1加入树,称其为节点V。
2 0.1.1.1 图2 0.1.1.1的area 0上的最短路径树1
1.1、 查看与节点V关联的LSA,遍历LSA中描述的每个连接(这里有三个连接,每一
个连接也是一个节点,这里称其为W节点):
Type : Router Ls id : 0.1.1.1 Adv rtr : 0.1.1.1 Ls age : 55 Len : 60
Seq# : 0x8000007a Chksum : 0x6801
Options : (DC) ASBR Link count: 3
Link ID: 201.0.0.0 - \\ Data : 255.0.0.0 |
- 连接1
Type : StubNet | Metric : 1 - / Link ID: 192.168.110.3 - \\ Data : 192.168.110.1 |
- 连接2
北京金桥世纪
Type : TransNet | Metric : 10 - / Link ID: 192.168.100.2 - \\ Data : 192.168.100.1 |
- 连接3
Type : TransNet | Metric : 5 - / 1.1.1、 遍历第一个连接。 Link ID: 201.0.0.0 Data : 255.0.0.0 Type : StubNet Metric : 1
该连接为存根网络,到存根网络的连接在最短路径计算的第二步中考虑,故再检查下一个连接。
1.1.2、 遍历第二个连接。 Link ID: 192.168.110.3 Data : 192.168.110.1 Type : TransNet Metric : 10
这个连接是传输网络类型的。
? 首先计算从树根到这个传输网络(即节点W)的距离D。D是树根到节点V的最短路
径的距离(此时是VV=0),加上节点V、W之间的连接所宣告距离值VW=10。即:D=VV+VW=0+10=10
? 因为W不在候选列表中,将W加入候选列表。
? 填写到节点W的下一跳是节点W的Data域:192.168.110.1。 序号 节点标识 标识 1 2 3 4 5 6 7 0.1.1.1 0.5.5.5 0.2.2.2 0.3.3.3 类型 router router router router 01 02 03 04 05 06 07 - LSA 下一跳列表 从树根的距离 0 192.168.100.2 netowrk 192.168.110.3 netowrk 192.168.120.2 netowrk 192.168.110.1 10 此刻候选列表为: 候选列表: 192.168.110.3
1.1.3、 遍历第三个连接。 Link ID: 192.168.100.2 Data : 192.168.100.1 Type : TransNet Metric : 5
这个节点也是网络节点,计算过程同上。D=VV+VW=0+5=5;W不在候选列表中,则