HC120115000 OSPF协议基础2_(OSPF基本工作原理)

news/2024/7/9 23:39:49 标签: 安全, 负载均衡

1、邻居建立过程

1、Route-id的标识
  1. 设备在网络中运行了ospf,需要有一个标识来唯一的确定他的存在,相当于给设备起一个名字,这个名字就叫做Router-id,名字不能相同,Router-id在同一个网络环境中也不能相同,Router-id会在进行邻居建立以及路由更新时唯一的标识路由器的存在。
  2. Router-id的选举:(1)以手工配置的为最优。(2)以双UP状态的逻辑接口次之。(3)最后选择双UP状态的物理接口。
  3. 实际在ensp当中,关于router-id的选择,会首先选择最开始配置的路由器接口IP。
  4. ospf中在进行了router-id的更改后,为了保证路由结构的稳定性,只会在重启ospf进程后或者重启设备后才会生效。
  5. 重启ospf进程命令为:<Huawei>reset ospf process
2、Hellow报文的作用
  1. 邻居发现:ospf采用组播方式来自动发现邻居路由器的存在,组播地址为224.0.0.5和224.0.0.6。
  2. 邻居建立:进行参数协商,协商成功后即可建立邻居关系,关键在于hellow报文中的字段匹配程度,可满足邻居建立条件则可成功建立邻居关系。
  3. 邻居保持:通过Keepalive机制,检测邻居运行状态,通过频繁进行hello包的发送进行邻居保活。
    在这里插入图片描述OSPF公共头部
    version2:版本信息。(需一致)
    Message Type:消息类型。( 都为hellow且互相发送才可建立邻居关系)
    Packet Length:包长度,包含包头及内容。(视包大小而不同)
    Source OSPF Router:自身的Router-id。(不可相同)
    Area ID:区域号。(需相同,不通区域则无法建立邻居关系)
    Checksum:检验字段。
    Auth Type:认证类型。
    Auth Data:认证数据即认证密码。
    OSPF Hello Packet头部信息
    Network Mask:网络掩码。(需一致)
    Hello Interval:hello包发送间隔时间。(需一致)
    Options:可选项字段
  • DN位:用于基于MPLS的三层VPN技术。直接看应用场景。
  • O位:用来说明路由器是 否有能力发送和接收opaque LSA即类型9,类型10和类型11
  • DC位:当始发路由器支持按需链路上的OSPF能力时,设置此位
  • L位:指示OSPF数据包是否包含链路本地信令(LLS)数据块(该信息在报文后面)。此位仅在Hello和DD数据包中设置
  • N/P位:N位:设置N-bit=1,表明该LSA支持NSSA外部路由,即为LSA 7,N-bit=0则不支持。需要注意的是如果N-bit=1,那么E-bit必须为0;P位:位和N位在同一字段内,如果该字段选择设置P-bit,可以告诉一个NSSA中的ABR将LSA 7 转换为 LSA 5,即将P-bit位从1设置为0。
  • MC位:该位描述是否组播扩展OSPF,也就是MOSPF。
  • E位:当始发路由器具有接受AS外部LSA的能力时,该位将被设置。
  • MT:设置了该位表示始发路由器支持多拓扑OSPF(MT-OSPF)。
    Router Priority:路由器优先级。
    Router Dead Interval:失效时间即死亡时间。(需一致)
    Designated Router:DR路由器ID号。
    Backup Designated Router:BDR路由器ID号。
    Active neighbor:邻居路由器ID号。
2、OSPF邻居建立过程

在这里插入图片描述状态含义:
Down:这是邻居的初始状态,表示没有从邻居收到任何信息。
Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己的Router ID不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。
2-Way:在此状态下,路由器发现自己的Router ID存在于收到的Hello报文的邻居列表中,已确认可以双向通信。
邻居建立过程如下:
RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2。当RTA启动OSPF后,RTA会发送第一个Hello报文。此报文中邻居列表为空,此时状态为Down,RTB收到RTA的这个Hello报文,状态置为Init。
RTB发送Hello报文,此报文中邻居列表为空,RTA收到RTB的Hello报文,状态置为Init。
RTB向RTA发送邻居列表为1.1.1.1的Hello报文,RTA在收到的Hello报文邻居列表中发现自己的Router ID,状态置为2-way。
RTA向RTB发送邻居列表为2.2.2.2的Hello报文,RTB在收到的Hello报文邻居列表中发现自己的Router ID,状态置为2-way。
因为邻居都是未知的,所以Hello报文的目的IP地址不是某个特定的单播地址。邻居从无到有,OSPF采用组播的形式发送Hello报文(目的地址224.0.0.5)。对于不支持组播的网络,OSPF路由器可以采取手工单播形式进行建立,通过peer指定。

