bxm's IT Story
스패닝 트리 프로토콜(STP,Spanning Tree Protocol) 본문
* Spanning Tree Protocol 이란?
## STP (Spanning-Tree Protocol) ##
선들이 연결되어 있음에도 합선이 나지 않게 해주는 스위치의 프로토콜 (★★Loop 발생 방지!!★★)
* GNS3 키고 설정.
![](https://blog.kakaocdn.net/dn/eaBC5y/btq6ZU04mlL/KcyaULw1LRiK8Ju4RyBcz0/img.png)
# (switchport mode access) = sw mo ac
SW1]
conf t
vlan 10
exit
int range f1/1 , f1/3
sw mo ac
sw ac vlan 10
![](https://blog.kakaocdn.net/dn/KsaaD/btq6Whpdd1h/4dEjilRsRndqFu1jAnt590/img.png)
SW2]
conf t
vlan 10
exit
# 1번부터 2번까지
int range f1/1 - 2
sw mo ac
sw ac vlan 10
![](https://blog.kakaocdn.net/dn/beYmNG/btq6ZQq01Fs/TlKSlZTbuIB8SyLF6ohQvk/img.png)
SW3]
conf t
vlan 10
exit
int range f1/2 - 3
sw mo ac
sw ac vlan 10
end
wr
![](https://blog.kakaocdn.net/dn/NSOvf/btq60lKEGNx/BVt74r1PWZiVb0zZoqTg7k/img.png)
이렇게 모두 VLAN이 10이면 신호가 발생시 삥삥삥 계속 도는 loop 구조가 형성됨.
그래서 차단하는 역할을 하는 것이 있어야 한다.
* BPDU *
스위치가 2초마다 주고 받는 것들이 바로 BPDU인데, BPDU는 총 35Byte로 아래와 같이 구성된다.
![](https://blog.kakaocdn.net/dn/bn5FLv/btq60J5JpYD/Amg67SaJF5baG1KaBFfhS0/img.png)
[SW1] [SW2]
debug spanning-tree all ==> 선생님께서 쓰시긴 했는데 쭈르륵 이어지면서 안멈추길래 스위치 껐다 킴.
아래에 형광색 쳐져있는 35Byte의 숫자들이 바로 BPDU임.
![](https://blog.kakaocdn.net/dn/WAKY6/btq61lwEG9T/sjfU9GQOgfKWe7OZEADfoK/img.png)
버전 :
- STP : 그냥 STP
- RSTP : Rapid 스패닝트리 프로토콜로, 향상된 스패닝 트리 프로토콜이다.
- MST(멀티, 더 향상된 버전이며 여러개의 스패닝트리 프로토콜을 사용가능)
타입 : BPDU의 종류
- TCA BPDU인지, 설정 BPDU 인지.
- 설정 BPDU는 항상 루트 브릿지만 만드는 BPDU이다.
- 스위치가 2대 이상 엮어져 있으면 그 중에서 대장 스위치를 뽑는다. 그 대장 스위치를 루트 스위치라고 하는데
대장 스위치를 뽑는 이유는 블락포트를 정하기 위해서임.
★★Root Bridge ID★★ (브릿지 ID가 가장 낮은 브릿지가 Root 브릿지 ID가 된다.)
Brideg-ID (2바이트, 우선순위) | MAC (6바이트) |
2바이트이므로 0 ~ 65535 이다. 새로 샀는데 기본값을 0이나 65535로 할 수 없으므로 기본값을 32768로 한다.
숫자가 낮은게 우등(힘이 세고), 숫자가 높은게 열등(힘이 낮음)하다.
우선순위가 똑같은 경우 MAC 주소가 낮은 스위치가 형님이 된다. !!
## 참고로 선생님 제자분 이거 기본값 대답 못해서 털리셨다함.
show spanning-tree vlan 10 br
![](https://blog.kakaocdn.net/dn/cDQXAP/btq61JjUgCV/DOGW0Nutnd6JvzRKksb7l1/img.png)
경로값
![](https://blog.kakaocdn.net/dn/nRRwj/btq6Z7TzLfj/dDfuYTmjGXhVXEFOYBbnCk/img.png)
Bridge ID
- Root bridge id와 마찬가지로 구성이 똑같은 8 Byte임.
- Root bridge id를 제외한 모든 bridge id임.
Port ID
우선순위(1Byte) + Port N/0
기본값 128
0~254
![](https://blog.kakaocdn.net/dn/rQaLJ/btq6WPeVLl9/B3O1kxxkLJj8EqEQ3IABt1/img.png)
Port ID를 보면 128.43 , 128.44가 있는데 // 128 우선순위에 43번 Port와 44번 Port를 의미한다.
Flag
1. SW2가 죽었다.
2. SW3 -> SW1(Root 브릿지 ID) 에게 TCN을 보내 보고한다. (SW2가 죽었습니다.)
3. 그러면 SW1 -> SW3에게 TC를 보냄. (토폴로지를 바꿔라.)
4. 그러면 SW3 -> SW1에게 TCA를 보냄. (TC 잘 받았습니다~ echo 대답 해주는 것임.)
5. SW2가 죽었으면 SW3에서 SW2로 가는 시작점을 깨워라.
![](https://blog.kakaocdn.net/dn/meBft/btq6XPMxxbN/MBwqhlOOQ2CpqjX1fMCYD1/img.png)
0x01 = TC // 0x80 : TCA 이다.
그렇다면 위 이론으로 어떻게 Root bridge ID를 선출할 것인가? (2교시)
SW1]
conf t
vlan 10
exit
int range f1/1 , f1/3
sw mo ac
sw ac vlan 10
show spanning-tree vlan 10 br
![](https://blog.kakaocdn.net/dn/dGziOd/btq6W2yKMwN/xv1JFPdQkKrWnXtw3biSUk/img.png)
SW3]
![](https://blog.kakaocdn.net/dn/bEB13u/btq61mI8Eku/MC4wtclrxDUKJsRofTKkpK/img.png)
show spanning-tree vlan 10 br 로 조회결과, Address가 밀렸음. 고로 SW3는 Root 브릿지가 아님!!
Root Port는 무엇인가?
현재 [SW1]가 Root bridge 인 것을 확인하였으므로, SW2와 SW3에서 Root 브릿지로 갈 수 있는 최단 경로가 루트 포트이다. 한 마디로, Root 브릿지와 가장 먼저 만나는 최인접단자가 루트포트가 된다.
Alternate Port는 SW2와 SW3 각각에서 Root Port로 인정받지 못한 다른 하나의 포트가 대체 포트가 된다. 얘네들은
논리적으로 죽게 된다.
스위치 한대당 단 1개만 선출된다!!
1) Root Switch의 ID가 가장 낮은 BPDU를 수신한 포트
2) Path cost가 가장 작은 포트
3) 인접 스위치의 Bridge ID가 가장 낮은 포트
4) 인접 스위치의 Port ID가 가장 낮은 포트
5) 자신의 Port ID가 가장 낮은 포트
(2) 예시
![](https://blog.kakaocdn.net/dn/cBFHtD/btq62VYHE9p/nOT5PVbUauMbxRIyyHj7O0/img.png)
(3) 예시
![](https://blog.kakaocdn.net/dn/bVSYO9/btq6Z8SvfVz/MrEkptxtRXklwJrK6BkAzk/img.png)
(4) 예시
![](https://blog.kakaocdn.net/dn/KVIEL/btq60H1cjg5/bEUZ55D3AvepeY9yj8Tjs0/img.png)
한번 확인해보기.
SW1]
conf t
vlan 10
exit
int range f1/1 , f1/3
sw mo ac
sw ac vlan 10 br
show spanning-tree vlan 10 br
![](https://blog.kakaocdn.net/dn/1acg0/btq6ZTOGr9M/GY70JKPxMPPgxgdtnxke30/img.png)
Designated 포트 선택
한 Segment 당 하나씩 선택한다. Root port는 지정포트가 될 수 없다.
STP는 동작하지 않는 종단장치는 Designated 포트가 될 수 없다.
각 Segment마다 Root Switch에 좀 더 가까운 포트가 선출된다.
그리고 양쪽 다 D인 경우는 불가능하다.
1) 루트 스위치의 모든 포트는 선출된다.
2) 낮은 순위의 BPDU를 수신한 포트 (Root Switch 결정 직후)
3) Path cost가 작은 스위치의 포트 (포트가 아니라 Switch 자체의 Path cost)
4) Bridge ID가 낮은 스위치의 포트
5) Port ID가 낮은 포트
3번 예시
![](https://blog.kakaocdn.net/dn/GZ7Br/btq6ZQq31kI/2xUs6k3QU4zeYqcepnD7kK/img.png)
S4-S3 세그먼트에서 S3쪽은 Root 까지 19
S4-S3 세그먼트에서 S4쪽은 Root 까지 38
그래서 S3의 아래가 D가 되는것임. 그리고 SW4의 오른쪽은 죽는다.
Blocking 상태
데이터 오갈 수 없고, BPDU는 보낼 수 없고 받을 수만 있는 상태
Listening 상태
데이터 오갈 수 없고, BPDU 보내고 받기 전부 가능한 상태
Learning 상태
데이터 오갈 수 없고, BPDU 보내기 받기 전부 가능한 상태, 그리고 추가적으로 MAC 학습할 수 있다. 그래서 Forwarding부터 MAC 주소를 송수신 가능해짐.
Forwarding 상태
데이터를 송수신 할 수 있는 상태.
Disabled 상태
Shutdown 된 상태를 Disabled 상태라고 함. 데이터 및 BPDU 송수신 불가능한 상태.
활성화된 포트의 역할이 Root 포트 혹은 Designated 포트이면 즉시 Listening 상태가 된다. 그 후 30초가
지나야 Forwarding 상태가 된다. (Listening = 15초 / Learning = 15초) 활성화된 포트가
alternate 포트이면 바로 Blocking 상태가 된다.
Listening -(15초)-> Learning -(15초)-> Forwarding 각 단계를 forward age 라고 한다.
- Blocking, Listening, Learning 상태에서는 Data 프레임을 송수신하지 않는다.
- 비활성화 상태를 제외한 모든 상태에서 BPDU를 수신, Designated 포트는 Listening 상태부터 BPDU를 송신한다.
TCN을 언제 보내는지 확인해보자.
SW1]
deb spanning-tree events
![](https://blog.kakaocdn.net/dn/P7jj2/btq6WhitGez/PlYDTzkImOO7ZkCFE4qHNk/img.png)
SW2]
deb spanning-tree events
![](https://blog.kakaocdn.net/dn/mB2xf/btq6W2leZ01/IvxhHfYwW1nzPsCoZuNb90/img.png)
SW3]
deb spanning-tree events
![](https://blog.kakaocdn.net/dn/u4rPW/btq6160mfTC/RInu5JvcaNvQ38uhDvaAQk/img.png)
SW2]
conf t
int f1/1
shutdown
![](https://blog.kakaocdn.net/dn/bC0FyL/btq60JdDLkB/ZImkJTOfPjy3FkLsx3Mssk/img.png)
![](https://blog.kakaocdn.net/dn/Xka2H/btq6Ym4OBjr/1HYGr5RKc6P3TAiCQQdBFk/img.png)
저 위의 빨간선을 죽이니까, SW2가 Root 브릿지(직속 상관)가 사라졌기 때문에 SW2 자기가 루트라고 S3한테
BPDU를 보냄. 그랬더니 "SW2가 뭔 개소리니 SW3아 SW1이 너보다 더 쎈데." 라고 우기는 상황임.
이 말을 서로 2초 X 10번 20초 동안 주고받음.
MAX_AGE : 토폴로지에 변화가 생겼을 때, 블락포트가 변화하지 않고 기다리는 시간
SW3] debug spanning-tree events
저 위에 빨간 단자가 죽었을때 SW3의 오른쪽(Block 된 포트)이 살아나는데에
리스닝 -> 러닝 -> 포워딩(15초+15초)
MAX_AGE(20초) 해서 총 30초+20초 = 50초가 소요되었음.
![](https://blog.kakaocdn.net/dn/bj1mmc/btq6YlY7WYN/R1o5POCyktep5iP0XiMRyk/img.png)
간접 단자에 장애가 생겼을 때, 블락포트가 깨어나는데 걸리는 시간은 MAX_AGE까지 총 50초 걸린다.
그렇다면 SW2에서 int f1/1 로 가서 no shut을 다시 해보자. 그러면 바로 깨어남.
SW2]
conf t
int f1/1
no shut
![](https://blog.kakaocdn.net/dn/clWImy/btq60aCDyEp/vyff9i7RsNUadS65fSvlUK/img.png)
SW3]
conf 3
int f1/3
shut
![](https://blog.kakaocdn.net/dn/bN1FWo/btq6YmX4Yn8/9O9lfl0vNhHkDOX0ZwCszk/img.png)
직접 연결되어 있는 직접단자(직접포트)에 장애가 생기면 블락포트가 깨어나는데에 30초 걸린다.
그러면 다시 살려보기. 시간을 한번 줄여보자!!
SW3]
conf t
int f1/3
no shut 으로 일단 살려놓고!
SW1, SW2, SW3]
conf t
spanning-tree backbonefast
SW2]
conf t
int f1/1
shut
backbonefast를 했더니 max_age가 절약되었다.
##
backbonefast는 모든 스위치에 다 적용해야함.
SW3]
conf t
spanning-tree uplinkfast
int f1/3
shut
![](https://blog.kakaocdn.net/dn/mvvrc/btq6Z8SxQJ9/kvOh4XKpnvVvCsxoylYrKk/img.png)
## uplinkfast는 특정 스위치에만 적용하면 된다.
SW3]
다시 돌아가서
no shut
int f1/2
spanning-tree portfast
![](https://blog.kakaocdn.net/dn/cVUbEH/btq60JShAMP/s0ogC639TwBFcXQHqKXzB0/img.png)
show spanning-tree vlan 10 br
![](https://blog.kakaocdn.net/dn/cofwYQ/btq6W0VkKLD/tGpOVKSpAEPrtsiVVxUuQK/img.png)
portfast는 말단 장비 즉, 컴퓨터가 달린 access 포트에 선언을 해준다. 그렇게 되면 forward 딜레이 30초가 절약된다.
portfast는 컴퓨터와 연결된 곳에만 해야한다. 그 이외에 다른곳에 portfast를 해버리면 망이 전부 죽어버린다.
절대 금지임 정말 네버네버
![](https://blog.kakaocdn.net/dn/Irp5X/btq60Iy6Whb/xLSBooe1HCGaUNeWm1gM7k/img.png)
예시에서는 SW3의 오른쪽 f1/2에 portfast를 사용했는데 실제로는 절대 사용하면 안된다!!
왜냐하면 SW2가 컴퓨터가 아니므로!!
<정리>
1) 직접 링크 단절시 => 30초(리스닝-러닝-포워딩 30초)
2) 간접 링크 단절시 => 50초(리스닝-러닝-포워딩 30초 + max_Age 20초)
[1. CST(Common STP)]
- 표준 방식의 STP로 모든 VLAN이 하나의 동일 STP 프로세스에 따라서 동작하는 방식을 의미.
[2. PVST(Per VLAN STP)]
- Cisco 방식의 STP로 VLAN 마다 독립된 STP 프로세스를 갖고 동작하는 방식을 의미.
- Cisco 전용 Trunking 방식인 ISL 에서만 동작.
[3. PVST+] ==> 우리가 실습때 사용하는 것.
샘 曰 : VLAN이 10개는 100개든 한 VLAN에 1개만 들어갔음. 그래서 1개를 제외한 나머지는 전부 합선이 나버림.
VLAN 별로 하나의 STP가 돌게하자. VLAN이 여러개면 Trunking이 되어야 여러개의 VLAN이 형성되는데 각각 마다
ISL 에서만 사용할 수 있던 것을 dot1에서도 전부 사용할 수 있게 하는 것.
- 기존의 PVST가 확장된 형태로 ISL 뿐 아니라 dot1에서도 사용이 가능하다
- 추가적으로 STP 보안 기술인 Root Guard/BPDU Guard 등의 기능도 추가되었다.
- 오늘날 기본적인 Cisco Switch의 STP 동작 방식이다.
<암기>
ISL : 802.1d?
뭐 이런것 같음.
STP 최대의 개수 : 스위치 1대당 128개
근데 VLAN은 4096개? 인데 VLAN 128개를 제외한 나머지 VLAN 들은 MSTP를 통해 묶어 LOOP를 돌게 된다. 기억하기.
'Network > Cisco (KEDU)' 카테고리의 다른 글
Spanning-tree 2차전 // 끝판왕(레벨3 스위치 3개 + 일반 스위치 1개) (0) | 2021.06.11 |
---|---|
Switch L3 interface (0) | 2021.06.11 |
Floating Static Route (0) | 2021.06.10 |
프레임 릴레이 (0) | 2021.06.10 |
PPP - CHAP 방식 GNS3 Programming (0) | 2021.06.09 |