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

С чем можно поиграться на такой простой топологии? Какие проблемы могут возникнуть? А вот это я сейчас подробно и рассмотрю.
Между коммутаторами 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 (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.

На рисунке между коммутаторами порты режиме транк. Коммутатор, неподдерживающий BPDU пакеты, направленные на MAC адрес 0100.0ccc.cccd пересылает их по назначению. Поле TLV содержит номер Vlanа, в который отправил пакет коммутатор создавший этот BPDU.
Почему возникает проблема? Потому что, Cisco пишет RSTP, подразумевая, что это Rapid STP PVST+. А Juniper пишет RSTP, подразумевая под этим IEEE RSTP.
Но почему всё же не работает? Смотрим рисунок:

На рисунке порт между 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.

С чем можно поиграться на такой простой топологии? Какие проблемы могут возникнуть? А вот это я сейчас подробно и рассмотрю.
Описание полигона
Между коммутаторами 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.

На рисунке между коммутаторами порты режиме транк. Коммутатор, неподдерживающий BPDU пакеты, направленные на MAC адрес 0100.0ccc.cccd пересылает их по назначению. Поле TLV содержит номер Vlanа, в который отправил пакет коммутатор создавший этот BPDU.
RSTP Juniper <> RSTP Cisco?
Почему возникает проблема? Потому что, Cisco пишет RSTP, подразумевая, что это Rapid STP PVST+. А Juniper пишет RSTP, подразумевая под этим IEEE RSTP.
Но почему всё же не работает? Смотрим рисунок:

На рисунке порт между 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.