2009년 9월 29일 화요일

Cisco사의 UDLD

To be blackholing in your network or not to be that is question.

역시 cisco prorietary 한 protocol입니다. (spanning tree에 관한한 IEEE의 802.1s,802.1w에 관한 규정이 아무래도 시스코를 못따라가는 듯이 보입니다. 하지만 기존의 802.1d보다는 많은 진전이 있었져..)

77a.gif

위의 그림을 보시져..위의 그림에서 스위치 B의 link에 문제가 생겼읍니다. 어떤 문제냐 하면 스위치 B가 frame을 받는 것은 가능한데, 보내는 것이 불능인 상태에 빠졌읍니다.

(어떻게 이런일이 발생하냐고여..광케이블(sx,lx,zx)을 사용하다 보면  이런일을 경험하신 적이 있을 겁니다. )

이 상태라면 어떻게 될까요?  스위치 C는 스위치 B로 부터 BPDU를 받지 못합니다. ( blocking 상태에 있는 non-desinated port라고 할지라도 BPDU는 받을 수 있져..spannint tree에 대한 부분을 참조하세요..)

BPDU를 스위치 C는 스위치 B와 연결된 포트에 받지를 못하므로 max age(20초) 시간이 지난 다음에 listening-learning(30초)단계를 지나서 forwarding state로 가게 됩니다. 여기서 왜 무조건 forwarding state으로 가게 될까요.. 당연히 시간이 지났으므로 forwarding상태로 가는 것입니다. 이유가 없어여..답은 시간지났으니까요가 될겁니다.

자 시간이 지나서 forwarding상태로 간 것은 좋은데 네트워크 상태는 지금 어떨까요 ?

바로 위의 그림과 같이 한쪽방향으로만 looping이 발생하게 됩니다. (blackhole에 빠진거져..)

이런 상황에서는 해결책이 뭐가 있을까요... 다음과 같이 해결하면 됩니다.

1) 한쪽방향으로만 link가 fail시 이를 평상시에 감지를 하여 link 전체를 disable시키는 방법

         -- 이를 UDLD(UniDirectional Link Detection Protocol) 이라 합니다.

 2) 문제는 시간이 지나면 forwarding state으로 무조건 가는데 있읍니다. 이런경우 시간이 지난다고 무조건 forwarding을 할것이 아니라, 무언가 확실해 지기 전까지는 무조건 inconsistent state으로 내비두고 user traffic이 절대로 흐르지 못하게 하는 겁니다 . 무언가 확실해 진다는 말은 이 그림에서는 B switch에서 BPDU가 다시 들어오는게 확인 될때까지 이겠져..

      -- 이를 Loop guard 라고 합니다.

* 아래 그림으로 Loop guard를 다시한번 설명하겠읍니다.

   저 위 그림으로 loop guard가 이해 안가는 것이 있는데 위의 그림 상황에서는 Loop guard가 확실히 이해는 가지만 만약 실재 link가 끊어지는 상황에서 Loop guard가 enble되있으면 어떻게 하냐 라는 상황이 궁금할겁니다. 아마

위 그림을 보시면 Loop Guard가 설정되는 port가 명시되어 있읍니다. 우리가 알고 있는 non-desinated port는 모두 loop Guard를 설정하는 군요.( root port + non-desinated port )

위의 상황에서 A-B 스위치 사이의 Link가 끊어졌읍니다. 그럼 B switch는 어떻게 할까요..자신이 root라고 판단을 하고 C에게 inferior BPDU를 보낼 겁니다. B 스위치의 Loop guard가 설정되어 있는 port는 아마도 link가 실재로 끊어졌으므로 바로 port disable상태로 갈겁니다. 그러므로 B는 loop guard 있어도 되져..^^

자 C는 B switch로 부터 inferior한 BPDU를 받습니다. 뭐 생각나는게 있는데.. 아 Backbone fast가 동작을 하겠져.. backbone fast가 동작이 되면 max-age동안 기다릴 필요 없이 스위치 C는 root query를 스위치 A에게 날리고 응답이 돌아오므로 B switch와 연결된 포트를 바로 inconsistent state상태로 보냅니다. 

Loop guard를 설정해도 backbone fast와 uplinkfast를 같이 사용할 수 있읍니다. 다만 Root guard와 BPDU guard와 같은 경우는 desinated port에 설정을 하므로 같이 사용될 수 없겠져..

UDLD와 Loop guard를 비교해 놓은 표입니다. 주의할 사항은 STP failure일 경우 ( 예를 들어 위의 그림에서 link의 unidirectional 한 문제가 아니라 스위치 소프트웨어나 하드웨어등의 결함으로 BPDU를 보내지 못하는 경우의 black hole을 대비하는데는 Loop guard를 써야 한다는 말입니다.)

miswiring문제와 같은 경우 ( UDLD가 wiring문제에서 출발하져.. )

마지막으로 Loop guard는 per-vlan based하에서 동작하나 UDLD는 per-vlan based가 아니라는 것만 주의깊게 살펴보시면 될것 같습니다.

자 이제 설정예를 보셔야 겠져..

 UDLD의 경우 전역적으로 설정하거나 port별로 설정이 가능합니다.

Vega> (enable) set udld enable
UDLD enabled globally

Vega> (enable) set udld enable 1/2
UDLD enabled on port 1/2

IOS based switch는 해당 명령어를 찾으면 금방 나올겁니다. 아마..

UDLD의 경우도 global하게 설정되거나 port별로 설정이 가능합니다.

set spantree global-default loopguard enable

Nelix> (enable) set spantree guard loop 3/13
Enable loopguard will disable rootguard if it's currently enabled on the port(s).
Do you want to continue (y/n) [n]? y
Loopguard on port 3/13 is enabled.

 이 메세지는 loop guard가 동작하였을때 보여지는 log입니다.

SPANTREE-2-LOOPGUARDBLOCK: No BPDUs were received on port 3/2 in vlan 3. Moved to loop-inconsistent state.

댓글 1개:

  1. 안녕하세요.

    좋은 자료 잘 보고 갑니다.

    F5도 열심히 하세용~~~



    Good bye

    답글삭제