Search
Write a publication
Pull to refresh

Cisco, Juniper, dot1q и STP на одном полигоне

Дано: два коммутатора Cisco, один коммутатор Juniper. Коммутаторы образуют сеть с очень простой топологией:
image

С чем можно поиграться на такой простой топологии? Какие проблемы могут возникнуть? А вот это я сейчас подробно и рассмотрю.



Описание полигона


Между коммутаторами SW1 и EX22xx линк в режиме транк dot1q.

SW1:

SW1#sh run int fastEthernet 0/42
Building configuration…

Current configuration: 92 bytes
!
interface FastEthernet0/42
switchport trunk allowed vlan 1,8
switchport mode trunk
end

Juniper:

admin@EX2200-1> show configuration interfaces ge-0/0/8.0
family ethernet-switching {
port-mode trunk;
vlan {
members vlan_8;
}
native-vlan-id 1;
}

Договорился STP между коммутаторами?

SW1:

SW1#sh spanning-tree interface fastEthernet 0/42

Vlan Role Sts Cost Prio.Nbr Type
— — — — — — VLAN0001 Root FWD 19 128.42 P2p
VLAN0008 Desg FWD 19 128.42 P2p
SW1#

Juniper:

admin@EX2200-1> show ethernet-switching interfaces ge-0/0/8.0
Interface State VLAN members Tag Tagging Blocking
ge-0/0/8.0 up default 1 untagged unblocked
vlan_8 8 tagged unblocked

Вроде всё в порядке, коммутаторы договорились.

Между коммутатором SW2 и EX22xx линк в режиме access с vlan 8.

SW2:

SW2#sh run int gigabitEthernet 0/22
Building configuration…

Current configuration: 87 bytes
!
interface GigabitEthernet0/22
switchport access vlan 8
switchport mode access
end

Juniper:

ge-0/0/22 {
unit 0 {
family ethernet-switching {
vlan {
members 8;
}
}
}
}

Договорился STP между коммутаторами?

Juniper:

admin@EX2200-1> show ethernet-switching interfaces ge-0/0/22.0
Interface State VLAN members Tag Tagging Blocking
ge-0/0/22.0 up vlan_8 8 untagged unblocked

{master:0}
admin@EX2200-1>

SW2:

SW2#sh spanning-tree interface Gi0/22

Vlan Role Sts Cost Prio.Nbr Type
— — — — — — VLAN0008 Desg BKN*4 128.22 P2p *TYPE_Inc

А вот здесь коммутатору что-то не нравится. Давайте посмотрим лог коммутатора…

SW2#sh log
Syslog logging: enabled (0 messages dropped, 0 messages rate-limited, 0 flushes, 0 overruns, xml disabled, filtering disabled)

001189: *Mar 21 00:32:32.463 UTC: %SPANTREE-7-RECV_1Q_NON_TRUNK: Received 802.1Q BPDU on non trunk GigabitEthernet0/22 VLAN8.
001190: *Mar 21 00:32:32.463 UTC: %SPANTREE-7-BLOCK_PORT_TYPE: Blocking GigabitEthernet0/22 on VLAN0008. Inconsistent port type.

Странно. Хотя порты у коммутаторов смотрят в однотипные порты друг друга (access в access, trunk в trunk), почему до коммутатора SW2 доходят BPDU из транка между SW1 и EX22xx.
Может STP не той системы? Давайте проверим:

Juniper:

admin@EX2200-1> show spanning-tree bridge

STP bridge parameters
Context ID: 0
Enabled protocol: RSTP
Root ID: 16392.00:1d:46:ac:9b:00
Root cost: 20000
Root port: ge-0/0/22.0

SW2:

SW2#sh spanning-tree vl 8

VLAN0008
Spanning tree enabled protocol rstp
Root ID Priority 16392
Address 001d.46ac.9b00
This bridge is the root
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec

SW1:

SW1#sh spanning-tree vl 8

VLAN0008
Spanning tree enabled protocol rstp
Root ID Priority 16392

Все коммутаторы говорят, что на них работает RSTP. Но, похоже словом RSTP они называют разные вещи. Давайте с этим разберёмся.

Что такое RSTP?


RSTP (Rapid Spanning Tree Protocol) IEEE 802.1w, протокол, автоматически удаляющий возникающие петли коммутации на втором уровне в сетях Ethernet. Потомок STP (IEEE 801.1D). Как STP, RSTP строит единное дерево для всех VLANов.

Cisco к STP придумала свой вариант протокола STP, PVST+, который создает дерево STP внутри каждого Vlanа. То есть внутри каждого Vlan работает своя копия STP. Соответственно, безпетлевая топология в разных Vlanах в одной сети может отличаться.

Когда появился RSTP (который получили некоторые фичи PVST), Cisco сделал свой вариант Rapid PVST+, который запускает процесс RSTP для каждого Vlanа. А значит внутри каждого Vlana передаются свои BPDU.