2、OSPF链路状态信息

链路信息主要包括:

  1. 链路类型:P2P、BMA、NBMA、P2MP。
  2. 接口IP地址以及掩码。
  3. 链路上连接的邻居路由器。
  4. 链路的带宽(开销)。在这里插入图片描述P2P:对应串口现路,hello时间30s。
    BMA:对应以太网链路,hello时间10s。
    NBMA:对应FR、ATM链路,hello时间30s。
    P2MP:根据使用场景进行确定,hello时间30s。
2、OSPF的度量方式

OSPF在计算接口的cost时,cost=参考带宽/实际带宽,默认参考带宽为100M。当计算结果有小数位时,只取整数位;结果小于1时,cost取1。
若需要调整接口cost值有两种方式:

  1. 直接在接口下配置,需要注意的是,配置的cost是此接口最终的cost值,作用范围仅限于本接口。[Huawei-GigabitEthernet0/0/0]ospf cost 10
  2. 修改OSPF的默认参考带宽值,作用范围是本路由器使能OSPF的接口。建议参考整个网络的带宽情况建立参考基线,所有路由器修改相同的参考带宽值,从而确保选路的一致性。[Huawei-ospf-10]bandwidth-reference 1000
  3. OSPF以“累计cost”为开销值,也就是流量从源网络到目的网络所经过所有路由器的出接口的cost总和,以RTA访问RTC Loopback 1接口192.168.3.3为例,其cost=G1’s cost+G3’s cost。

相比于RIP,OSPF的度量方式不仅考虑“跳数”,而且还考虑了“带宽”,比RIP更可靠的选择最优的转发路径。

2、OSPF报文类型及作用

在这里插入图片描述RIP路由器之间是基于UDP 520的报文进行通信,OSPF也有其规定的通信标准。OSPF使用IP承载其报文,协议号为89。
在OSPF Packet部分,所有的OSPF报文均使用相同的OSPF报文头部:
Version :对于当前所使用的OSPFv2,该字段的值为2。
Type:OSPF报文类型。
Packet length:表示整个OSPF报文的长度,单位是字节。
Router ID:表示生成此报文的路由器的Router ID。
Area ID:表示此报文需要被通告到的区域。
Checksum:校验字段,其校验的范围是整个OSPF报文,包括OSPF报文头部。
Auth Type:为0时表示不认证;为1时表示简单的明文密码认证;为2时表示加密(MD5)认证。
Authentication:认证所需的信息。该字段的内容随AuType的值不同而不同。
在这里插入图片描述Type=1为Hello报文,用来建立和维护邻居关系,邻居关系建立之前,路由器之间需要进行参数协商。
Type=2为数据库描述报文(DD),用来向邻居路由器描述本地链路状态数据库,使得邻居路由器识别出数据库中的LSA是否完整。
Type=3为链路状态请求报文(LSR),路由器根据邻居的DD报文,判断本地数据库是否完整,如不完整,路由器把这些LSA记录进链路状态请求列表中,然后发送一个LSR给邻居路由器。
Type=4为链路状态更新报文(LSU),用于响应邻居路由器发来的LSR,根据LSR中的请求列表,发送对应LSA给邻居路由器,真正实现LSA的泛洪与同步。
Type=5为链路状态确认报文(LSAck),用来对收到的LSA进行确认,保证同步过程的可靠性。
DD、LSR、LSU、LSAck与LSA的关系:
DD报文中包含LSA头部信息,包括LS Type、LS ID、Advertising Router 、LS Sequence Number、LS Checksum。
LSR中包含LS Type 、LS ID和Advertising Router 。
LSU中包含完整的LSA信息。
LSAck中包含LSA头部信息,包括LS Type、LS ID、Advertising Router、LS Sequence Number、LS Checksum。
在这里插入图片描述OOBResync:带外数据重新发送。
Init:表示发送的第一个DD包。
More:表示后面还有数据。
Master:主备路由器。
报文的功能作用:
在这里插入图片描述

