OSPF邻居状态机及邻居创建
【实验验证 】OSPF邻居创建的影响因素
#show ip ospf neighbor
FULL(邻居状态机)/DR(接口状态机)
一、hello时间和dead时间不一致
hello时间和dead时间只能在接口下改;
改hello时间,dead时间确定会变;而改dead时间,hello时间不会变,
但一样影响邻居的创建;
R1(config-if)#ip ospf hello-interal 5
合格的工程师-理解协议去分析它
排错:
(1)ping看直连是否能通?
直连通,没有邻居关系,经过debug方式去查
(2)R1#debug ip ospf packet
#terminal monitor
能够收到hello报文的,没有邻居关系,极可能hello配置错误
(3)......
************************************************************************
二、认证类型和认证数据不一致(OSPF头部)
认证的做用:检查对端的一个有效性,若是把接口宣告进OSPF,对方可能伪冒和你创建邻居关系,防止不受信任的设备和你创建邻居关系,防止非法设备的接入,能够用认证。
(1)接口认证 :
基于接口的,配了认证的接口在发送的OSPF报文中会携带认证;
(2)区域认证:
在区域里面配了认证,全部属于这个区域的接口在发送OSPF报文中都会携带认证;
注意:若是同时配置了接口认证和区域认证,接口认证优先于区域认证;
【实验】OSPF认证配置 20:28
(1)明文认证:
首
先,判断认证类型是不是一致的,在此基础上在看认证密码是否一致。
明文认证,不安全,能够经过抓包获取密码学到路由条目;
//抓包分析
(2)密文认证:
Auth Data:(MD5值,128比特位)OSPF报文的哈希值,哈希值同样两端的密钥同样,MD5不可逆:数值一点不同,加密出来的就不同 。
Auth Crypto Sequence Number有何用?每个OSPF报文里面的sequence number是不是一致的?
主要是为了抗重放攻击的:网购须要支付,须要输入密码,支付信息到银行服务器,银行把扣款成功的支付信息发给网站,这样才显示支付成功了。支付的报文经过 SSL加密的。
黑客:把支付报文截获之后重放给服务器:银行服务器会再次扣款,重放个10次8次帐户就没钱了。
避免重放攻击:在每个报文里面有独立的序列号,服务器已经收到了一个序列号的报文,在下一次收到一样序列号的报文,服务器是不作处理的,保护我的帐户。
区域的认证配置:
(1)明文配置
区域下开启认证功能;
区域开启认证后,还须要在接口下配置一个密钥;
(2)密文配置
在接口或者区域下面开启了密文/明文认证,不配密码也能开启认证关系
思科里面,区域下开认证功能,接口下也须要配置key才能够,仍是须要在接口里面配置key才能够;华为直接在区域下能够配置认证功能;
即,区域下开认证功能,接口下配置密码就好了。
区域里面没有authtication这个认证参数,直接配置MD5就能够
57:24
authtication 证实,认证
区域的认证方式和接口的认证方式不同,区域的认证方式多了个key值,哈希值不同,两端哈希值不同没法创建邻居关系
【实验分析】:
R2上既有MD5/又有区域认证
*************************************************************
三、Router-id冲突
正常状况下是自动选举的,也 能够手动配置;两端设备Router-id冲突,直连的设备是没法创建邻居关系的。在校园网里面,最好对router-id有个规划。
【实验配置】
进程下手工修改Router-id
*************************************************************
四、区域ID不一致
*************************************************************
五、网络类型不一致
并不必定;
一端是广播网 ,另外一端是NBMA,是否影响?
Hello报文里面并无网络类型参数,仍是因为hello interval和dead interval不一致形成 的;
广播网: 10s 40s
NBMA: 30s 120s
点到点: 10s 40s
点到多点: 30s 120s(非广播的一种解决方案)
虚链路:(在创建邻居之初时才发hello报文,后续是不发的)
【实验配置】01:18
邻居创建完成之后,而且创建一个邻接的关系。网络类型不一致,
若是一端是点到点,另外一种 是广播网,仍然能够创建
,可是没法正常选路,收不到路由;缘由是SPF算法有问题。
*********************************************************************
只配置认证没有K值,哈希值如何计算?
正常状况下,OSPF与K值作哈希获得哈希值;思科里面,若是开启了认证没有设置K值,会有一个默认K,经过默认K去作哈希。
经过一个MD5的值好比:cisco,去和OSPF报文作哈希获得一个哈希值。
K的ID做用?K-ID不参与哈希的计算,密钥的索引号,经过索引找到密钥与OSPF报文进行哈希
A上有10个K,B有2个K,实际上发的时候两端都会发,会把全部的K所有发过去,用每个K去发送报文,只要有 一个匹配成功就好了
总结:配置MD5认证后,若是 接口下存在多个KEY,创建邻居前会使用最后一次配置的KEY计算HASH,若是创建成功后告全部KEY值,配置的KEY-ID是不参与HASH计算的,只是一个索引值
******************************************************************************
六、掩码不一致会影响邻居创建吗?
不必定
掩码不一样直连能够通吗?
确定能够通的,大网包含小网,IP包头里面没有掩码长度,只有源目的IP
B回包,目的IP是12.1.1.1,能够匹配本地的直连路由12.1.1.2/24,能够通
广播网和非广播网,若是掩码不一致,没法创建邻居关系,由于在这种网络类型下创建邻居关系是要通告二类LSA的,而在二类LSA中是要看掩码字段的,是必需要看掩码长度的
若是两边是点到点、点到多点和虚电路的网络类型不须要检查掩码匹配,则能够创建邻居关系
**************************************************************************
七、接口地址不在同一网段?
串口中的地址借用,封装为PPP,不一样网段能够通,自动生成路由
PPP链接的创建:
LCP链路层的协商:
NCP协议层的协商:须要去+协商上层的应用协议,好比IPv4,协商的时候会发送一个IPCP的报文,在报文里面就会携带本端接口的IP地址,能够把地址通告给邻居,邻居收到之后会在本地生成到达对端的直连路由。
Hello报文能够收到,思科里面会去检查源和目的是否在同 一网段,若是不是,会拒收hello报文的。
ip unnumbered loopback 0 无符号的地址借用
show ip os neighbr
华为的设备,不论是地址借用仍是地址,在点到点的网络里面都不会去检测源的;思科的设备,接口下配IP都会检测源,若是作地址借用,会检测源,看源地址和本身地址是否在同一网段,若是不在同一网段,会拒收报文。
结论:若是在点到点网络类型中,接口的IP地址使用地址借用的方式是不会执行源检查,若是直接配置IP地址,一样会执行源检查
一端是INIT,另外一端没状态:
例如:R1-R2经过串口互连,R1上配置IP地址,R2上使用IP地址借用,R1和R2配置OSPF,结果:R1为空,R2为INIT(R1上收到报文被丢弃掉)
***************************************************************************
八、区域类型不一致
普通区域和特殊区域
E比特位 N/P比特位
E比特位:支持接收和传递外部路由,正常置1;
变成stub,比特位置0;
双方收到报文会 检测E比特位,若是 不同会拒收hello报文
Option选项中的Ebit表示能够接收和传递外部路由(5类LSA),在特殊区域stub和totally stub中Ebit位须要设置为0.
同时,N/P比特位也是属于区域类型位(nssa和tollay nssa),若是在hello和DBD报文中N/P 置位,Ebit就须要设置0,这两个比特位不能同时被设置。
************************************************************************
九、ACL
经过ACL来过滤一个组播的报文,一端是INIT,另外一端是空的;
经过 ACL也会影响邻居的创建:
***********************************************************************
十、PASSIVE接口(OSPF中的passive接口 不收发hello报文)
接口上面既不发也不收OSPF报文
只创建邻居关系是不能交互LSA的,只有创建邻接关系才能交互LSA
一、hello:发现创建和维护邻居关系
二、DBD:数据库描述报文:用于通告LSDB中全部的LSA的摘要信息(菜单:LSA就像菜)
三、LSR:链路状态请求:用于请求具体的LSA信息
四、LSU:链路状态更新:用于通告具体的LSA信息(上菜)
五、LSACK:链路状态确认:用于确认接收到的LSA
在OSPF中有两种 确认机制:
一、隐式确认:这个报文不是用于确认的确有确认的功能
hello(看router-id确认:有确认的机制)、DBD、LSU(用于确认LSR)
二、显式确认:这个报文专门用于确认的(LSACK)
为何ospf须要有一个确认的机制?
OSPF不是一个可靠的协议,用IP来传的。TCP是一个可靠性协议,TCP中有ACK;OSPF只能根据自身的报文来保证可靠性;
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">算法