配置OSPF、VRRP等与stp的冲突(2023年7月29日21:10:36)

发布时间 2023-07-29 21:20:15作者: 秦皇汉武
1.首先上图
0
2.其次,对于通信分为同网段通信和跨网段通信。
(1)同网段通信,会利用arp问目的ip的地址,然后交换机工作在二层,将目的地址学习,形成交换机的转发表。即交换机根据mac-address学习转发表。
(2)跨网段通信,全部根据路由表进行。
路由表中Direct表示直连,这个时候路由的下一跳就是设备自身的接口(物理或者vlanif)的ip地址,出接口为对应的物理或者vlanif接口。然后再转发的时候,就会再次利用arp问询地址,然后又变为了同网段转发。
也就是,任何跨网段通信,最后的过程,都会进入同一网段通信。相当于到达了目标所在的最后一个街区。
其次,对于非Direct的static或者ospf等路由协议学习的路由,下一跳地址全部都是另一个设备的地址(非设备自身)。只有出接口是设备自身的。然后转发出去即可。
最后,pc终端访问跨网段通信的时候,首先必须到达网关(由网关处理跨网段通信)。记住这句话。
3.对于上图中,
主和备之间配置了VRRP,并且设置了主为master,备为backup。
但是我们在通信的时候,观察了一个奇怪的现象,
即主的2口被阻塞,LSW3的4口被阻塞。
0
这是利用dis stp brief看到的。
这个时候,大家会进入一个误区,认为数据都是从备份交换机上行的,认为违反了主master和备backup的vrrp规则。就会产生矛盾。
但是事实真是这样吗?
事实是,stp在处理主、备和LSW3的环路时,是一套规则。vrrp虽然指定了主作为master,但是如果我们在stp中不指定主作为master,就会出现一个奇怪的现象。
即stp中以备交换机为主要的root了(破除环路),vrrp则以主为master。
大家都以为从备份交换机上行流量。
其实真实情况是:
PC7在ping AR2的8.8.8.8的时候,会先上行到网关。即主。
虽然stp阻塞了主交换机来破除环路,但是,PC7上行到网关的路径会变成这样:
 
0
如图中箭头所示。
然后再由主作为master的虚拟网关,产生一个上行到8.8.8.8的流量。
我们在主交换机的1口和备交换机的1口分别抓包,可以看到:
主交换机的1口抓包显示:
出现了两次ICMP,并且ttl从128变为了127.
0
我们点开两个流量
 
0
一个是vlan标记为30,并且目的地址是IETF-VRRP-VRID_1e,即虚拟vrrp配置的网关目的地址。虚拟网关的mac地址
另一个ttl=127的是:
这个就是主交换机作为虚拟网关的master在收到第一个icmp流量后,将ttl减去1变为127之后,再发出的。
可以看到vlan的标记为10。
0
这里的目的地址其实就是AR1的vlanif的mac地址,也是桥mac地址
0
0
有人会问,为什么这里vlantag 不是30了,而是10。
这是因为:主交换机这里ospf学习的路由是:
可以看到,到达目的8.8.8.8的路由是ECMP的三条路由,即分别从vlanif10或者vlanif20或者vlanif30中发出。
因此会随机选择从哪里发出。因此,从主交换机再次发出的数据,会随机选择一个虚拟的vlanif接口发出,然后加上的vlan tag对应的vlanif接口发出的vlan id。
0
这个时候,我们在备交换机的1口抓到的数据包是:
0
即,一个是去向的数据包。注意,这个数据包,到达AR1路由以后,会再次转向主交换机(虚拟网关)。
然后一个是回向的数据表,注意,这个数据包是AR2发出的返程流量。
由于AR2进入的返程流量是到达目的的PC地址是26.65.113.27,是处于vlan 30的网段,因此必然是从AR1的vlanif30接口发出,会带上的tag标记必然是30。
并且发出以后,会通过arp问出26.65.113.27的mac地址,并且告诉AR1的26.65.113.100。后面再次进入了同网段的通信。
0
 
0
几个说明:
流量包的ethernet二层包的source,无论在网络中,流量发到哪里,所有的source mac地址,都是最初发出的那个设备,比如PC7的mac地址。
但是目的地址,是在转发的过程中,如果是同网段,就是目标的mac地址。如果还需要跨网段,那么就是下一跳的mac地址。注意,是下一跳,而非目标的pc的mac地址。
 
如果,采用下面的图,会发现不通:
即上行到路由器,都在vlan 100中,而下行到LSW3接入交换机,还是 10 20 30
0
首先,这种方式,破坏了vrrp。
即备份交换机,也变成了master的方式进行工作。
0
因此,主交换机不再是虚拟网关的master。
其次,AR1中学习到的路由是:
 
0
即返程路由,是个ECMP,会随机发送到100.100.100.1主交换机或者100.100.100.2备交换机,即负载均衡。
但是实际上,
发送到主交换机的包,由于stp阻塞了主交换机的2口和4口。
导致,当发送到主交换机以后,
主交换机接收以后,会问返程流量的26.65.113.27在哪里,会发出一个arp包,并且会带上目标vlanif30的tag 30。
但是由于2口和4口被阻塞,但是1口又是vlan100的access口。因此,发不出去。
就导致流量中断。无法到达PC7。
对于这种情况,我们只能采取一种方式,即将主交换机的1口改为trunk模式,并且允许10,20,30和100通过。
这样就可以正常工作了。
0
也就是说:
所以,网络链路是非常复杂的。需要考虑到实际二层stp协议导致的接口阻塞,又要关注于三层路由和opsf等协议。以及vrrp等。
最后,再结合跨网段通信和同网段通信的转发以及arp问询同网段ip的mac地址等。
上面就是一个典型的stp阻塞,导致无法问询到同网段的ip地址的mac地址,从而导致网络返程流量卡死在了主交换机上。