经过两个星期的努力,终于结束了OSPF的Training。
下面做些总结,由于内容较多,只概述重点,作为之后复习之用。
链路状态路由协议特点
距离矢量路由协议与链路状态路由协议有很多的不同,这里我不过多参数。
我只举一个例子:
1.对于距离矢量路由协议,大家可以把它看成“指示牌”。人们看到后,只知道下一个站点怎么走,距离是多少,无法预知更远的。
2.对于链路状态路由协议,大家可以把它看成“地图”,如果想去一个地点,我们会根据需要根据地图标记出最短的路径。
SPF算法简介
SPF是链路状态路由协议的核心算法,包括ISIS、OSPF。
那么它是如何工作的呢?
1. 描述自己的直连网络—刚加电
2. 向邻居发送Hello包—建立邻居关系
3. 建立链路状态数据包(LSP)—建立邻接过程
4. 向邻接泛洪链路状态数据包—更新LSDB
5. 构建链路状态数据库—同步LSDB
对于SPF算法,可以用一个比较形象的实例来说明:
在一个班里,老师给了每个学生5张纸片。让他们把自己、前、后、左、右的名字分别写在纸片上,交给老师。这时老师把纸片都收上来,并按着纸片的内容写在黑板上,这样呈现在黑板的内容就是实际的座位排列。
其中5张纸片就相当于LSP,不但包括自己的信息,也包括直连的。
老师把这些纸片收集上来,就相当于是LSP泛洪的过程。
老师把这些纸片的内容分析后形成了一张完成的座位排列表,这个过程就相当于构建了一张精确的拓扑图(LSDB)。
OSPF简介
1. OSPF有三张表:邻居表、拓扑表(LSDB)和路由表。
2. 在OSPF中有邻居和邻居的概念。是邻居但不一定是邻接,在多路访问中,Dothers路由器之间只是邻居,不是邻接,所以只能维持在2-way状态;相反,是邻接一定是邻居。
3. 链路状态路由器没有定期更新,对于OSPF来说,LSA会30分钟泛洪一次,这叫做强制更新;注意这个30分钟不是非常准,为了防止所有LSA同时更新,会或多或少。
4. LSA序列号起始于0X80000001,终于0X7fffffff,每更新一次序列号加1。
5. 如果序列号轮了一周,又回到0×80000001,那么此时这个LSA被设置为maxage(1小时)并清除掉。
OSPF网络类型
点对点(PTP) – 不需要选举DR、BDR
广播多路访问 – 需要选举DR、BDR
非广播多路访问(NBMA)
点对多点 – 不需要DR、BDR,多个PTP链路
虚拟链路
对于现在常见的网络环境,很少碰到NBMA、点对多点和虚链路,所以直接可以忽略掉,如果用到,再查也不迟。
OSPF报文类型
这个在OSPF中非常重要!
建议结合邻接建立过程,仔细研究5种数据包的结构,研读TCP/IP卷一
报文头部 — 标注路由协议为OSPF
Hello (1)— 间隔、优先级、等待时间、DR、BDR、邻居
数据库描述(2)—MTU、DB描述、router-id、LSA的序列号
注:关于MTU在这里稍微说下,当收到DB报文中的MTU高于本身端口配置的IP MTU时,邻居会建立不起来。换言之如果小于,那么就能建立,而且结果类似于“ip ospf mtu-ignore”
链路状态请求(3)
链路状态更新(4)—Flag(V、E、B),路由信息
可以通过“show ip ospf da router x.x.x.x”来确认这个Flag
链路状态确认(5)
建立邻接的过程
这个过程也非常重要,具体细节在此略过,详细请看卷一。
Down – 初始状态
INIT – 收到邻居发来的Hello报文
2WAY – 当收到Hello报文中有自己的ID时;如果在Init时收到DBD报文,会直接进入2WAY
EXSTART – 协商邻居主从关系
EXCHANGE – 更新请求列表中的DBD,同步数据库
Loading – 第一次更新LSA后,还有信息需要更新
Full – 完全邻接状态
在此需要注意的是:在PTP网络环境下DBD是组播发送;在多路访问环境下路由器会先用ARP来获得地址,然后以单播发送DBD
常用LSA介绍
路由器LSA(Type 1):在同一个域内,他们用LSA1传送Hello信息
网络LSA (Type 2):存在DR和BDR的概念
AllDRouters: 224.0.0.6
AllSFPRouter:224.0.0.5
网络汇总LSA (Type 3)
注意:如下图所示,Sangria向Area22发送Area10的LSA3信息跟Chardonary发送的LSA3一样么?
为了减少LSP泛洪的影响,OSPF有了Area的概念,每个区域都有自己的LSDB。所以在Area22的数据库中,是不知道ABR Chardonary的,因此这个LSA3是Sangria产生的。Area22的router要去Area10的区域,他会直接把信息发给Sangria,Sangria才知道如何到达Chardonnay。
ASBR汇总LSA (Type 4)
AS外部LSA (Type 5)
如下图所示,LSA5是由ASBR发送的,而且不受任何区域限制,正因为如此,所以才会有LSA4。因为对于Area10来说,Shiraz并不知道如何到达ASBR,换句话说在Area10的LSDB中没有ASBR的信息,所以需要ABR Chardonnay发送LSA4,通告如果访问域外路由,发给我,我知道如何到。
在LSA5的域外路由中有两个概念:
E1:计算到ASBR的metric (Comparable directly to link state metric)
E2:不计算到ASBR的metric (Larger than any link state path),默认metric为20
路由器默认优选E1路由,在同类型的路由中才对比metric
末梢网络(Stub Areas)
如下图所示,在Area10中存在了LSA3、4、5类的路由,其实Shriaz根本不用知道那么多,只要知道如果访问域间或域外路由,发给ABR就可以了。
所以外部路由完全可以忽略,这样可以减少LSDB的大小。在末梢网络中,LSA5的路由被过滤掉了,既然LSA5的路由没有了,LSA4的路由信息也随之消失了。
这时ABR会发送一条默认路由到本区域中。
注:在stub中,E-bit=0(hello报文或DB报文中的option参数)
完全末梢(Totally Stubby Areas)
这个比较好理解,既然有了默认路由,而且这个默认路由就是指向ABR的,所以就没必要有LSA3了,因此直接在ABR上可以把LSA3消除掉。现在再看看Area10的数据库……世界从此安静了~嘿嘿
非纯末梢(Not-So-Stubby Areas)
由于末梢网络是不允许存在ASBR的,但实际应用中可能会需要在Stub网络环境中分布域外的路由,这时就破坏了Stub,因此才有的非纯末梢网络。
在此区域中会产生LSA7,也就是NSSA的LSA。
LSA7只在NSSA域内传送,当把LSA7发送到其他区域时,ABR会把它转化为LSA5,以外部路由的形式发送出去。
P-bit=1 转7类LSA为5类LSA
P-bit=0 只能NSSA内部,不转5类LSA,所以也就不能在area0传播
注:对于普通的NSSA,他跟stub一样,会消除lsa4和lsa5,但是不会自动产生默认路由(stub区域之所以有默认路由,是因为区域内的路由器要访问域外路由,而域外路由被stub过滤掉了,而在NSSA中是不允许存在LSA5的,所以没必要产生默认路由,但这样NSSA区域的设备就无法访问其他ASBR发送的LSA5的路由了),这时就需要配置“area 22 nssa default-ori”。如果不配置上面配置,可以在NSSA配置“no summary”,这样就消除了LSA3,也就会自动生成域间默认路由了。