2、OSPF中LSDB同步过程

在这里插入图片描述状态含义:
ExStart:邻居状态变成此状态以后,路由器开始向邻居发送DD报文。Master/Slave关系是在此状态下形成的,初始DD序列号也是在此状态下确定的。在此状态下发送的DD报文不包含链路状态描述。
Exchange:在此状态下,路由器与邻居之间相互发送包含链路状态信息摘要的DD报文。
Loading:在此状态下,路由器与邻居之间相互发送LSR报文、LSU报文、LSAck报文。
Full:LSDB同步过程完成,路由器与邻居之间形成了完全的邻接关系。
LSDB同步过程如下:
RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2并且二者已建立了邻居关系。当RTA的邻居状态变为ExStart后,RTA会发送第一个DD报文。此报文中,DD序列号被随机设置为X,I-bit设置为1,表示这是第一个DD报文,M-bit设置为1,表示后续还有DD报文要发送,MS-bit设置为1,表示RTA宣告自己为Master。
当RTB的邻居状态变为ExStart后,RTB会发送第一个DD报文。此报文中,DD序列号被随机设置为Y(I-bit=1,M-bit=1,MS-bit=1,含义同上)。由于RTB的Router ID较大,所以RTB将成为真正的Master。收到此报文后,RTA会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange。
在这里插入图片描述RTA开始向RTB发送LSR报文,请求那些在Exchange状态下通过DD报文发现的、并且在本地LSDB中没有的链路状态信息。
RTB向RTA发送LSU报文,LSU报文中包含了那些被请求的链路状态的详细信息。RTA在完成LSU报文的接收之后,会将邻居状态从Loading变为Full。
RTA向RTB发送LSAck报文,作为对LSU报文的确认。RTB收到LSAck报文后,双方便建立起了完全的邻接关系。
在这里插入图片描述这是形成邻居关系的过程和相关邻居状态的变换过程。
Down:这是邻居的初始状态,表示没有从邻居收到任何信息。在NBMA网络上,此状态下仍然可以向静态配置的邻居发送Hello报文,发送间隔为PollInterval,通常和Router DeadInterval间隔相同。
Attempt:此状态只在NBMA网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为HelloInterval。如果Router DeadInterval间隔内未收到邻居的Hello报文,则转为Down状态。
Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己所发送的Hello报文的邻居列表中。
2-Way Received:此事件表示路由器发现与邻居的双向通信已经开始(发现自己在邻居发送的Hello报文的邻居列表中)。Init状态下产生此事件之后,如果需要和邻居建立邻接关系则进入ExStart状态,开始数据库同步过程,如果不能与邻居建立邻接关系则进入2-Way。
2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。
1-Way Received:此事件表示路由器发现自己没有在邻居发送Hello报文的邻居列表中,通常是由于对端邻居重启造成的。
ExStart:这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DD报文。主从关系是在此状态下形成的;初始DD序列号是在此状态下决定的。在此状态下发送的DD报文不包含链路状态描述。
在这里插入图片描述LSA(Link State Advertisement)是路由器之间链路状态信息的载体。LSA是LSDB的最小组成单位,也就是说LSDB由一条条LSA构成的。
所有的LSA都拥有相同的头部,关键字段的含义如下:
LS age:此字段表示LSA已经生存的时间,单位是秒。
LS type:此字段标识了LSA的格式和功能。常用的LSA类型有五种。
Link State ID:此字段是该LSA所描述的那部分链路的标识,例如Router ID等。
Advertising Router:此字段是产生此LSA的路由器的Router ID。
LS sequence number:此字段用于检测旧的和重复的LSA。
LS type,Link State ID和Advertising Router的组合共同标识一条LSA。
LSDB中除了自己生成的LSA,另一部分是从邻居路由器接收的。邻居路由器之间相互更新LSA必然需要一个“通道”。

