본문 바로가기
Switch/이론

[스위치] STP(Spanning Tree Protocol)란?

by 재현짱 2024. 6. 17.
728x90

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 동작 방식

  1. 전체 스위치중에서 Root Switch 선택
  2. Root Switch가 아닌 모든 Switch에서 Root Port를 하나씩 선택
  3. 한 스위치 세그먼트(Segment)당 지정(Designated) 포트를 하나씩 선택
  4. 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)

Bridge ID

2Byte의 Bridge Priority(우선순위)와 6Byte의 MAC Address로 구성

 

Designated Port 선택

  1. 경로값의 합이 작은 스위치의 포트
  2. Bridge ID가 낮은 스위치의 포트
  3. Port ID가 낮은 포트

지정포트를 경정할 때 위와 같은 사항을 순차적으로 비교, 루트 스위치의 각 포트들은 항상 지정포트가 됨

 

BPDU(Bridge Protocol Data Unit) 구성

  • Bridge ID
  • Root Bridge ID
  • 경로값 및 Port ID
  • 각종 타이머

BPDU 종류

설정 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 명령어로 확인 가능!

sh spanning-tree vlan

 

[표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 동작을 취함
  • 포트 역활이 대체포트이면 차단 상태로 변경

port fast

UpLink Fast

  • 직접 연결된 링크가 다운되었을 때 차단 상태에 있는 포트를 즉시 전송상태로 변경시키는 역활
  • 종단 스위치에서 설정해야함

uplink fast

BackBone Fast

  • 직접 접속되어 있지 않은 간접 링크가 다운되었을 때, 차단상태의 포트에서 Max age (기본 20초)를 생략하고 청취상태로 변경시킴
  • 간접 링크 다운시 기본적인 spanning-tree 컨버전스 시간인 50초를 30초로 단축

backbone fast

 

[표 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 교육 과정 일부