삽질의 현장/- 네트워크

[Surro] :: Network 스위치

shovelman 2014. 1. 5. 00:38

스패닝 트리 프로토콜 (Spanning Tree Protocol)

 

- 스위치 or 브리지에서 발생하는 루핑을 막아주기 위한 프로토콜.

> 스위치나 브리지 구성에서 출발지로부터 목적지까지의 경로가 두 개 이상 존재할 때 한 개의 경로만을 남겨두고 나머지는 모두 끊어 두었다가 사용하던 경로에 문제가 발생하면 그때 끊어 두었던 경로를 하나씩 살린다.

- 브리지 ID(Bridge ID) : 브리지나 스위치들이 통신할 때 서로를 확인하기 위해 하나씩 가지고 있는 번호.

> Bridge Priority (2byte, 16bit) + MAC Address(6byte, 48bit) = 8byte

>> Bridge Priority : 디폴트 값 = 32768, 범위  = 0~ 65535

- Path Cost : 장비와 장비가 연결되어 있는 링크.

> 브리지가 얼마나 가까이, 그리고 빠른 링크로 연결되어 있는지 알아내기 위한 값.

> 링크 속도(대역폭)가 빠를수록 더 작은 값이 된다.

 

Bandwidth(대역폭) 

STP Cost(Path Cost) 

10Mbps 

100 

100Mbps 

19 

1Gbps 

 

- 기본 동작

> 네트워크당 하나의 루트 브리지(Root Bridge)를 갖는다.

>> 브로드캐스트 도메인에 하나씩의 루트 브리지가 있다.

>> 스패닝 트리 프로토콜을 수행할 때 기준이 되는 브리지(스위치)이다.

> 루트 브리지가 아닌 나머지 모든 브리지(Non Root Bridge)는 무조건 하나씩의 루트 포트(Root Port)를 갖는다.

>> 루트포트 : 루트 브리지에서 가장 빨리 갈 수 있는 포트. (루트 브리지에서 가장 가까운 포트)

> 세므먼트(Segment)당 하나씩의 데지그네이티드 포트(Designated Port)를 갖는다.

>> 세그먼트 : 브리지 or 스위치 간에 서로 연결된 링크.

>> 브리지 or 스위치가 서로 연결되어 있을 때 이 세그먼트에서는 반드시 한 포트는 Designated Port(지정포트?)로 선출 되어야 한다.

* 루트포트, 데지그네이티드 포트를 뽑는 목적은 어떤 포트를 살릴지 결정하기 위한 것.

> 루트포트, 데지그네이티드 포트가 아닌 나머지 모든 포트는 다 막아버린다.

 

- 순서 정하는 방법

> 브리지와 스위치는 스패닝 트리 정보를 주고받기 위해 BPDU(Bridge Protocol Data Unit)이라는 프레임을 사용한다.

>> BPDU = Root BID + Root Path Cost + Sender BID + Port ID

> 누가 더 작은 Root BID를 가졌는가?

>>ex. 스위치 A : BID = 32768. 1111. 1111. 1111

    ex. 스위치 B : BID = 32768. 2222. 2222. 2222

    ex. 스위치 C : BID = 32768. 3333. 3333. 3333

    Root Bridge = A (무조건 낮은 BID를 갖는 스위치가 Root Bridge가 된다.)

>> 스위치끼리 서로 BPDU를 주고 받으며 서열 정리.

* 특정 브리지를 Root Bridge로 하고 싶을 경우 Bridge Priority 필드를 낮춘다.

> 루트 브리지까지의 Path Cost 값은 누가 더 작은가?

>> 루트브리지간의 Path Cost값을 보고 가장 값이 낮은 포트를 루트포트로 선정한다.

>>> Non Root Bridge.

> 누구의 BID(Sender BID)가 더 낮은가?

>> 세그먼트 상에서 Root Path Cost를 서로 비교해서 더 작은 Root Path Cost를 가진 포트가 데지그네이티드 포트로 선출.

>>> 대부분 루트 브리지의 모든 포트(살아있는 엑티브 포트)들이 데지그네이티드 포트로 선정된다.

>>> 서로 연결된 두 포트의 Root Path Cost가 같다면, Root BID, Path Cost, Sender BID를 비교하여 결정.

> 누구의 포트 ID가 더 낮은가?

 

- 스패닝 프로토콜의 5가지 상태 변화 (이를 통해 스패닝 트리를 만들게 된다.) 

> Disable : 포트가 고장나서 사용할 수 없거나 네트워크 관리자가 포트를 일부러 Shut Down시켜 놓은 상태.

