[Switch] STP 조정 및 보호기술

STP는 전원을 꽂기만 하면 동작되는 ‘Plug and Play’ Protocol이라고 한다. 그러나 STP 값을 조정하지 않고 그대로 사용한다면, 네트워크의 동작 속도는 느릴 것이다. 장애가 발생되어 복구하는 시간도 오래 소요되고, 간단한 조작에 의해서도 스위치 네트워크가 마비될 수 있다.

이러한 위험(?)을 방지하고자 STP를 좀 더 유용하게 사용하려면, 컨버전스 시간을 조정해야 한다. ‘컨버전스 시간’이란, 토폴로지에 변동이 생겼을 때 네트워크가 재구성될 때까지 소요되는 시간이다.

컨버전스 시간을 줄이는 방법은 아래와 같다.

┌─ Port Fast
├─ Uplink Fast
├─ Backbone Fast
├─ Hello / Max-Age / Forward-Delay 조정
└─ RSTP 또는 MSTP 사용

또한, STP는 보안에 취약하다.
STP 네트워크를 보호하는 방법은 아래와 같다.

┌─ BPDU Guard
├─ BPDU Filtering
├─ Loop Guard
├─ Root Guard
└─ UDLD


1. STP 조정

1-1. Port Fast

Switch의 Port가 활성화되면, Listening 상태부터 시작한다.
(Blocking → Listening → Learning →Forwarding)
그러나 Port Fast 기능을 사용하면, Listening 상태가 아닌 바로 Forwarding 상태가 되도록 한다.
(Blocking → Forwarding)
보통 PC나 서버 등과 같이 종단 장치가 연결된 Port에 설정한다.

설정

[방법1. 모든 Access port에 Port Fast 적용]

Switch(config)# spanning-tree portfast default

Hub/Switch/Bridge가 연결되어있다면, 일시적으로 프레임 루프가 발생할 수 있다. Switch 간 Access port를 사용하는 추세이므로 가능한 이 방법은 권장하지 않는다.

[방법2. 특정 인터페이스에 Port Fast 적용]

Switch(config)# interface <INTERFACE>
Switch(config-if)# spanning-tree portfast

[Trunk 포트에 Port Fast 적용]
Server/Router 등과 연결되는 Trunk 포트나 링크가 하나 뿐인 Switch를 연결하는 Trunk 포트에선 사용할 수 있다.

Switch(config)# interface <TRUNK_INTERFACE>
Switch(config-if)# spanning-tree portfast trunk

직접 연결된 링크가 다운되었을 때, Blocking 상태에 있는 포트를 즉시 Forwarding 상태로 변경한다. Root Switch에선 차단 상태 포트가 없으므로 Access(종단) Switch에서 설정한다. Uplink Fast 설정 시 자신을 Access Switch로 만들기 위해 Priority를 32768에서 49152로 변경한다.

설정
Switch(config)# spanning-tree uplinkfast

1-3. Backbone Fast

직접 접속되지 않은 간접 링크가 다운되었을 때, Blocking 상태의 포트에서 Max-Age를 생략하고 바로 Listening 상태로 변경한다. Max-Age를 생략하면 Forwarding 단계까지 20초 단축할 수 있다.

동작과정
  1. ‘SW1—SW2’ 링크 다운
  2. SW2는 자신이 Root Switch라고 주장하는 후순위 BPDU를 SW3로 전송
  3. SW3이 ‘SW1—SW2’ 링크 다운 인지
  4. SW3가 SW1로 RLQ 전송 (‘SW3—SW1’ 링크 상태 확인을 위함)
  5. SW1은 이상이 없다는 의미로 RLQ 응답패킷 전송
  6. 해당 패킷을 받은 SW3는 Blocking 상태 포트의 Max-Age를 만료시켜 바로 Listening 상태로 변경
설정

Backbone Fast를 구성하려면 전체 Switch에서 설정해야한다.

Switch(config)# spanning-tree backbonefast

1-4. STP Timer 조정

앞서 본 Fast 방식 설정 말고, 직접 타이머를 조정하여 컨버전스 시간을 단축할 수 있다.

– 기본값
Diameter 별로 타이머 기본 값이 상이하다.
기본 Diameter 값은 7이다.

Diameter 값을 조정해 STP 타이머를 변경하려면, 반드시 Root Switch에서 조정해야 한다. 일반 Switch에서 설정하면 나중에 해당 Switch가 Root Switch가 되어야만 전체 네트워크에 적용되기 때문이다.

[Root Switch에서 Diameter 조정]

Switch(config)# spanning-tree vlan <VLAN_NUM> root primary diameter [2-7]

[Hello / Max-Age / Forward-Delay 조정]

Switch(config)# spanning-tree vlan <VLAN_NUM> hello-timer [1-10]
Switch(config)# spanning-tree vlan <VLAN_NUM> max-age [6-40]
Switch(config)# spanning-tree vlan <VLAN_NUM> forward-time [4-30]

2. STP 네트워크 보호

2-1. BPDU Guard

특정 Port를 통해 BPDU 수신 시 해당 Port를 자동으로 Shutdown한다. 이렇게 shutdown된 Port는 ‘다시 직접 shutdown → no shutdown’ 해야 up된다. 일반적으로 PC/Server와 같은 종단 장치가 BPDU를 전송하지 않으므로 이러한 Port에 설정한다.

