Area
- 一个区域内的路由器不会知道自己区域外路由的具体情况,使用区域可以减少数据库大小,减少对路由器内存和CPU消耗,同时减少LSA的发布;
- 区域ID使用32-bit,可以同时使用十进制或者带点的十进制,例如271等同于0.0.1.15;
- 根据区域可以定义3种类型的区域:
- Intra-area traffic:在一个区域内部传播的包;
- Inter-area traffic:在不同区域传播的包;
- External traffic:在OSPF域和其他自治系统传播的包
4. 使用区域0作为backbone。所有inter-area流量都必须通过backbone;非backbone区域不能直接交换包;
5.. 所有路由器可以分类为:Internal Router, Backbone Router,Area Border Router (ABR), Automomous System Boundary Router (ASBR). 所有前三种路由器,都可以属于最后一种
Virtual Link
OSPF将虚拟链路看做是一种网络类型;这个连接是没有地址的,属于backbone,介于两个ABRs之间的;virtual link是点对点的;virtual link的cost等于到邻居的cost;
★Virtual Links 用于2个目的:
- 通过一个非backbone区域连接一个区域到backbone区域;
- 通过一个非backbone区域连接两个被分割的backbone区域;
★形成virtual links的要求:
- Virtual Link必须在两个ABR直接配置;
- Virtual Link 经过的区域叫做transit area,此区域必须有完全的路由信息;
- transit area 不能是stub area;
The Link State Database:
- LSA有age,默认是MaxAge 1小时,1小时到了过后,他们将被删除;Link State refresh机制会每隔30分钟 (LSRefreshTime)发送一个新的sequence number增加了的age为0的LSA;当邻居收到这个新的LSA,将用新的替换旧的;所以 Link state refresh相当于是LSA的keepalive;
- Link state refresh机制,每个LSA单独拥有LSRefreshtime的好处是,所有LSAs不会同时过期,也就不会同时产生大量的LSA包流量,但缺点是带宽利用率低,因为有时候一个更新包可能就只包含一条LSA;
- LSA group pacing,这个机制是单独更新和统一更新的折中方法;每个LSA拥有一个单独的refres timer,当其过期时候,会再加上一个延迟,等待其他LSA过期;默认是 240秒,可以通过命令timer lsa-group-pacing 更改,范围是10到1800秒;
- 所有收到的有效LSA存储在link state database内,使用命令show ip ospf database查看;
- LSA type
- 每个路由器都产生Router LSA;列举出路由器的所有连接或者接口、状态和出口cost;只在区域内部传播;show ip ospf database router 可单独查看;
- Network LSA: 每个多路访问网络DR产生此LSA;此LSA列举了所有相连的路由器,包括DR自己;只在本区域传播;使用命令show ip ospf database network单独查看;
- Network Summary LSA:ABR产生此LSA;告知一个区域外部路由;相当于ABR告诉区域内部路由器,ABR可以到达哪些地方;ABR也使用此LSA将与其相连的区域内部路由发布到backbone内;区域外的同时在OSPF自治区域内默认路由也由此LSA发布;当ABR发布此LSA时,将包含ABR到此目的地的cost;★如果有多条路径ABR 只发布一条带有最小cost的LSA到内部区域或者到backbone;★当路由器收到ABR发来的network summary LSA,它不会进行SPF计算,相反,仅仅简单地将其到ABR的cost加上ABR发布的cost,然后直接加入到其路由表中,由此可见OSPF在一个区域内是链路状态路由协议,在inter-area是距离矢量算法;使用命令show ip ospf database summary单独查看;
- ASBR Summary LSA:ABR产生此LSA;ASBR summary跟Newtork Summary LSA 完全一样除了发布的目的地是ASBR地址而不是网络;目的地址是个主机地址,掩码是全0;
- Autonomous System External LSAs: 又叫External LSA;由ASBR产生,用于宣告OSPF自治系统外部路由或者自治系统外部默认路由;此LSA没有跟任何区域绑定,将传播到整个自治系统;使用命令show ip ospf database external单独查看;
- Group Membership LSA:用于Mulitcast OSPF (MOSPF);
- NSSA External LSAs:ASBR在NSSA区域产生的LSA;此LSA几乎跟External LSA一样;不同的是External LSA在整个OSPF自治域内传播,NSSA只在NSSA区域内产生和传播。使用命令show ip ospf database nssa-external单独查看;
Stub Areas
- ASBR学到的外部路由默认会传播到整个OSPF自治域内,有时候,很大一部分OSPF路由表都是外部路由占据,但有些区域只跟Area 0 相连,没有必要接收所有的外部路由。
- Stub Area就是不允许External LSA传播的区域;因为Type 5类型LSA不允许传播,那么传播Type 4的LSA也就没有必要了,所以Type 4 和 5 都被阻止进入Stub Area;
- 在Stub Area边缘的ABR会发送一个Type 3的默认路由(目标0.0.0.0)进入Stub area;
- 所有路由不能在inter-area或者inter-area找到的,都将匹配默认路由;
- 因为默认路由是Type3 LSA,它将不会被传播到区域之外;
- Stub Area的一些限制:
- 因为任何种类的区域内,所有路由器必须有相同的数据库;为了确保满足这个要求,所有stub area内的路由器将hello包的E-bit设定为0,任何E-bit为1的都与其他路由器形成邻接;
- 虚拟链路不能通过stub area;
- 在stub area内不能有ASBR;因为ASBR发送Type 5消息,而Type 5消息是不能够在Stub area内出现的;
- 一个Stub area允许有多个ABR,因为有默认路由存在,内部路由器不能识别到ASBR的最佳路径;
Totally Stubby Area
- Cisco 私有,在stub area基础上,继续block Type3message;
- 使用默认路由到达本区域以外所有区域;
- ABR将阻止Type 3 4 5,唯一的例外是发布默认路由的Type 3 LSA;
Not-so-stubby areas(NSSA)
- NSSA 允许外部路由在区域内传播,同时对其余的自治系统保留stub area属性;
- NSSA内的ASBR将产生Type 7的LSA来传播外部路由;这些Type 7 LSA将在NSSA内传播,但会在ABR被阻止;
- Type 7 LSA有一个P-bit;NSSA ASBR有选项可以修改此P-bit;如果设定为1,那么Type 7将被转换为Type 5然后传播到其他区域;如果设定为0,则Type 7将不会传播到NSSA以外的区域;
路由表
- 一条路由的cost是到目的地所有出口接口cost之和;
- LSA使用16-bit记录cost,范围是 1到65535;
Destination Type
- 每一个路由条目,可以分类为networ或者router;
- Network条目是网络地址,数据包可以根据此类条目被路由;这些目的地址被录入路由表中;
- Router条目用来路由至ABR或者ASBR;如果路由器需要发送包到inter-area地方它必须知道怎样找到ABR;如果一个包要发送到external目的地,路由器必须知道怎样到达ASBR;路由器在另外一个地方保存这个信息;使用命令 show ip ospf border-routers 查看;
每个条目最后的数目是SPF算法反复安装此条目的次数。
Path Types
每条到一个网络的路由将归属于4种路径类型的其中一种:
- Intra-area paths。到达与路由器相连区域目的地的路由;
- Inter-area paths。到达OSPF自治区域以内其他区域的路由;此路径类型将经过至少一个ABR;
- Type 1 external paths。达到OSPF自治区域以外的路由;ASBR负责给外部路由赋予一个OSPF的cost;Type 1 的cost是路由本身cost和到达ASBR的cost之和;
- Type 2 external paths。达到OSPF自治区域以外的路由;cost只算路由本身cost,不加到达ASBR的cost;OSPF默认使用E2 path;
★OSPF使用最长掩码匹配,如果遇到相同掩码,使用以下顺序挑选路由:
- Intra-area paths;
- Inter-area paths;
- E1 external paths;
- E2 external paths;
★OSPF支持等cost负载均衡;如果多条相同cost,相同path type的路由存在,那么OSPF将会利用负载均衡同时使用;默认最多同时使用4条,使用命令maximum-paths可以改到最大6条;
OSPF包格式
★IP包头89封装OSPF包,IP包设定TTL 1确保OSPF包只在直连的邻居间传递,TOS设定为高优先级110 (Internetwork Control Precedence);
★OSPF packet header 对所有OSPF包都相同;OSPF Packet Data使用各自不同的数据结构;
1. The Packet Header
所有OSPF包都以这个24 octer的头开始
- Version:OSPF版本,目前为2;
- Type:1--Hello;2--Database Description;3--Link State Request;4--Link State Update;5--Link State Acknowledgement;
- Packet length:OSPF包长度,包括包头;
- Router ID:产生此包的路由器ID;
- Area ID:产生此包的区域ID;如果是在virtual link上面的包,Area ID为0.0.0.0,因为virtual link被认为是backbone的一部分;
- Checksum:包括包头的标准checksum;
- AuType:0--Null ,Au部分不会检查,可以是任意数据;1--Au 部分最多包含64 bits的口令;2--Au部分包含Key ID, Authentication Data Length 和 Cryptographic Sequence Number;
2. OSPF hello packet
- Network Mask: 发送接口的子网掩码;如果此掩码跟接受接口的掩码不匹配,包将丢弃;
- Hello INterval:发送、接受路由器必须有相同,否则不能建立邻居关系;
- Options:增加兼容性,路由器可以因为此值不兼容而拒绝建立邻居关系;
- Router Priority:用于DR、BDR选举,为0则不能成为DR或者BDR;
- Router Dead Interval:未收到Hello包之前等待时间;双方必须有相同的interval才能建立邻居关系;
- Designated Router:网络上DR接口的地址(不是Router ID);如果没有DR(还没选举或者网络类型不用DR)则填写为 0.0.0.0;
- Backup DR: 参考上面;
- Neighbor:所有有效邻居列表;
3. Database Description Packet
DD packet在邻接关系建立过后使用。
- Interface MTU:以octet为单位,表明源接口允许的最大IP包的大小;在virtual link上设定为0x0000;
- Options:允许路由器选择不发送部分LSAs给不支持特定功能的邻居;
- I-bit:第一个DD packet设为1,其他后续的设为0;
- M-bit:More bit,1表明还不是最后一个包;最后一个包设为0;
- MS-bit:Master/Slave bit,1意味着发送者是master,slave为0;
- DD sequence number:Master设定,并在后续包中增加;
- LSA Headers:源路由器Link state database的部分或者所有LSA 头;
4. Link State Request Packet
当路由器收到DD包过后,有可能有在其database里面没有的条目,于是将这些条目放入Request包中;路由器发送一个或多个Link State Request包请求LSA;注意,包是通过Type, ID 和 发布路由器来唯一确定LSA的,而不是通过具体实例(sequence number, checksum 和 age);所以请求的是最新的是LSA,不论是否是真正想要的那个;
5.Link State Update Packet
包含一个或多个LSA,用于传播LSA和响应LSA Update;只发送给直连的邻居(只有1跳);
- Number of LSAs:包含的LSA数量;
- LSAs:完全的LSA;每个包可以有多个LSA,直到达到链路允许的最大包大小;
6. Link State Acknowledgement Packet
用于保证LSA可靠传播;每一个收到的LSA都必须明确的确认;一个ACK包可以包含多个LSA headers;
转载于:https://blog.51cto.com/666239/408854