본문 바로가기

네트워크/깊이있는 네트워크 기록들

STP에 관해

STP는 스위치에서 루프를 방지하는 프로토콜로, 매우 중요한 역할을 하는 프로토콜이다.

 

스위치를 루프 구조(동그란 구조)로 연결하면 여러가지 문제점이 생길 수 있다.

우선 대역이 분할되지 않는 스위치 네트워크에서 브로드캐스트를 받았을 시 브로드캐스트가 반복해서 도는 브로드캐스트 스톰이 일어날 수 있음.

또한 모르는 목적지 주소를 받으면 flooding 하는 스위치 특성으로 해당 목적지는 여러곳에서 중복된 프레임을 받을 수 있음.

또한 스위치 입장에서도 서로 다른 인터페이스에서 같은 출발지 mac-addr 프레임을 받을 수 있음.

 

이처럼 위의 여러가지 이유들로 STP를 사용한다.

STP는 스위치끼리 서로 BPDU(Bridge Protocol Data Unit)을 사용해 구조를 파악하고 루프(스패닝) 구조를 트리구조로 변경 시켜주느 프로토콜이다. 스위치 간 BPDU라는 프레임을 2초마다 교환하며 이것을 기준으로 트리구조를 만들어 준다.

BPDU에서 여러 데이터 필드가 들어가있으며, 대표적으로 다음과 같은 필드가 존재한다.

- 루트 스위치 ID 

- 패스 코스트

- 이전 스위치 ID

- 이전 스위치의 포트 ID

 

 

STP의 트리 구조 계산 과정은 다음과 같다.

 

1. 기준 스위치를 잡는다.

 - 이때 기준 스위치를 루트 스위치라고하며, BPDU의 스위치 ID 필드를 기준으로 선정한다.

 - 스위치 ID는 우선순위(2Byte) + 스위치 MAC 주소이다.

 - 루트 스위치는 Configuration BPDU를 내려보내며, 이 Configuration BPDU를 기준으로 블로킹 포트를 정한다.

 - Configuration BPDU에는 항상 루트 스위치 ID 필드가 들어가 있다.

 

2. 루트포트를 정한다.

 - 루트 포트는 각 스위치에서 하나의 포트를 선정한다.

 - 루트 포트는 루트 스위치로 가는 Best Route의 역할을 한다.

 - 루트 스위치가 보내는 Configuration BPDU를 기준으로 선정한다.

 - Configuration BPDU에는 각각 패스코스트, 이전 스위치의 ID, 이전 스위치의 포트 ID 필드가 존재한다.

   -> 패스 코스트란 루트 스위치까지의 모든 경로 코스트의 합이다.

      (즉 루트 스위치와 얼마나 가깝냐 혹은 얼마나 빨리 도달할 수 있나)

   -> 만약 패스 코스트가 같다면 이전 스위치의 ID가 기준이 된다.

       이전 스위치의 ID는 루트 스위치로부터 내려오는 Configuration BPDU가 특정 스위치에 도착하기 바로 이전

       스위치 ID를 의미한다.

       스위치 ID 또한 우선순위 + 스위치 MAC 주소의 형태로 이루어져있다.

  -> 만약 이전 스위치 ID 또한 같은 경우에는 이전 스위치의 포트 ID를 기준으로 루트 포트를 선정한다.

      포트 ID는 포트 우선 순위 + 포트의 순서번호로 이루어져있다.

 

3. 데지그네이티드 포트를 선정한다.

  - 루트포트가 있는 링크를 사용하고 있는 링크라 하며, 루트 포트 맞은편은 모두 데지그네이티드 포트로 선정한다.

  - 루트포트가 없는 사용하지 않는 링크 중 스위치 ID가 높은쪽 포트는 블로킹(차단)된다.

  - 블로킹된 포트 맞은편은 모두 데지그네이티드 포트로 선정된다.

 

망 변화 시(링크 업/다운) STP는 다음과 같은 과정이 일어난다.

 

1. 링크 업/다운된 쪽 스위치에서  Topology Change Notification(TCN BPDU)를 루트 포트를 통해 보낸다.

2. TCP BPDU를 받은 루트 스위치는 잘 받았다는 표시로 Topolgy Change ACK(TCA) BPDU를 보낸다.

3. 이어서 루트 스위치는 Topolgy Change(TC) 비트를 1로 세팅한 후 Configuration BPDU를 보낸다.