설정

[방법1. Port Fast가 적용된 Port에 설정]

Switch(config)# spanning-tree portfast bpduguard default

[방법2. 특정 인터페이스에 적용]

Switch(config)# interface <INTERFACE>
Switch(config-if)# spanning-tree bpduguard enable

[복구]

Switch(config)# errdisable recovery cause bpduguard
Switch(config)# errdisable recovery interval 120

1: 300초 후 자동으로 Port 복구
2: 120초 후 자동으로 Port 복구


2-2. BPDU Filtering

특정 Port로BPDU를 보내거나 받지 않게 한다. 보통 BPDU를 수신하지 않아도 되는 종단 장치에 불필요한 프레임이 전송되는 것을 방지한다. BPDU를 보내지 않기 때문에 STP가 동작하지 않는 것과 비슷하다.

설정

[방법1. portfast가 적용된 포트에만 BPDU Filtering 설정]

Switch(config)# spanning-tree portfast bpdufilter default

[방법2. 특정 인터페이스에 설정]

Switch(config)# interface <INTERFACE>
Switch(config-if)# spanning-tree bpdufilter enable
만약, SW3의 F0/3에 BPDU Filtering을 하면 어떻게 될까?

SW3의 F0/3은 현재 Alternate Port이다. 이런 상황에서 BPDU Filtering을 설정하면, F0/3은 BPDU를 받지 못할 것이고 STP로 인해 Designated Port로 변경될 것이다. 그럼 SW3 — SW2 링크가 살아나고, 루프가 생길 것이다.


2-3. Loop Guard

일반적으로 Blocking 상태에 있는 포트가 BPDU를 받지 못했을 때, 일정 시간이 지나게 되면 Forwarding 상태로 변경된다. 이 것을 방지하는 기능이다. 이 기능을 사용하면 Blocking 상태의 포트가 Loop Inconsistent(루프 비일관) 상태로 바뀐다. Loop Inconsistent도 Blocking과 비슷하다.

다시 BPDU를 받게 되면 자동으로 정상적인 Blocking 상태로 돌아간다. 물론, Loop Guard가 설정되어도 링크가 다운되거나 후순위 BPDU를 받는 경우엔 Blocking 상태에서 Forwarding 상태로 변경된다.

설정

[방법1. 전체 인터페이스에 적용]

Switch(config)# spanning-tree loopguard default

[방법2. 특정 인터페이스에 적용]

Switch(config)# interface <INTERFACE>
Switch(config-if)# spanning-tree guard loop

2-4. Root Guard

특정 포트에 접속된 네트워크에 있는 Switch들이 Root Switch가 될 수 없도록 한다. Root Guard가 설정된 포트에서 현재의 Root Bridge ID보다 더 우선되는 Bridge ID를 수신하면 해당 포트를 다운시킨다.

설정

[방법. 특정 인터페이스에서 설정]

Switch(config)# interface <INTERFACE>
Switch(config-if)# spanning-tree guard root

[복구]
문제되는 Bridge ID를 가진 Switch에서 우선순위를 조정하면 차단된 포트가 다시 활성화된다. 또는, 해당 포트를 shutdown → no shutdown하여 활성화할 수 있다.


2-5. UDLD

Unidirectional Link Detection
Switch 간 링크에서 단방향 링크가 생겼을 때, 해당 포트를 다운시킨다. 단방향 링크로 인해 L2 루프가 발생하거나 한 쪽에서 보낸 프레임이 사라지는 블랙홀 현상이 발생할 수 있기 때문이다.

주기적으로 송신포트를 통해 UDLD패킷을 전송한다. 이 패킷을 수신한 상대는 다시 자신의 송신포트를 통해 Echo시킴으로써 양방향 링크가 정상 동작하는지 확인한다.

얼핏 보면, Loop Guard와 비슷한 기능이라고 생각할 수 있지만, Loop Guard는 소프트웨어적인 상황(상대 Swtich 이상)으로 인해 BPDU를 송신하지 못할 때 동작하고 UDLD는 케이블링을 감지하여 동작한다. UDLD를 사용하려면 상대 Switch도 UDLD 기능을 지원해야한다.

UDLD Mode
  • Normal Mode(일반모드): 광케이블 결선 오류로 인한 단방향 링크를 감지한다.
  • Aggressive Mode(적극?모드): 광케이블 및 UTP의 단방향 트래픽으로 인한 단방향 링크를 감지한다.
설정

[방법1. 전체 인터페이스에 설정]

Switch(config)# udld [Aggressive | normal]

[방법2. 특정 인터페이스에 설정]

Switch(config)# interface <INTERFACE>
Switch(config-if)# udld port 
Switch(config-if)# udld port aggressive

2: or 3: 둘 중 하나를 택하여 설정한다.
2-Normal, 3-Aggressive

[복구]

Switch# udld reset
OR
Switch(config)# errdiasble recovery cause udld

이외에도 다운된 포트에서 직접 복구하는 방법도 있다.

One thought on “[Switch] STP 조정 및 보호기술”

답글 남기기

이메일 주소는 공개되지 않습니다.