STP (Spanning Tree Protocol)

네트워크를 공부하는 사람이라면 누구나 피해갈 수 없는 스패닝트리 입니다.


STP는 이번 포스팅에서 모든 이야기를 할 수는 없을 것 같습니다.


처음엔 간단히 이런게 있구나.. 수준의 소개로 시작하고


차 후 기회가 됐을 때 스패닝트리를 이용한 네트워크 변화와 설정에 대해서 이야기 해보도록 하겠습니다.


스패닝트리는 간단히 이야기하면 루프를 방지하는 기술입니다.


스위치들간에 라인이 잘못연결되어 루프가 발생하면 스위치 CPU사용률이 급격하게 올라가게되고


정상적인 서비스가 불가능한 상황이 올 수도 있습니다. 그냥 DOWN되버리는 경우도 많죠.


하지만 스위치에서 STP가 기본적으로 enable되어 있으므로 강제적으로 루프상황을 만들지 않는 한 겪기 힘든일이긴 하죠.


루프는 L2/L3스위치 장비보다 종단 클라이언트들 간에 허브를 이용할 때 많이 발생하죠. 아마 필드에서 근무하시는 엔지니어 분들이라면 한두번쯤은 경험하셨으리라 생각합니다.





루프가 발생하는 경우는 여러가지 케이스가 있지만 위의 경우처럼 설명하는게 일반적입니다.


그림으로 보면 한번에 "아..루핑이네"라고 보이지만 실제 필드에서는 요렇게 간단 명료하게 보이지 않으니 주의하셔야 합니다.


또, 윗 그림처럼 스위치를 연결해버리면 이미 enable되어 있는 STP로 인해 지들끼리 알아서 계산을 해가지고 STP루트 스위치도 선출하고 RP, DP등 잡아서 처리를 하게 됩니다.


대부분 이렇게 자동으로 모든일이 처리되면 좋겠지만 그렇지 않은 순간이 있겠죠.


그래서 엔지니어도 필요한 것이구요;;


네트워크 엔지니어는 이런 STP의 구조와 동작방식에 대해서 제대로 이해하고 또 이를 이용해서 본인이 원하는대로 스패닝트리를 조정하여야 합니다.


이를 통해 많은 것을 얻을 수 있습니다. 부하분산도 있을 수 있고, 보안적인 면도 있고.. 뭐든 하기 나름이니깐요;;








어쨌든 제대로 STP가 동작하면 위 그림처럼 어느 하나의 포트는 Block상태가 됩니다.


그렇게 되면 더이상 브로드캐스트 스톰(쉽게 루핑이라고 하죠)은 일어나지 않고 정상저인 통신이 가능해 지는 겁니다.


위 그림에서 막힌 포트는 그냥 랜덤하게 하나를 고른것이지 이렇게 연결하면 꼭 저 포트가 막힌다~ 이런 말은 절대 아닙니다.


그럼 지금까지 간.단.하.게. STP란게 무엇인지 이야기 해봤습니다.



이 STP란 놈을 정복할려면 먼저 구조를 알아야 합니다.


STP는 스위치에서 BPDU라는 프레임을 전달하여 계산을 합니다.


이 BPDU라는 놈을 까서 자세히 들여다 보면





위와 같이 되어있습니다. 책에 나와있는 그대로 옮겨적었습니다. 총 35바이트라고 하네요.


파란색으로 음영처리된 부분이 기본적으로 꼭 아셔야 하는 부분이라 표시를 해봤습니다.


루트스위치나 RP, DP를 지정할 때 조정해야 하는 값들이거든요.


위 그림이 설정 BPDU이고, TCN BPDU라는 놈이 하나 더 있습니다.


TCN : topology change notification 말 그대로 토폴로지가 변하면 알려주는 BPDU입니다. 이 말은 토폴로지가 변화가 없다면 (인터페이스가 DOWN/UP이거나 새로운 Line이 연결되거나) 생성되지 않겠네요.





TCN BPDU는 이렇게 구성되어 있습니다. TCN은 프레임의 구조보다는 토폴로지 변화를 알리는 프레임이란 것을 기억하시면 될것 같네요.




지금까지 내용을 정리하면


STP는 중요한것이다.


STP는 브로드캐스트 스톰(루핑)을 막는 기술이다. 기본적으로 enable되어있다.


STP는 BPDU라는 프레임을 이용하여 동작한다. 이 BPDU는 설정 BPDU와 TCN BPDU 2가지 종류가 있다.


TCN BPDU는 토폴로지에 변화가 생겼을 때 이를 루트스위치에게 알리는 역할을 담당한다.


이 정도네요. 별 내용 없군요. -_-;;




그럼 위에 음영처리 된 루트 브릿지 ID, 경로값, 브릿지 ID, 포트 ID애 대해서 이야기 해보겠습니다.


브릿지 ID는 우선순위(priority)값과 MAC주소를 혼합하여 결정한다.


루트 부릿지 ID는 말 그대로 루트 스위치의 브릿지 ID 입니다.


priority값은 0 부터 65535까지 이며 기본값은 32768입니다. 중간값이죠.



경로값은 cost라고 보통 이야기하죠.


일반적으로 cost값은 인터페이스의 지원 속도에 따라 결정됩니다.


10 Mbps (이더넷) : 100

100 Mbps (패스트 이더넷) : 19

1 Gbps (기가비트 이더넷) : 4

10 Gbps (10기가 이더넷) : 2


SW1 ------ SW2  사이에 100Mbps로 연결되어 있다면 cost값은 19가 되는거죠.