4. 스위치는 Mac table의 수명을 15초로 변경한 후 다시 STP 선정 과정을 거친다.

 *MAC table의 수명은 평소에 5분이다. 그러나 망이 변경될 시 잘못된 포트로 계속해서 프레임을 보낼 수 있으므로 15초로 수명을 변경한 후 다시 Mac table을 만든다.

 

 

상태에 따라 다음 4가지 과정의 포트 상태가 지속된다.

1. 블로킹 상태 - 루프 구조를 막기 위해 차단되어있는 상태

2. 리스닝 상태 - BPDU를 체크하여 STP를 계산하는 상태

3. 러닝 상태    - STP 계산이 끝난 후 Mac table을 구성하는 상태

4. 포워딩 상태 - 데이터를 송/수신할 수 있는 상태

 

망이 변화가 일어날 시 위의 4가지 상태를 다시 진행한 후 포워딩 상태 혹은 블로킹 상태가 된다.

망 변화 후 블로킹 상태의 포트가  포워딩 상태로 변화하기까지 최대 50초의 시간이 걸린다.

네트워크에서 50초 동안 송/수신이 불가능하다는 것은 매우 치명적인 위험을 안고 있다.

따라서 현업에서는 보통 RSTP(Rapid STP)를 사용한다.

RSTP는 다음과 같은 과정으로 이루어 진다.

1. 기존과 같은 방식으로 루트 스위치를 선정한다.

2. 루트 스위치는 내가 이쪽 포트를 DP(Designated Port)로 선정하겠다는 의미로 Proposal BPDU를 보낸다.

3. 스위치들은 Proposal BPDU를 받은 포트를 제외한 나머지 포트를 모두 Blocking 상태로 둔다.(루프 발생 방지)

4. Proposal BPDU를 받은 포트쪽으로 다시 Agreement BPDU를 송신하며,

   해당 포트를 RP(Root Port)로 선정한다.

5. Agreement BPDU를 받은 루트 스위치는 루트가 발생하지 않는 것을 확신해 수신 포트를 DP로 선정한다.

 

 

STP로 인해 특정 링크를 사용하지 않는다는 것은 사실상 엄청난 대역폭의 낭비이다.

모든 링크를 활용하기 위해 Cisco는 PVST라는 기능을 제공한다.

이는 Per Vlan ST의 약자로 각 VLAN마다 STP 계산을 다른 방식으로 할 수 있다.

만일 Vlan이 1번부터 10번까지 있다면

1,3,5,7,9번인 홀수번 vlan은 스위치 A를 루트 스위치로 만들며,

2,4,6,8,10번인 짝수번 vlan은 스위치 B를 루트 스위치로 만드는 식으로 조정이 가능하다.(우선순위로 조정)

  ex) spanning-tree vlan 1 priority 1 -> 스위치 A에 해당 명령어를 입력시 우선 순위로 A가 루트 스위치로 선정된다.

 

그러나 Vlan마다 STP를 독립적으로 운영하는 것은 그만큼 BPDU의 양도 늘어난다는 뜻이다. 이럴때 사용하는 것이 MST(Multiple ST)이다. MST는 각 Vlan들을 그룹으로 묶고 STP를 그룹별로 계산하는 것이 가능하다.

즉, 1,3,5,7,9번인 홀수번 vlan을 10번 그룹으로 묶어서 스위치 A를 루트 스위치로 만들며,

2,4,6,,8,10번인 짝수번 vlan을 11번 그룹으로 묶어서 스위치 B를 루트 스위치로 만드는 것이 가능하다.

MST는 대역폭의 낭비를 줄이면서 BPDU의 크기도 줄여주는 기술이라고 할 수 있다.

ex)

spanning-tree 10 vlan 1,3,5,7,9 -> 홀수번을 10번 그룹으로 묶고

spanning-tree 10 priority 1 -> 10번 그룹의 우선순위를 1로 만들어준다.

'네트워크 > 깊이있는 네트워크 기록들' 카테고리의 다른 글

MPLS VPN  (0) 2019.05.03
CEF 스위칭에 대해서  (0) 2019.04.24
스위치/허브 구조적 차이  (0) 2019.04.14
TCP/UDP 알아보기  (0) 2019.04.14
L4 스위치/L7 스위치/멀티레이어 스위치  (0) 2019.04.14