2、OSPF中DR与BDR的选举及作用

在这里插入图片描述邻居(Neighbor)关系与邻接(Adjacency)关系是两个不同的概念。OSPF路由器之间建立邻居关系后,进行LSDB同步,最终形成邻接关系。
在P2P网络及P2MP网络上,具有邻居关系的路由器之间会进一步建立邻接关系。
在广播型网络及NBMA网络上,非DR/BDR路由器之间只能建立邻居关系,不能建立邻接关系,非DR/BDR路由器与DR/BDR路由器之间会建立邻接关系,DR与BDR之间也会建立邻接关系。
邻接关系建立完成,意味着LSDB已经完成同步,接下来OSPF路由器将基于LSDB使用SPF算法计算路由。

  • 选举规则:(1)首先根据优先级选举,0-255,[Huawei-GigabitEthernet0/0/0]ospf dr-priority 255。(2)再选择Router-id,越大越优先。

--------------------------------------武汉艾迪时代IT教育----------------------------------------------------


http://www.niftyadmin.cn/n/1509556.html

相关文章

HC120115001 OSPF域内路由

OSPF中LSA的类型主要有&#xff1a; 1、Router-LSA 1、Router-LSA描述P2P网络 每台OSPF路由器使用一条Router-LSA描述本区域内的链路状态信息。LSA头部的三个字段含义如下&#xff1a; &#xff08;1&#xff09;Type&#xff1a;LSA类型&#xff0c;Router-LSA是一类LSA。 …

YII学习总结4(cookie操作)

cookie操作 <?phpnamespace app\controllers;use yii\web\Controller;use yii\web\Cookie;class HelloController extends Controller{//存入cookie和修改cookie$cookies \YII::$app->response->cookies; $cookie_data array(name>"user",&quo…

HC120115002 OSPF域间路由

一、区域间路由计算过程 1、区域的划分 OSPF采用划分区域的方式&#xff0c;将一个大网络划分为多个相互连接的小网络。每个区域内的设备只需同步所在区域内的链路状态数据库&#xff0c;一定程度上降低内存及CPU的消耗。划分区域后&#xff0c;根据路由器所连接区域的情况&am…

HC120115003 OSPF外部路由

一、外部路由计算过程 1、外部路由引入 在图中&#xff0c;RTA上配置了一条静态路由&#xff0c;目的网络是10.1.60.0/24&#xff0c;下一跳是RTF。在RTA的OSPF进程下&#xff0c;将配置的静态路由重发布到A公司的OSPF网络中&#xff0c;其中引入外部路由的OSPF路由器叫做ASBR…

mysql数据库所有基本操作语句

一、库的操作 1、查看所有的数据库名称 Show databases; 2、创建新的数据库 Create database test; 3、查看数据库的属性 show create database test; 4、进入数据库 use test; 5、删除数据库 drop database tes1t; 二、数据表的操作 1、查看当前数据库下所有…

如何提高redmine的访问速度

刚开始使用redmine时方法一:可以采用nginxpassenger的方式来驱动redmine提升访问速度&#xff0c;但是在新建问题或更新问题时变得非常慢&#xff0c;这是因为在新建问题和更新问题时会发送邮件&#xff0c;而且是同步操作的&#xff0c;就是说需要等到邮件发送成功后才会返回。…

Centos环境下安装Docker环境

Docker 目前支持 CentOS 7 及以后的版本 。 系统的要求跟 Ubuntu 情况类似&#xff0c; 64 位操作 系统&#xff0c;内核版本至少为 3.10 。 首先&#xff0c;为了方便添加软件源&#xff0c;以及支持 device mapper 存储类型&#xff0c;安装如下软件包&#xff1a; 1.docker只…

jquery.base64.js简单使用

jquery.base64.js&#xff0c; 加密&#xff0c;使用&#xff0c;先引入jquery&#xff0c;然后引入jquery.base64.js 使用如下 js中加密如下 $.base64.encode(result[i].ipadress) js中解密如下 $.base64.decode("${param.ipadress}")转载于:https://www.cnblogs.co…