포트 ID는 BPDU를 전송하는 스위치의 포트 우선수위와 포트번호로 구성된다. 기본값은 128.


이 포트ID를 가지고 Root port와 Blocked port를 변경 할 수도 있다.


위 이야기한 것들이 기본적으로 스패닝트리를 구성할 때 지정할 수 있는 루트 스위치, 루트포트, 지정포트, 블락포트들을 조정할 수 있는 값들이라 보시면 되겠습니다.






위 예시는 제가 일하는 사이트에서 show spanning-tree 명령어를 입력해서 나온 화면입니다.


1. Root ID : 루트 브릿지 ID를 나타냅니다. priority값과 cost값, port(루트스위치와 연결된 포트), 헬로타임 등이 보이네요.


2. Bridge ID : 브릿지 ID. 자신의 ID상태를 보여줍니다. 이렇게 봐도 이 스위치가 루트스위치가 아니란걸 알 수 있네요. priority값은 동일하지만 MAC address값이 다르니 (낮은게 우선입니다) 이렇게 계산되는게 브릿지 ID란걸 알아두시기 바랍니다.


3. 각 인터페이스별 포트의 상태를 나타냅니다. 대부분 지정포트 (Designated port)이고 Po10이 Root port네요. 이 스위치는 Po10 인터페이스를 통해 루트와 연결되어 있다는 걸 확인 할 수 있습니다. 포트상태에 대해서는 나중에 자세히 다루게됩니다.


4. status죠. 다 Forwarding 상태이네요. forwarding외에도 listening, learning, block등이 있습니다.


5. 경로값(cost)이네요. 인터페이스를 보시면 알겠지만 1Gbps 이더넷이기 때문에 cost가 4로 나오네요. Po10은 1Gbps라인 두개를 이더채널로 묶은건데 이렇게 하면 cost가 3이 되나보네요. 저도 처음 알았습니다 -_-;;


6. 포트 ID입니다. 앞에 128이 포트의 우선순위를 나타내며 "."뒤에 있는 숫자는 포트의 번호를 나타냅니다. STP계산시에는 이 우선순위가 중요한 역할을 하게됩니다.



이 정도가 STP의 기본 구조와 내용이 됩니다. 하지만 STP는 생각보다 어렵습니다. L2에서는 가장 어려운 부분이라고 개인적으로 생각이 듭니다.


앞으로는 STP동작 방식과 루트스위치 선출, 각 포트의 롤상태 지정 과정과 RSTP, MST에 대해서도 이야기 해보겠습니다.




댓글

  1. 안녕하세요. 한창 스패닝트리에 대해 공부하고 있는 사람입니다.
    하나 궁금한게 있어서 질문좀 드릴께요 ㅠㅠ
    cisco 제품을 사용해서 스위칭을 하여 통신을 구현하려고 하고있습니다.
    그런데 장치끼리 연결을 하면 스패닝 트리 루트 감지 로직으로 인해 스위칭 장비가 인식을 늦게 하네요.
    원인은 루프로 인해 새로운 연결을 구사하는것으로 찾아냈는데 이 새로운 연결을 지금보다 빠르게 되도록 하는 방법이 없을까해서 질문드립니다. cost값을 최대로 올리면 나아질까요?? 해결책이 있다면 답변해주시면 정말 감사하겠습니다!

    답글삭제
  2. cost값은 말씀하신 부분하고는 상관없어요. 스패닝트리에서 BLK포트를 계산할 때 사용하는 값이구요 포트가 느리게 올라오는건 정상잊니다만.. 러닝이나 리스닝 과정이있으니깐요.. 이를 해결하기위한게 portfast옵션입니다.

    답글삭제
  3. 아 감사합니다!!
    하나만 더 물어보고 싶은게 있는데요..
    portfast옵션만 바꾸면 포트를 빠르게 인식하게 할 수 있다고 하셨는데 vlan 이런거나 다른 것들은 설정할 필요가 없는건가요?
    아 그리고 rollover 케이블 말고 lan 케이블로 연결해서도 가능한지 궁금합니다!
    귀찮게 해서 죄송합니다 ㅠㅠ

    답글삭제
  4. portfast에대해서 다시 말씀을 드리면.. vlan등은 신경쓰지마시고 스위치간에 인터페이스가 연결되었을때 일어나는 과정을 생각해보시면 됩니다. 이미 STP가 enable되어있기때문에 리스닝-러닝-포워딩으로 포트상태가 변경되는데 이유는 루프를 막기위해서죠. 근데 portfast는 이 과정을 생략해주는것일뿐 브이랜이랑은 상관없어요. 그리거 랩을 돌리실땐 그냥 스트레이트로 연결하셔도 될것같습니다

    답글삭제
  5. 정말 감사합니다!!! 답변 내용을 참고해서 다시 한번 시도해봐야겠네요
    추가적으로 궁금한것도 나중에 물어봐도 될까요???

    답글삭제
  6. 네 그러세요~^^ 아는건 얼마든지 말씀드릴수있습니다. 다만 저도 모르는게 많아서..;;

    답글삭제
  7. 오 정말 portfast 설정을 하니 바로 인식이 가능해지네요!
    하이퍼터미널 접속한다음 enable 모드로 들어가서 spanning-tree portfast default 입력하고 연결을 해봤는데 바로 초록불이 들어오네요! ㅋㅋ
    조언 정말 감사합니다!!

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

ping 일반오류 (General failure)를 고쳐보자

Windows 10. 공유폴더 쉽게 삭제하기 (feat. CMD)

Piolink TiFront Switch password recovery (파이오링크 스위치 비밀번호 초기화)