Как работает RPVST+?

1. Если порт находится в режиме access, то:
1.1 Коммутатор посылает STP BPDU на IEEE MAC адрес (0180.c200.0000), пакет без тега.
1.2 Коммутатор посылает STP BPDU на Rapid PVST+ MAC адрес (0100.0ccc.cccd), пакет без тега.

2. Если порт находится в режиме транк, то:
2.1 Коммутатор, в нативном Vlan, посылает STP BPDU на IEEE MAC адрес (0180.c200.0000), пакет без тега.
2.2 Коммутатор, в нативном Vlan, посылает STP BPDU на Rapid PVST+ MAC адрес (0100.0ccc.cccd), пакет без тега.
2.3 Коммутатор, в каждом тэгированом Vlan, посылает STP BPDU на Rapid PVST+ MAC адрес (0100.0ccc.cccd), пакет c тегом и с полем TLV.

image

На рисунке между коммутаторами порты режиме транк. Коммутатор, неподдерживающий BPDU пакеты, направленные на MAC адрес 0100.0ccc.cccd пересылает их по назначению. Поле TLV содержит номер Vlanа, в который отправил пакет коммутатор создавший этот BPDU.

RSTP Juniper <> RSTP Cisco?


Почему возникает проблема? Потому что, Cisco пишет RSTP, подразумевая, что это Rapid STP PVST+. А Juniper пишет RSTP, подразумевая под этим IEEE RSTP.

Но почему всё же не работает? Смотрим рисунок:

image

На рисунке порт между Juniper и SW1 в транке. Между коммутатором SW1 и Juniper порт в режиме access.

И так, коммутатор SW1 рассылает по Vlan 8 пакеты с TLV в сторону Juniper, который их просто пересылает дальше, на коммутатор SW2. Какие BPDU ждёт коммутатор SW2? Он ждёт пакеты IEEE STP и пакеты PRVST+ без TLV. А получает он пакет с TLV, после чего сразу же переводит порт в состояние blocking, пишет соответствующее сообщение в лог. Поведение логично, у нас порт транковый включен в порт доступа.

А что же делать?


Для того, что бы всё заработало, необходимо на Juniper включить Vlan Spanning Tree Protocol (VSTP), который совместим с RSTP PVST+.
VSTP запускает внутри VLAN процесс STP или RSTP на ваш выбор. В случае выбора STP вы получите PVST+, в случае выбора RSTP — RSTP PVST+.

Запускаем сразу на всех VLAN:

protocols {
vstp {
vlan all;
}

Смотрим на SW2:

SW2#sh spanning-tree interface Gi0/22

Vlan Role Sts Cost Prio.Nbr Type
— — — — — — VLAN0008 Desg FWD 4 128.22 P2p
SW2#

Заработало:)

А что там, со стороны Juniper?

admin@EX2200-1> show ethernet-switching interfaces ge-0/0/8.0 detail
Interface: ge-0/0/8.0, Index: 109, State: up, Port mode: Trunk
Native vlan: default
Ether type for the interface: 0x8100
VLAN membership:
default, 802.1Q Tag: 1, untagged, msti-id: 0, unblocked
vlan_8, 802.1Q Tag: 8, tagged, msti-id: 3, unblocked
Number of MACs learned on IFL: 6

Посмотрим, что запустилось по умолчанию, RSTP или STP:

admin@EX2200-1> show spanning-tree bridge

STP bridge parameters
Context ID: 0
Enabled protocol: RSTP
Root ID: 32768.54:e0:32:84:6c:41
Hello time: 2 seconds
Maximum age: 20 seconds
Forward delay: 15 seconds
Message age: 0
Number of topology changes: 8
Time since last topology change: 167861 seconds
Topology change last recvd. from: 00:1d:46:ac:9b:16
Local parameters
Bridge ID: 32768.54:e0:32:84:6c:41
Extended system ID: 0
Internal instance ID: 0

STP bridge parameters
Context ID: 1
Enabled protocol: RSTP

STP bridge parameters for VLAN 10
Root ID: 32778.54:e0:32:84:6c:41
Hello time: 2 seconds
Maximum age: 20 seconds
— STP bridge parameters
Context ID: 2
Enabled protocol: RSTP

STP bridge parameters for VLAN 20
Root ID: 32788.54:e0:32:84:6c:41
Hello time: 2 seconds
— STP bridge parameters
Context ID: 3
Enabled protocol: RSTP

STP bridge parameters for VLAN 8
Root ID: 16392.00:1d:46:ac:9b:00
Root cost: 20000
Root port: ge-0/0/22.0
Hello time: 2 seconds
Maximum age: 20 seconds
— Запустился RSTP. Это видно по строке Enabled Protocol. Если нам будет нужен PVST+, необходимо указать на это Junos, выполнив команду set force-version stp.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.