> Blocking : 스위치를 맨 처음 켜거나 Disable되어 있는 포트를 관리자가 다시 살렸을 때 그 포트는 Bloking 상태로 들어간다.

>> 데이터 전송 x, BPDU만 주고 받을 수 있다.

> Listening : 블로킹 상태에 있던 스위치 포트가 루트 포트나 데지그네이티드 포트로 선정되면 포트는 바로 리스닝 상태로 넘어간다. 리느싱 상태에 있던 포트도 네트워크에 새로운 스위치가 접속했거나 브리지나 스위치의 구성값들이 바뀌면 루트포트나 데지그네이티드 포트에서 Non Designated 포트(루트포트나 데지그네이티드 포트가 아닌 나머지 포트)로 상황이 변할 수도 있다.  

>Learning : 리스닝 상태에 있던 스위치 포트가 포워딩 딜레이(Fowarding Delay) 디폴트 시간인 15초동안 그 상태를 계속 유지하면(전쟁에서 15초 동안 버틴다면) 리스닝 상태는 러닝 상태로 넘어간다.

>> 맥 어드레스를 배워 맥 어드레스 테이블을 만든다.

>Fowarding : 스위치 포트가 러닝 상태에서 다른 상태로 넘어가지 않고(루트 포트나 데지그네이티드 포트에서 Non Designated 포트로 바뀌지 않는 다는 뜻) 다시 포워딩 딜레이 디포트 시간인 15초 동안 그 상태를 계속 유지하면 러닝 상태에서 포워딩 상태로 넘어가게 된다. 포워딩 상태가 되어야 스위치 포트는 드디어 데이터 프레임을 주고받을 수 있게 된다.

>> 블로킹 상태에 있던 포트가 리스닝과 러닝을 거쳐 포워딩 상태로 오려면 디폴트 포워딩 딜레마인 15초가 두번 지난 30초가 소요된다.

 

- 용어

> Hello Time : 루트브리지가 얼마만에 한 번씩 헬로BPDU를 보내는지에 대한 시간.

>> 루트브리지는 자신에게 연결된 브리지들에게 헬로 BPDU를 헬로타임마다 한 번씩 보내게 된다.

>>> 디폴트 타임= 2초

> Max Age : 브리지들이 루트 브리지로부터 헬로페킷을 받지 못하면 맥스 에이지 시간동안 기다린다음 스패닝 트리 구조 변경을 시작한다.

>> 루트 브리지로부터 얼마 동안 헬로패킷을 받지 못했을 때 루트 브리지가 죽었다고 생각하고 새로운 스패닝 트리를 만들기 시작하는것에 대한 시간.

> Fowarding Delay : 브리지 포트가 블로킹 상태에서 포워딩 상태로 넘어갈 때까지 걸리는 시간.

>> 블로킹 포트에서 리스닝 상태로 넘어간 포트는 포워딩 딜레이 시간 동안 기다린 다음 러닝 상태로 넘어가고, 러닝 상태에서 다시 포워딩 딜레이 시간 동안 기다린 다음 포워딩 상태로 넘어가기 때문에 사실 블로킹서 포워딩으로 넘어가는데 걸리는 시간은 포워딩 딜레이 시간의 두 배가 된다.

- 스패닝 트리 재편성

> Non Root Bridge들이 지정된 시간 동안 Hello Packet을 받지 못한다면 문제가 발생했다고 판단하고 스패닝 재편성 모드로 들어간다.

> 맥스 에이지 시간이 지날 때 까지 아무 일도 일어나지 않는다.( 디폴트 = 20초)

> 시간이 지나도 들어 오지 않는 것을 판단 후 다른 포트로 Hello Packet을 받아 들이고 그 받아들인 포트를 루트 포트로 셋팅한다.

>> 루트포트로 셋팅이 되어도 디폴트 포워딩 딜레이 시간 + 러닝 상태 (15 + 15 = 30초)를 기다린 후 데이터 전송이 가능한 포워딩 상태로 넘어간다.

>> 기존 루트 포트로 포워딩 상태였던(응답 받지 않는 포트)는 블로킹 상태가 된다.

 

 

 

참고 : 후니의 쉽게쓴 시스코 네트워킹

'삽질의 현장 > - 네트워크' 카테고리의 다른 글

[Surro] :: Network 라우터  (0) 2014.01.08
[Surro] :: Network 스위치(2)  (0) 2014.01.07
[Surro] :: 네트워킹 basic (3)  (0) 2014.01.04
[Surro] :: 네트워킹 basic (2)  (0) 2014.01.03
[Surro] :: 네트워킹 basic (1)  (0) 2014.01.03