2013년 11월 18일 월요일

STP (Spanning Tree Protocol)

Spanning Tree Protocol


- 스패닝 트리 프로토콜은 스위치 또는 브리지로 구성된 네트워크 환경에서 출발지에서 목적지 까지 경로가 복수개 이상 존재시 발생하는 루프 현상을 방지해주는 프로토콜이다.



다음과 같은 환경에서 PC A가 PC B와 통신을 하기 위해서 ARP Broadcast를 송신하게 된다.

스위치는 자신의 Mac address Table에 존재하지 않거나 Broadcast를 수신하게 되면 Flooding 하게 된다.





Broadcast를 수신한 스위치가 수신 후 또 송신하게 되고 이러한 현상이 무한히 반복되어 루프현상이 발생하게 된다.
이러한 현상으로 인하여 심각한 문제를 불러 일으킬 수 있다.
(스위치 다운 등등...)


! IP 패킷의 경우 루프 발생시 TTL(Time to live) 필드에 의해 무한 루프가 도는것을 방지 할 수 있지만 Ethernet 프레임의 경우 TTL 값과 같은 필드가 없으므로 무한 루프를 방지 할 수 없다.



============================================================


Spanning Tree Protocol을 적용시키면 그림과 같이 출발지에서 목적지 까지 하나의 경로만 살려두었다가 장애 발생시 Blocking 되어있는 포트를 살려서 다음과 같이 통신이 가능하게 한다.


< 장애 발생 전 >




< 장애 발생 후 >




802.1D Spanning Tree Protocol

>표준 STP
-> Root Switch 형성
-> 이중화된 연결
-> 최상의 경로 선택

STP에서 각 스위치들은 설정 BPDU (configuration BPDU) 라는 프레임을 주고 받으며 루프가 없는 경로를 구성하기 위해 다음과 같은 절차를 수행하게 된다.


1. Root Bridge 선출 
   > 실생활에서 여러명의 사람이 모여 이루어진 무언가에는 그 자리를 대표하는 사람이 항상 있기 마련이다. 만일 대표가 없다면 규칙이 위배되고 질서가 흐트러질 것이다.

이와 마찬가지로 STP에서는 기준이 될 스위치를 선출 하게 된다.

Root Bridge로 선출 되지 못한 Switch들은 Non Root bridge가 된다.

가장 낮은 Bridge ID 값을 가진 스위치
   1) 먼저 Bridge ID의 상위 2 Byte인 Priority 값을 비교해서 낮은 쪽이 우선 순위를 가지게 된다. 
       (Priority 값은 Default = 32768(0x8000) 이다.)
   2) Priority 값에서 결정나지 않을 경우 하위 6 Byte인 MAC Address 값이 낮은 쪽이 우선 순위를 가지게 된다.




그림에서는 모든 스위치가 Priority값이 같으므로 MAC address가 제일 낮은 
스위치 A가 Root bridge가 된다.



2. Root Port 지정
  > Root Bridge에 가장 빨리 갈 수 있는 Port , 즉 Root Bridge에 가장 가까운 Port
  > Root Bridge를 제외한 나머지 모든 스위치들은 무조건 하나씩 Root Port를 가져야 한다.

1) Root Bridge 까지 가장 낮은 Path Cost 값을 가진 포트가 RP가 된다.
2) Path Cost 값에서 결정나지 않으면 Bridge ID를 비교하여 낮은쪽 포트가 RP가 된다.
3) Bridge ID 에서도 결정나지 않으면 Port ID를 비교하여 낮은쪽 포트가 RP가 된다.







3. Designated Port 지정
 > 하나의 세그먼트당 무조건 하나의 Designated Port를 가져야 한다.

1) Root Bridge 까지 가장 낮은 Path Cost 값을 가진 포트가 DP가 된다.
2) Path Cost 값에서 결정나지 않으면 Bridge ID를 비교하여 낮은쪽 포트가 DP가 된다.
3) Bridge ID 에서도 결정나지 않으면 Port ID를 비교하여 낮은쪽 포트가 DP가 된다.

   !!! Root Bridge의 모든 포트는 DP가 된다. 





4. Blocking Port 지정 
> Root Port 와 Designated Port로 둘다 지정되지 못한 포트는 Blocking Port가 된다.




   
!!! 여기서 말하는 세그먼트란 다음과 같은 그림을 뜻한다.




스위치에서 분리되지 않은 장비간의 연결 링크를 세그먼트(Segment) 라고 한다.





Bridge ID

> Bridge & Switch 장비들이 통신할 때 서로를 확인하기 위해 하나씩 가지고 있는 번호.
(Switch도 이 ID를 사용하지만 Switch ID라 하지 않고 Bridge ID라 통일해서 부른다)

구성은 다음과 같이 8 Byte 로 구성되어 있다. 



> 상위 2 Byte인 Priority 값은 직접 지정해주지 않으면 디폴트로 32768 (16진수로 8000) 의 값을 가지게 된다.

> Priority 값은 0~65535 까지 지정할 수 있으며, 4096 (0x1000) 의 배수만 지정이 가능하다.

> Priority 값이 낮을수록 우선 순위를 가지게 된다.

> Priority 값에서 결정 나지 않을 경우 하위 6 Byte인 MAC Address 값이 낮은쪽이 우선 순위를 가지게 된다.





BPDU (Bridge Protocol data unit)
> BPDU에는 2가지 종류가 있다.


1) 설정 BPDU (cofiguration BPDU)

맨 처음 모든 Switch들이 BPDU를 전송 후, Root S/W가 선출이 되면 Root S/W로 선출된 
Switch만 설정 BPDU를 송신 할 수 있다.

Non Root Bridge들은 설정 BPDU를 수신만 가능하며 다른 Non root bridge로 중계만 가능하다. 





설정 BPDU는 길이가 총 35 Byte 이다.

1. 2 Byte = Protocol ID   //   항상 0
2. 1 Byte = Version   //   802.1D STP (0), RSTP (2), MSTP (3)
3. 1 Byte = BPDU Type   //   설정 BPDU (0x00), TCN BPDU (0x80)
4. 1 Byte = BPDU Flags   //   토폴로지 변화를 표시, 0=No 1=Yes
5. 8 Byte = Root bridge ID   //   Root bridge ID (Priority,MAC address)
6. 4 Byte = Root Path Cost   //   Root bridge 까지의 Cost 값
7. 8 Byte = Bridge Identifier   //   Root Bridge로 가는 경로상 직전 스위치의 Bridge ID
8. 2 Byte = Port ID
9. 
  1) Message Age : Root bridge 까지의 Switch 수
  2) Max Age : 구성이 변경되는 BPDU를 받았을때 상태를 변경하기 전 까지 현 상태를 
     유지하는 시간   
  3) Hello Time : BPDU 를 전송하는 주기
  4) Forward Delay : 포트의 Listening과 Learning 상태를 지속하는 시간 



2) TCN BPDU (Topology Change Notification BPDU)

TCN BPDU는 토폴로지의 변화를 Root S/W에게 보고할때 사용된다.
TCN BPDU는 변화가 생길시에만 전송한다.
(특정 링크 활성화, 다운 등등...)


1. 2 Byte = Protocol ID (항상 0)
2. 1 Byte = Version   //   802.1D STP (0), RSTP (2), MSTP (3)
3. 1 Byte = Type   //   TCN BPDU(0x80)






댓글 1개: