拓扑图
由于IS-IS是直接运行在数据链路层上的协议,并且最早设计是给CLNP使用的,IS-IS邻居关系的形成与IP地址无关。但在实际的实现中,由于只在IP上运行IS-IS,所以是要检查对方的IP地址的。如果接口配置了从IP,那么只要双方有某个IP(主IP或者从IP)在同一网段,就能建立邻居,不一定要主IP相同。
通常情况下,IS-IS会对收到的Hello报文进行IP地址检查,只有这个地址和本地接收报文的接口地址在同一网段时,才会建立邻居。但当两端接口IP地址不在同一网段,如果均配置了isis peer-ip-ignore命令,就会忽略对对端IP地址的检查,此时链路两端的IS-IS接口间可以建立正常的邻居关系。路由表中有这两个不同网段的路由,但是不能互相PING通。
P2P link 上 2-Way 握手机制:只要收到 IS-IS-Hello 报文,就会单方向的建立起邻居。
P2P 链路上的 3 次握手机制:收到第一份 Hello 包时,将状态置为 init,只要收到 TLV 240(Point-to-point Adjacency State)中含有自己system id 的 IIH 时将状态置为 up(P2P 默认三次握手)。
P2P 3-way模式,AR1的ISIS邻居状态为init,AR2的ISIS无邻居状态
此时AR2配置忽略对端IP地址检查或配置从ip与AR1的地址在同一网段,邻居可建立
interface GigabitEthernet0/0/0
ip address 10.1.12.130 255.255.255.128
isis enable 1
isis circuit-type p2p
isis peer-ip-ignore
#
或
interface GigabitEthernet0/0/0
ip address 12.1.1.2 255.255.255.128 sub
#
P2P 2-way模式下,AR1的ISIS邻居状态为up,AR2的ISIS无邻居状态
取消AR2配置忽略对端IP地址检查或取消配置从ip与AR1的地址在同一网段
AR2 配置使用2-way握手机制
interface GigabitEthernet0/0/0
isis circuit-type p2p
isis ppp-negotiation 2-way
#
要想建立邻居,在AR2上配置忽略对端IP地址检查或配置从ip与AR1的地址在同一网段,同上
结论
在 3-Way 时 AR1 显示 init,在 2-Way 时 AR1 显示 up。而 AR2 不存在任何邻居关系。
分析:AR1 发出 IIH 报文,由 TLV 132 带着接口 IP 地址。
AR2 收到后,会将 IIH 中的 IP(10.1.12.1)与自己接口的 mask 做与运算后,发现和自己并不属于同一个网段。
AR1 收到 AR2 发出的 IIH 报文,将 TLV132 里带的 IP 地址与自己接收端口的 mask 进行与运算。认为 AR2 和自己在同一网段中
结果:如果双方属于 2-Way 建立邻居,AR1 在收到 AR2 发出的 IIH 后就将邻居状态置为 up。如果双方属于 3-Way,AR2 不认为 AR1 和自己处于同一网段,所以 AR2 发出的IIH 报文中的 TLV240 的 Neighbor SystemID 为空。AR1 收到此报文后,邻居列表中并没有自己,就置为 init 状态
补充
问题:此实验中,AR1 ping AR2 可以ping通吗?
测试AR1 ping AR2,不通
不通的原因:AR1访问10.1.12.130,匹配IS路由的下一跳为10.1.12.130,ARP请求10.1.12.130的MAC地址,由于与AR2的接口不在同一网段,被AR2丢弃,无法获得MAC地址信息
那么换一下,AR2 ping AR1,可以通信
可以通信的原因:AR2访问AR1,下一跳为10.1.12.1,ARP请求下一跳的MAC地址,由于AR1的G0/0/0接口掩码为24位,ARP请求的IP地址与源地址属于同一网段,所以回应ARP Reply,AR2、AR1得到了双方接口的MAC地址,成功通信。
查看AR1、AR2的ARP表项,均得到并缓存了对方的MAC地址
那么,此时,AR1 ping AR2,成功通信
再次补充:
路由器收到ARP请求报文中,如果源IP和目的IP不在同一网段的,将ARP报文丢弃。
如果是PC,收到ARP请求报文中,如果源IP和目的IP不在同一网段的,只要请求的目的地址正是自己的,则回应ARP响应。如下图