OSPFv2(IPv4)简要回顾(RFC2328):
--可支持大规模的路由
--路由变化快速收敛
--无路由环路
--支持等价负载均衡(LSA链路状态路由协议,仅仅支持等价,非等价的是EIGRP和BGP可以支持)
--支持区域分级管理
--支持路由分级管理
--支持验证(明文验证和MD5的验证)
--支持以组播发送协议报文(224.0.0.5和224.0.0.6)
OSPFv2的协议号是89.
Router-ID是一个32位的无符号的整数, 是一个路由器的唯一标示,所以一般用环回来表示.在整个AS内唯一.
区域内的路由器(IAR)------该路由器所有接口都属于同一个ospf区域.
区域边界路由器(ABR)-----负责传递不同区域间的路由信息.该路由器同时属于两个以上的区域(其中一个区域一定是area0)
自治系统边界路由器(ASBR)-----负责引入其他自治系统的路由信息,该路由器引入了其他路由协议(重分发).
PS.路由器的各种类型是可以相互切换的(除了不能同时是IAR和ABR)
所有类型的路由器用一个图表示的话:
OSPFv2把所有的网络拓扑抽象成三种情况:
--Stub网络 , 该网络所连接的只有自己的路由.
--Point-to-point网络, 该路由器通过点到点的网络与另一台路由器相连.
--广播(broadcast)或者NBMA网络: 该路由器通过广播网络或NBMA网络与多台路由器相连接.
接口类型:(OSPF的接口有五种类型)
-->点到点(P2P)接口
-->点到多点(P2MP)接口
-->点到多点非广播(P2MP non-broadcast)接口
-->广播(Broadcast)接口
-->NMBA(Non-broadcast Multi-access)接口
~~~~~~Virtual link接口是一种特殊的P2P接口类型.(建立一个虚拟隧道)
OSPF的洪泛与链路状态数据库
在OSPF的一个区域里面,LSA会泛红到所有路由器,最终让该区域的所有路由器进行数据库统一.
通过大家交换LSA.(Type-1,type-2的泛洪)
OSPF数据报文有五种:
-->Hello 报文,发现及维持邻居关系,选举DR,BDR
-->DBD报文,描述本地LSDB的情况
-->LSR报文,向对端请求自己没有的LSA
-->LSU报文,向对方更新LSA
-->LSAck报文,收到LSU后,进行确认
■所有报文使用同样的报文头
■除了Vlink,在其他链路上传播距离为一跳.
OSPFv3协议介绍
----运行于IPv6的OSPF路由协议(RFC2740)
---基于OSPFv2基本原理并且增强,是一个独立的路由协议。协议号依然是89,Router-id依然是一个32位的无符号整数.[这里的Router-ID在IPv6中不是一个IP地址的格式了,而是32位无符号整数]
虽然OSPFv3和V2很多概念是一样的,但是相互并不兼容.
OSPFv3和OSPFv2的不同点:
1, 基于连接(Link),而不是网络(subnet)运行
OSPFv3的拓扑描述依赖于IPv6的link-local地址,又脱离于IPv6的任何地址.
其实也就是说,在链路上面就算没有OSPF的单播地址,也照样能形成邻居关系.因为源是link-local地址,目的是组播地址,这样就能完成ospf的交互.
这里有两个例子:
OSPFv2,是基于链路运行的.例如下面,在同一个MA网络中,一定是大家要子网网段一直,掩码一致,才能建立邻居关系.
而OSPFv3如下,每个路由器连接到MA网络中,子网都是不同的.
RTA=5f00.1111::1/32 RTB=5f00.2222::1/32 RTC=5f00.3333::1/32
即使是这样,他们一样的能建立起来OSPF邻居关系,因为使用的是link-local为源地址.
因为拓扑数据库要描述的东西完全和地址没有关系,数据库需要描述的是RTA/B/C在同一个子网,cost是多少就够了.(具体的网段和数据库没有多大关系)
2,IPv6地址语义和协议设计分离
OSPFv3的拓扑描述依赖于IPv6的link-local地址,又脱离于IPv6的任何地址.
其实也就是说,在链路上面就算没有OSPF的单播地址,也照样能形成邻居关系.因为源是link-local地址,目的是组播地址,这样就能完成ospf的交互.
具体在哪里体现出语义和协议设计分离呢?
1,利用IPv6的link-local地址来传递网络拓扑信息,但是拓扑信息里不包括IPv6地址.
2,Router-LSA和Network-LSA只反映网络拓扑信息;
3,采用专门的LSA来传递IPv6的前缀信息(Intra-area prefix LSA)
4,Router-ID,Area ID和LSA link state ID依然是IPv4的格式(32bit),而不是IPv6地址
5,邻居由于邻居Router ID来标示.
3,明确LSA洪泛范围并且增加link-local洪泛范围
IPv4中,router-LSA和network-LSA在本区域内进行泛洪.Type-3 summary LSA是在区域间泛洪,type-4是区域间,type-5是全网泛洪.....但是这个范围不外乎都是区域内或者区域间进行泛洪.
但是对于OSPFv3来说,还增加了一个链路范围进行泛洪.
1, 新增加了Type-8的LSA,仅仅在本地链路范围内进行洪泛.泛洪范围:链路本地(link-local scope)
2, 区域范围(Area Scope): Router-LSA, Network LSA, Inter-area-Prefix-LSA
Inter-Area-Router-LSA, AS-NSSA-LSA(仅仅存在于NSSA区域)
Intra-Area-prefix-LSA(新增)
3, 自治系统范围(AS Scope): AS-External-LSA
泛洪范围 |
|
链路本地泛洪 |
Link-LSA(Link-local Scope) Type-8 |
区域内泛洪 |
Router-LSA(Type-1) |
Network-LSA(Type-2) |
|
Intra-Area-Prefix-LSA(承载区域内IPv6的前缀) Type-9 |
|
NSSA区域内 |
AS-NSSA-LSA(Type-7) |
区域间泛洪 |
Inter-Area-Prefix-LSA |
Inter-Area-Router-LSA |
|
AS内泛洪 |
AS-External-LSA(type-5) |
4,连接(Link)多实例化
多实例的应用.
场景1:这里A/B/C/D都在同一个子网中,预期的结果是:
A--D形成邻居/邻接关系.
B--C形成邻居/邻接关系.
A-X-C没有任何关系. B-X-D也没有任何关系.
在IPv4中是不行的,但是在IPv6中,在Hello包中增加一个叫Instance-ID的字段.也作为一个必须匹配字段,不同就不能建立邻居.
5,使用链路本地(link-local)地址
除了Virtual link以外(虚链路实际上是一个隧道技术,已经超出了链路范围),其他的链路上发送的报文源地址都是link-local地址,目的地址为link-local地址或者是组播地址.[实际上就是根本不会用单播地址进行协商]
6,验证与效验和变化
OSPFv3报文中不再包含AuType和Authentication,而依赖IPv6的扩展验证包头来进行认证.
效验和checksum变化:
OSPFv3使用IPv6标准的check sum. IPv6的效验和覆盖范围比较IPv4,将会覆盖IPv6的包头.
7,报文格式变化
下面是OSPFv2和V3的包头的变化:
在V2中,认证有很多字段,到了V3以后就没有了.
但是V3多增加了一个Instance ID,这样就可以做多实例的邻居关系了。
OSPFv3包头字段的描述:
--Version:版本,对于OSPFv2,该值=2,OSPFv3=3.
--Type: 1-Hello,2-DD,3-LSR,4-LSU,5-LSAck
--Packet Length: OSPFv3报文长度
--Router ID:路由器ID,全网唯一.
--Area ID:区域ID,除了虚连接以外.其他的都需要和骨干区域相连接.
--Checksum:效验和
--Instance ID:链路实例ID.建立邻居的时候必须匹配,否则2way都建立不起来.V3新增加字段.
8,LSA类型和格式的变化
除了第六是从来没有启用过的,8和9和新增加的.