STP(Spanning Tree Protocol)란?
등장 배경
- WAN은 회선별로 매월 비용 지불
- LAN은 링크를 연결하면 추가적인 비용이 발생하지 않음
- 특정 스위치나 링크가 다운되어도 대부분의 네트워크가 중단없이 동작, 트래픽 분산시켜 네트워크 성능 향상
- *이더넷 프레임 루프발생
- 이중화 경로 구성의 문제점(브로드캐스트 스톰, 중복 프레임 수신, MAC Address Table 불완전 현상)이 발생
- 해결방안으로 STP가 탄생함
이더넷 프레임 루프
- IP의 TTL(time to live)에 해당하는 필드가 존재하지 않음
- 루프 발생시 인위적으로 끊어주지 않으면 중단되지 않음
- 브로드캐스트나 멀티캐스트 트래픽을 발생해 장비의 CPU 사용률을 증가시킴
중복 토폴로지(Redundant Topology) 사용 문제점
- Broadcast storms
- Multiple frame copies (중복 이더넷 프레임 전송)
- MAC address table instability (불안정)
- Looping이 발생
STP 개요
- 다중화로 구성된 스위치에서 Looping 발생 방지 프로토콜
- 하나의 경로를 제외, 나머지 하나의 경로를 차단하고 마치 단일경로인 것처럼 사용
- 사용 경로 문제 발생 시 차단된 경로 활성화
STP 동작 방식
- 전체 스위치중에서 Root Switch 선택
- Root Switch가 아닌 모든 Switch에서 Root Port를 하나씩 선택
- 한 스위치 세그먼트(Segment)당 지정(Designated) 포트를 하나씩 선택
- Root Port도 지정 Port도 아닌 Port를 대체(alternate) Port라고 한다. * 대체포트는 항상 차단됨
* 선출방법: BPDU를 이용해, Root Switch를 선출, Port의 역활 지정
Root Port 선출방식
- *경로합이 작은것
- 인접 스위치 *Bridge ID 값이 가장 낮은 포트
- 인접 스위치 *Port ID 값이 가장 낮은 포트
- Root ID와 Bridge ID의 숫자가 동일하면 해당 스위치가 Root
- Bridge 하단에 있는 스위치 타이머 값들은 현재는 사용하지 않음 (현 스위치가 Root로 전활될때 사용)
*경로합(Past cost): 포트의 속도별로 IEEE에서 미리 정해놓은 값. 속도가 빠를수록 경로값이 작음
*Port ID: BPUD를 전송하는 포트의 우선순위와 포트번호로 구성
*Bridge ID에서 사용하는 우선순위의 기본값은 10진수로 32768이다. (Max: 65535, Min: 0)
2Byte의 Bridge Priority(우선순위)와 6Byte의 MAC Address로 구성
Designated Port 선택
- 경로값의 합이 작은 스위치의 포트
- Bridge ID가 낮은 스위치의 포트
- Port ID가 낮은 포트
지정포트를 경정할 때 위와 같은 사항을 순차적으로 비교, 루트 스위치의 각 포트들은 항상 지정포트가 됨
BPDU(Bridge Protocol Data Unit) 구성
- Bridge ID
- Root Bridge ID
- 경로값 및 Port ID
- 각종 타이머
BPDU 종류
설정 BPDU
- 설정 BPDU를 이용해 Root 스위치를 선출
- 스위치 포트의 역활을 지정
- 설정 BPDU는 항상 Root 스위치가 제작, 다른 스위치들은 다음 스위치로 중계
[표 1] 설정 BPDU의 필드 및 내용
필드(Field) | 크기(Bytes) | 내용 |
프로토콜 (Protocol) ID | 2 | 항상 0 |
버전 (Version) | 1 | BPDU의 버전 표시. STP: 0, RSTP: 2, MSTP: 3 |
타입 (Type) | 1 | BPDU 종류 표시, 0x00: 설정 BPDU |
플래그 (Flag) | 1 | 토폴로지 변화 표시. 0x01: TC, 0x80: TCA |
루트 브리지 (Root brigde) ID | 8 | 루트 스위치의 ID |
경로값 (Path cost) | 4 | 루트 스위치까지의 경로값 |
브리지 (Brigde) ID | 8 | 루트 스위치로 가는 경로상, 직전 스위치의 스위치 ID |
포트 (Port) ID | 2 | 포트 ID |
메시지 에이지 (Message age) | 2 | 루트 스위치까지의 스위치 수. IP의 TTL 값과 유사 |
멕스 에이지 (Max age) | 2 | BPDU 정보를 저장하는 시간 |
헬로 타임 (Hello time) | 2 | BPDU 전송 주기 |
포워드 딜레이 (Forward delay) | 2 | 청취 상태와 학습상태에 머무르는 기간 |
TCN BPDU
- 스위치의 특정 링크가 활성화되거나 다운되는 등 네트워크에 변화 발생 시 루트 스위치에게 보고
- 설정 BPDU의 앞 부분 필드 3개만으로 구성
- 2개의 필드값은 설정 BPDU와 동일, 세 번째 필드의 내용만 TCN BPDU를 의미하는 0x80으로 이루어짐
[표 2] TCN BPDU의 필드 및 내용
필드 (Field) | 크기(Bytes) | 내용 |
프로토콜 (Protocol) ID | 2 | 항상 0 |
버전 (Version) | 1 | BPDU의 버전 표시. STP: 0, RSTP: 2, MSTP: 3 |
타입 (Type) | 1 | BPDU 종류 표시 0x00: 설정 BPDU |
STP Root Switch 확인
Show spanning-tree vlan 1 명령어로 확인 가능!
[표3] 루트 스위치 설명
Interface | Role | Status | Cost | Prio.Nbr | Type |
포트 ID | 대체 지정 | FWD/BLK | 기본값 100 | 128 | P2p (point to point) Shr (Shared) Edge |
Sts (Status)
Disabled 비활성화
- 포트가 비활성화, Shutdown 시켜놓은 상태
- STP 프로세스에 참여하지 않음
- 데이터 전송 불가/ MAC Address 학습 불가/ BPDU 교환불가
Listening 청취
- 포트가 활성화되어 BPDU를 수신하지만 데이터 프레임을 전송하지 않음
- 네트워크 토폴로지를 학습하는 단계
- 데이터 전송 불가/ MAC Address 학습 불가/ BPDU 교환
Learning 학습
- 포트가 MAC Address Table을 학습하는 상태
- 데이터 프레임은 전송되지 않음
- 데이터 전송 불가/ MAC Address 학습 가능/ BPDU 교환
FWD (Forwarding) 전달
- 포트가 활성화되어 테이터 프레임을 전송 및 수신할 수 있는 상태
- 포트가 트래픽을 정상적으로 처리
- 데이터 전송 가능/ MAC Address 학습 가능/ BPDU 교환
BLK (Blocking)
- 포트가 비활성화되어 데이터 프레임을 전송 및 수신이 불가능한 상태
- 네트워크 루프를 방지하기 위해 사용
- 데이터 전송 불가/ MAC Address 학습 불가/ BPDU 교환
Type
P2P (Point-to-Point)
- 두 개의 스위치가 직접 연결된 링크
- 두 스위치 간의 통신이 최적화, 빠른 데이터 전송을 지원
Edge
- 여러 장치가 공유하는 허브와 같은 네트워크 장비를 통해 연결된 포트
- 컴퓨터나 프린터 등과 같은 장치가 연결되어 있음
- 스위치 포트는 바로 활성화되어 네트워크 연결을 즉시 제공
Shared
- 허브 또는 리피터와 같은 Network 장치를 사용하는 type
- 여러 장치가 동일 네트워크 세그먼트를 공유
- 여러 장치가 같은 채널을 사용, 통신 (충돌 가능성이 발생)
* 해결 방안: VLAN은 브로드캐스트 도메인을 나누지만 충돌 도메인은 나누지 않음!
Prio.Nbr (Priority. Number)
Port Priority (4비트)
- 포트의 우선순위를 나타냄
- 기본값 128(0x80) 사용자에 의해 변경 가능
Port Number (12비트)
- 포트 번호를 나타냄
ex) '128.1'은 포트 우선순위가 128이고 포트 번호가 1인 경우를 나타냄
왜 128인가? => STP에서 포트 우선순위 값의 기본 설정, 0 ~ 240까지 16단위로 증가됨
Cost
비용 조정
- 경우에 따라 경로 비용을 수동으로 조정해 트래픽 흐름을 최적화할 수 있음
- 네트워크의 요구사항과 최적화 목표에 따라 달라짐
비용 계산
- Root bridge로부터의 총 경로 비용을 계산해 루트 포트와 지정 포트를 결정
- 경로 비용은 각 포트의 비용을 합산하여 계산
- Root Port는 Root bridge까지의 경로 비용이 가장 낮은 포트로 선택
[표 4] IEEE 802.1d 1998 표준
링크 속도 | 경로 비용 |
10 Mbps | 100 |
100 Mbps | 19 |
1 Gbps | 4 |
10 Gbps | 2 |
Role
Root (루트 포트)
- 각 스위치에 하나씩 존재, Root bridge로 가는 최단 경로를 제공하는 포트
- Root bridge로 트래픽 전달
Designated (지정 포트)
- 네트워크 세그먼트에서 데이터를 전달하는 역활, 각 네트워크 세그먼트에 하나씩 존재
- 네트워크 세그먼트의 트래픽을 처리
Alternate (대체 포트)
- Root port가 실패했을 때 대체 경로를 제공
- 루트 포트가 실패할 경우 활성화
Backup (백업 포트)
- 지정 포트가 실패했을 때 대체 경로를 제공, 주로 허브와 같은 공유 네트워크 장비에서 사용
- 지정 포트가 실패할 경우 활성화
Disabled (비활성화 포트)
- 포트가 비활성화된 상태. STP의 영향을 받지 않음
- 네트워크 트래픽을 처리하지 않음
STP 조정 및 보호기술
컨버전스(Convergence) 시간 조정
- 토폴로지 변화가 일어났을 때 이를 반영하여 네트워크가 재구성될 때까지 소요되는 시간
- STP의 단점중 하나가 Convergence 시간이 너무 길다는 것
- 별도 조정이 없으면 장애 발생시 복수개의 경로가 존재해도 30초 또는 50초 동안 스위치 네트워크의 다운상태 지속
- 컨버전스 시간을 줄이는 방법으로는 포트패스트(portfast), 업링크패스트(uplinkfast), 백본패스트(backbonefast)가 존재
- RSTP(Rapid Spanning Tree Protocol), MSTP(Multiple Spanning Tree Protocol)를 사용해도 단축 가능
Port Fast
- 포트가 활성화되면 바로 전송상태가 되게 하는것
- PC, Server 등과 같이 종단장치와 연결된 포트에 설정
- 포트 패스트가 설정된 포트라도 BPDU를 수신하면 그에 따른 적절한 STP 동작을 취함
- 포트 역활이 대체포트이면 차단 상태로 변경
UpLink Fast
- 직접 연결된 링크가 다운되었을 때 차단 상태에 있는 포트를 즉시 전송상태로 변경시키는 역활
- 종단 스위치에서 설정해야함
BackBone Fast
- 직접 접속되어 있지 않은 간접 링크가 다운되었을 때, 차단상태의 포트에서 Max age (기본 20초)를 생략하고 청취상태로 변경시킴
- 간접 링크 다운시 기본적인 spanning-tree 컨버전스 시간인 50초를 30초로 단축
[표 6] 패스트 모드의 구분
모드 | 설정위치 | 명령어 | 효과 |
Port Fast | Interface | spanning-tree portfast | 즉시 전송상태 30초 절약 |
Uplink Fast | Access Switch | spanning-tree uplinkfast | 즉시 전송상태 30초 절약 |
Backbone Fast | 모든 Switch | spanning-tree backbonefast | 맥스 에이지 생략 20초 절약 |
스패닝 트리 타이머 조정
- STP에서 사용하는 기본 타이머 값 Hello 2초, Max age 20초, 전송 지연시간 15초 = 네트워크 디아미터(Diameter)가 7인 경우를 가정, 레이어 2 루프가 발생하지 않도록 설정
- 네트워크 디아미터의 크기가 작은 경우 타이머들의 값을 줄여 컨버전스 시간을 단축시킬 수 있음
- 조정이 잘못되면 L2 루프가 발생할 가능성이 높아 Diameter 옵션을 사용하여 스위치가 자동으로 타이머 값들을 변경하게 만들어야 안전
- 이 경우 원하는 스위치가 루트로 지정되지 않을 수 있음
네트워크 디아미터별 적정 타이머값
- 타이머 값은 루트 스위치에서 설정된 것이 사용됨
- 반드시 루트 스위치에서 조정해야 전체 네트워크에 적용됨
- 루트 스위치가 아닐 시, 자신이 루트가 되어야만 적용됨
- 기본적으로 2초인 헬로 시간을 1초로 조정해도 컨버전스 시간이 줄어들지 않고, 1초마다 BPDU가 전송되므로 스위치에 부하를 줌
- Hello-time 사용할 수 있는 값의 범위는 1 ~ 10초 사이
[표 7] 네트워크 디아미터별 적정 타이머값
디아미터 | 2 | 3 | 4 | 5 | 6 | 7 |
헬로 | 2 | 2 | 2 | 2 | 2 | 2 |
전송 지연 | 7 | 9 | 10 | 12 | 13 | 15 |
맥스 에이지 | 10 | 12 | 14 | 16 | 18 | 20 |
STP 네트워크 보호기술 (BPDU Guard)
- 포트를 통해서 BPDU를 수신했을 때 해당 포트를 자동으로 Shutdown 시키는 기능
- 네트워크 관리자가 Interface에서 Shutdown 명령어를 사용 후 No shutdown 명령어를 사용해야만 포트가 살아남
- BPDU Guard는 PC나 Server 등 종단장치가 접속된 포트가 BPDU를 수신했을 때 해당 포트를 차단
BPDU Filtering
- 특정 포트로 BPDU를 보내거나 받지 않게 하는 기능
- BPDU 필터링 기능은 BPDU를 송신하지 않음으로써 스위치 및 포트에 접속된 종단 장치에 불필요한 부하가 걸리는 것을 방지할 수 있음
- 전체 설정모드와 Interface 설정모드에서 지정할 수 있으나 동작하는 방식이 다름
루프 가드 (Loop Guard)
- 차단상태에 있는 포트가 상대 지정포트에서 BPDU를 받지 못했을 때 전송상태로 변경되는 것을 방지하는 기능
- 차단상태의 포트는 루프 비일관 (Inconsistent) 상태로 바뀜
- 루프 비일관 상태도 일종의 차단상태 다시 BPDU를 수신하기 시작하면 자동으로 정상적인 차단상태로 변경됨
UDLD (Unidirectional Link Detection)
- 스위치간에 단방향 링크가 생겼을 때 해당 포트를 Shutdown 시킴
- 단 방향 링크는 접속된 두 장비 중 하나가 상대방이 보내는 트래픽을 받지 못하는 경우 일어남
- 단 방향 링크가 생기면 레이어 2 루프가 발생하거나, 한쪽이 송신한 프레임이 사라지는 블랙홀이 발생할 수 있다.
- 광케이블이나 UTP 케이블이 끊어졌을 때에는 물리계층에서 자동협상을 통해 인식
- *Normal mode(정상 모드) 와 *Aggressive mode(적극 모드)가 존재
*정상 모드: 광케이블의 결선 오류로 인한 단 방향 링크를 감지
*적극 모드: 추가적으로 광케이블과 UTP 케이블의 단방향 트래픽으로 인한 단방향 링크까지도 감지 가능
루트 가드 (Root Guard)
- 특정 포트에 접속된 네트워크에 있는 스위치들은 루트 스위치가 될 수 없도록 하는 기능
- 루트 가드가 설정된 포트에서 현재의 루트 스위치 ID보다 더 우선하는 루트 스위치 ID를 가진 BPDU를 수신하면 해당 포트를 Down시킴
- 루트 가드 기능을 사용하면 ISP나 일반 기업체에서 원치 않은 스위치가 루트 스위치가 되어 네트워크에 영향을 주는 것을 방지 가능
출처: Kitri 교육 과정 일부
'Switch > 이론' 카테고리의 다른 글
[스위치] SPAN(Switch Port Analyzer)란? (0) | 2024.06.21 |
---|---|
[스위치] 스위치 포트 보안(Switch Port Security)이란? (0) | 2024.06.14 |
[스위치] VTP(VLAN Trunk Protocol)란? feat. Trunking (0) | 2024.06.13 |
[스위치] Switch란? (0) | 2024.05.13 |