eigrp的邻居建立解析

    技术2024-12-27  56

    网络拓扑:               Router A (S1/0) ----------------------------

    -(S1/0) Router B

    在Router A上: (部分命令)int s1/0ip address 10.1.1.1 255.255.255.0no shutrouter eigrp 10net 10.1.1.0 255.255.255.0

    在Router B上:int s1/0ip address 11.1.1.1 255.255.255.0no shutrouter eigrp 10net 11.1.1.0 255.255.255.0

    这时A上会显示:Neighbor 11.1.1.1 not on common subnet for Serial1/0      B上会显示:Neighbor 10.1.1.1 not on common subnet for Serial1/0

    然后在Router A的S1/0上启用Secondary IP :ip address 11.1.1.2

    255.255.255.0 secondary

    这时A上出现浮动(每隔80s就Down一次然后马上Up):

    *Apr 7 22:40:39.239: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 10: Neighbor

    11.1.1.1 (Serial1/0) is up: new adjacencyLeft(config-if)#*Apr 7 22:41:58.751: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 10: Neighbor

    11.1.1.1 (Serial1/0) is down: retry limit exceededLeft(config-if)#*Apr 7 22:42:03.251: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 10: Neighbor

    11.1.1.1 (Serial1/0) is up: new adjacency

    B上仍显示为:IP-EIGRP(Default-IP-Routing-Table:10): Neighbor 10.1.1.1

    not on common subnet for Serial1/0

    接下来在B的S1/0上启用Secondary IP :ip address 10.1.1.2 255.255.255.0

    secondary

    这时B上显示:*Apr 7 22:44:50.719: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 10:

    Neighbor 10.1.1.1 (Serial1/0) is up: new adjacency

    A相应显示为:*Apr 7 22:44:49.071: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 10:

    Neighbor 11.1.1.1 (Serial1/0) is up: new adjacency

    从实验现象和相关资料,进行如下解释:

    1.EIGRP通过Hello包完成邻居发现和邻接关系建立,Hello包发送到224.0.0.10

    ,所有启用EIGRP进程的路由器监听该地址。

    2.EIGRP邻居建立是“一厢情愿”的过程:在实验中,Router A上建立Secondary

    IP后把B放入邻接表(可用show ip eigrp neighbor查看),但是B却没有这样做

    ,理由是不在同一子网,那么由此我们可以推断是A在收到B的Hello包后,经过

    自己的逻辑判断,认为B是自己的邻居,具体判断过程我认为是这样:

    1)首先要明确的是邻接表的内容,应该包括下一跳路由器和直连接口,其中下

    一跳路由器就是对端路由器对应接口的主IP地址,即Primary IP,在路由选择协

    议中,数据流都是通过主地址传送的,EIGRP当然也是如此,这个看似有问题,但实际上与实验现

    象并不冲突,我们接着往下看。

    2)既然通过Hello包可以完成邻接关系建立,并记录在邻接表中,那么我们可以

    推断hello包中包含发送端的接口信息和主IP地址(且不带子网掩码,这个我们

    另行验证),因为我没能查到EIGRP Hello包的具体字段,可能是Cisco私有的缘

    故吧。

    3)在实验中,双方都没有配Secondary IP的时候,接口主地址不在同一网段,

    无法形成邻居,这没问题,关键是A配上与B的Primary IP在同一网段的

    Secondary IP的时候,A把B当成了自己的邻居,这是何解,不是数据流都通过主

    地址传输吗?

    4)推断邻居建立的过程如下:B通过自己的主地址发送Hello包给A,其中Hello

    包记录的是11.1.1.1,A通过自己的主地址10.1.1.1接收后查看这个Hello包,发

    现源地址是11.1.1.1,然后将该地址与自己主地址的子网掩码进行AND运算,得

    出网络地址11.1.1.0,接着查看自己的路由表,在没有配Secondary IP以前,A

    的路由表中直连网段只有10.1.1.0,这样A就认为B并不与自己直连,所以显示

    Neighbor 11.1.1.1 not on common subnet for Serial1/0,但是在配了

    Secondary IP 11.1.1.2后,A的直连网段就有11.1.1.0,就会认为B是与自己直

    连的,并将其放进邻接表,但是B并没有因此将A放进邻接表,因为B在没有配与A

    在同一网段的Secondary IP 10.1.1.2前,与A一开始的情况是一样的。

    5)而A在实验中每隔80s(hold-time)浮动一次(实验得证),down了又up,其

    原因在于在A把B当作邻居后,发送自己的路由Update作为对B的Hello包的回应,

    这时期待的就是B的Ack,但是B现在都不把A当邻居,更不可能发Ack确认,所以A

    在等80s之后超时,认为链路不可用,要重新建立与B的邻居关系,邻居关系Down

    掉,而这时A期待的数据包就是B的Hello以重新建立邻居,这个B还是满足的,每

    隔5s就有一个发过来,A收到后加以判断又把B当邻居,并重蹈覆辙,由此形成浮

    动。

    关于Hello中发过来的路由器接口主IP地址是否有子网掩码的信息,我没有查阅

    到相关内容,只知道由于EIGRP支持CIDR,所以发送的路由更新信息都是有子网

    掩码的,由此我们进行验证,验证基于我前述的邻居建立的逻辑判断。

    还是Router A和Router B

    1)A的S1/0设为23.1.1.1 255.255.255.0,B的S1/0设为23.1.1.2

    255.255.255.0 并用EIGRP进行通告,这时邻居能形成。

    2)然后将A的S1/0改为 23.1.1.1 255.255.255.128,B不变,仍为23.1.1.2

    255.255.255.0, 调整后邻居依然形成

    PS:地址变动后会有短时间内的down又Up,还有Graceful Shutdown现象,B上可

    以看到:*Apr 7 23:58:54.203: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 10:

    Neighbor 23.1.1.1 (Serial1/0) is down: Interface Goodbye received*Apr 7 23:58:58.823: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 10: Neighbor

    23.1.1.1 (Serial1/0) is up: new adjacency

    3)接着将B的地址改为 23.1.1.129 255.255.255.0 ,这时A上会显示*Apr 8

    00:01:27.555: IP-EIGRP(Default-IP-Routing-Table:10): Neighbor

    23.1.1.129 not on common subnet for Serial1/0

    由实现现象我们可以推断:1.如果Hello包中含有子网掩码,是将收到的源IP地址与收到的子网掩码进行AND

    运算再与自己的直连网段进行比较的话,在步骤2中,A在收到B发的Hello后就会

    发现B是在网段23.1.1.0/24,而自己是在23.1.1.0/25,是不形成邻居的,与实际

    现象不符。

    2.再者,若发送的只有IP地址,是与接收端口的Primary IP的子网掩码进行AND

    运算,那么B发给A,A将23.1.1.129与自己的子网掩码255.255.255.128进行AND

    运算得到23.1.1.128/25,而自己的直连接口是23.1.1.0/25,不在同一网段,不与

    B形成邻居,这是符合实验现象的。

    最后我们进行以下总结:

    1.EIGRP通过端口的Primary IP传输数据流并形成Neighbor ID(代表一个接口)

    2.Secondary IP使得一个接口上可以配不同网段地址,并在路由表中通过直连网

    段体现出来.

    3.Router在接收到EIGRP Hello后会用自己的Primary IP的子网掩码与Hello中的

    Neighbor ID进行AND运算,得出网络地址后与自己路由表中的直连网段进行匹配

    ,有则认为对方是邻居,并将其放进邻接表中,没有就会以不在同一子网为由来

    拒绝形成邻居。

    咨询电话:400-110-1100,025-68592555 咨询QQ:1799096228

    最新回复(0)