Cute Running Puppy

cs/[Network] 후니의 쉽게 쓴 시스코 네트워킹

[후니의 쉽게 쓴 시스코 네트워킹] PART 06. 스위치를 켜라! - 1

R.silver 2022. 12. 28. 20:26
반응형

section 02. 스패닝 트리로 가는 첫 번째 관문 2가지  

*스패닝 트리 알고리즘 (STP)

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

- 출발지로부터 목적지까지의 경로가 2개 이상 존재할 때 1개의 경로만을 남기고 나머지를 끊어두었다가 경로에 문제가 생겼을 때 다시 사용하는 방법 

 

브리지 ID

브리지/스위치들이 통신을 할 때 서로를 확인하기 위해 하나씩 가지고 있는 번호 

(스위치도 ID가 있지만 브리지 ID라고 부른다)

- 브리지 아이디는 16비트의 bridge priority와 48비트의 mac address로 이루어져 있다

- 여기서 사용되는 mac address는 스위치에 고정되어 있는 값으로 각 스위치의 고유 주소를 의미한다 

- 브리지 ID는 스패닝 트리 프로토콜을 수행할 때 중요하게 사용된다 

브리지 ID의 구조

Path Cost

한 스위치에서 다른 스위치로 가는 데 드는 비용 

브리지가 얼마나 가까이, 그리고 빠른 링크로 연결되어 있는지 알아보는 방법

- 1,000 Mbps를 두 장비 사이의 링크 대역폭으로 나눈 값 (IEEE 802.1D 기준)

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

- 속도가 빠르면 비용이 적게 든다 

- 기가비트와 ATM등이 나오면서 기존의 path cost로 값을 구하면 소수점이 등장한다는 문제가 생겼다  

  이를 해결하기 위해 Past Cost 표를 정의하여 사용하게 되었다

path cost

section 03. 스패닝 트리를 잘하려면 3가지만 기억하세요!

스패닝 트리의 3가지 기본 동작 

 

1. 네트워크당 하나의 루트 브리지(root bridge)를 갖는다

2. 루트 브리지가 아닌 나머지 모든 브리지(non root bridge)는 무조건 하나씩의 루트 포트(root port)를 갖는다

3. 세그먼트(segment)당 하나씩의 데지그네이티드 포트(designated port)를 갖는다

 

1. 네트워크당 하나의 루트 브리지를 갖는다 

*네트워크

라우터에 의해 나누어지는 브로드캐스트 도메인

 

*루트 브리지 

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

 

즉, 하나의 브로드캐스트 도메인에 하나씩의 루트 브리지가 있는 것 

 

2. 루트 브리지가 아닌 모든 브리지는 무조건 하나씩의 루프 포트를 갖는다

*루트 포트

루트 브리지에 가장 빨리 갈 수 있는 포트 (즉, 루트 브리지에 가장 가까운 포트)

 

루트 브리지가 아닌 브리지들은 루트 브리지 쪽으로 가장 가까이 있는 루트 포트를 하나씩 지정해야 한다 

 

3. 세그먼트당 하나씩의 지정포트를 갖는다

*세그먼트

브리지/스위치 간에 서로 연결된 링크

 

브리지/스위치가 서로 연결되어 있을 때 세그먼트에 반드시 하나의 포트는 지정 포트 (designated port)로 선출되어야 한다

 

=> 스패닝 트리 알고리즘은 위의 세 가지 규칙을 적용하여 어느 쪽 링크를 살리고, 끊을지를 결정하는 과정 

(루트 포트, 데지그네이티드 포트가 아닌 모든 포트를 막아버린다 -> 루트 포트, 데지그네이티드 포트를 선출하는 이유)

 

section 04. 누가 누가 더 센가? STP에서 힘 겨루기 

스패닝 트리 순서 정하기 규칙

 

1. 누가 더 작은 root BID를 가졌는가

2. 루트 브리지까지의 path cost 값은 누가 더 작은가

3. 누구의 BID가 더 낮은가

4. 누구의 포트 ID가 더 낮은가

*BPDU (bridge protocol data unit)

브리지/스위치가 스패닝 트리 정보를 주고받기 위해 사용하는 특수한 프레임 (우체부 역할)

- 실려 있는 값들 

  root BID: 루트 브리지의 BID

  root path cost: 루트 브리지까지 가는 경로 

  sender BID: 보내는 브리지의 BID

  port ID: 어떤 포트에서 보냈는지 알게하는 정보

  등등 

- 브리지/스위치가 부팅하면 각각의 포트로 BPDU를 매 2초마다 보내며 서로의 스패닝 트리 정보를 주고받는다 

- 브리지는 BPDU를 서로 주고 받으며 누가 포트 브리지이며 어떤 포트가 루트 포트가 될지, 어떤  포트가 데지그네이티드 포트가 될지 결정한다 

- 어떤 BPDU가 가장 좋을 지 결정할 대 스패닝 트리 순서 정하기의 4가지의 규칙을 사용한다 

 

section 05. 스위치에서 대장 브리지 (root bridge) 뽑기 

대장 브리지를 뽑는 조건: 무조건 낮은 BID를 갖는 브리지 

 

1. 브리지가 부팅이 되면 자신의 BID를 루트 브리지 BID로 설정해서 BPDU를 보낸다 

2. 상대가 보낸 루트 BID 값을 비교하여 더 낮은 BID를 갖는 브리지를 루트 브리지로 설정한다 

3. 새로운 브리지가 부팅되면 자신을 루트 브리지로 설정하여 BPDU를 보낸다 

4. 다른 브리지들이 보낸 루트 BID (이전에 설정한 값)을 비교하여 루트 브리지를 선정한다 

 

*만약 새롭게 부팅시킬 브리지를 반드시 루트 브리지로 설정하고 싶다면? 

새로운 브리지의 BID를 기존 루트 브리지 BID 보다 낮은 값으로 설정하면 된다 

-> 이때 사용하는 것이 Bridge Priority! 

 

section 06. 졸병 브리지 (non root bridge)의 루트 포트 선출기 

root 브리지 선출 이후 

모든 non root bridge 들은 반드시 한 개의 루트 포트 (root port)를 가져야 한다 

 

*루트 포트

루트 브리지에 가장 가까이 있는 포트 

- path cost가 가장 적게 드는 포트 

- 대역폭이 크면 path cost는 줄어든다 

 

path cost 가 작은 값으로 루트 포트를 설정하면 된다 

 

section 07. 스패닝 트리의 마지막 단계 데지그네이티드 포트 (Designated Port) 뽑기

가장 중요한 단계 

데지그네이티드 포트를 뽑아야 스패닝 트리에서 어떤 포트를 풀어주고 어떤 포트를 막을지 결정할 수 있다 

 

규칙 : 세그먼트 당 하나씩의 데지그네이티드 포트를 갖는다 

-> 브리지로 연결된 세그먼트당 한 개의 데지그네이티드 포트를 뽑아야 한다 

 

방법: 세그먼트 상에서 root path cost 를cost를 비교하여 더 작은 root path cost를 가진 포트가 데지그네이티드 포트가 된다 

 

루트 브리지의 모든 포트들은 언제나 데지그네이티드 포트로 선정된다 

(root path cost가 언제나 0이 되기 때문에)

만약 non root bridge 간의 root path cost를 비교했을 때 값이 동일하다면 

section 04에서 학습한 스패닝 트리 순서정하기 규칙을 적용하여 데지그네이티드 포트를 설정한다 (4가지 단계)

스패닝 트리

section 08. 스패닝 트리 프로토콜의 5가지 상태 변화

*스패닝 트리 만들기 요약 

1. 루트 브리지 뽑기

2. non root bridge에서 루트 포트 뽑기

3. 데지그네이티드 포트 뽑기

4. 나머지 포트를 non designated 포트로 지정하기 

 

포트의 5가지 상태

스패닝 트리 프로토콜을 구현하는 과정에서 모든 스위치나 브리지는 언제나 5가지 상태로 변한다 

 

  • Disalbed 
    • 포트가 고장나서 사용할 수 없거나 관리자가 일부러 shut down 시킨 상태
    • 데이터 전송 불가, mac address 학습 불가, BPDU 주고받기 불가
  • Blocking 
    • 스위치를 처음 켜거나 disabled 된 포트를 다시 살렸을 때 
    • 데이터 전송은 되지 않지만 BPDU만을 주고 받음 
    • 데이터 전송 불가, mac address 학습 불가, BPDU 주고받기 가능 
  • Listening
    • blocking 상태에 있던 스위치 포트가 루트 포트나 데지그네이티드 포트로 선정될 때 
    • 언제든 blocking 상태로 변환될 수 있다 (새로운 포트가 위의 값들으로 선정되었을 때)
    • 데이터 전송 불가, mac address 학습 불가, BPDU 주고 받기 가능
  • Learning 
    • listening 상태에 있던 스위치가 포워딩 딜레이 디폴트 시간인 15초 동안 상태를 유지할 때 
    • 맥 주소를 배워 맥 주소 테이블을 만든다 
    • 데이터 전송 불가, mac address 학습 가능 (테이블 생성), BPDU 주고 받기 가능
  • Forwarding 
    • learning 상태에서 포워딩 딜레이 디폴트 시간인 15초 동안 상태를 유지할 때 
    • 데이터 프레임을 주고 받는다 
    • 데이터 전송 가능, mac address 학습 가능 (테이블 생성), BPDU 주고받기 가능

 

이와 같은 5가지 상태 변화를 통해 스위치/브리지는 링크를 막고 열며 스패닝 트리를 만든다

포트의 상태 변화를 통해 경로를 열고 닫는다

 

 

 

 

 

 

 

 

 

section 09. 배운 거 써먹기 - 직접 한번 구성해 보자구요!

1. 루트 브리지 선출하기 

2. 루트 포트, 데지그네이티드 포트 선출

3. 루트 포트, 데지그네이티드 포트를 포워딩(forwarding)으로 만들기 

4. non designated 포트는 블로킹(blocking)으로 만들기 

 

블로킹으로 된 곳은 통신 불가능 (연결이 끊어짐)

루트 브리지가 어느 스위치가 되느냐에 따라 링크 구성이 달라지기에 네트워크 구성시 루트 브리지 선정에 유의해야 한다 

 

*네트워크 디자인 시 염두해야 할 점 

- 루트 브리지의 위치

- 링크의 속도 

이 두 가지의 영향으로 네트워크의 구성이 달라질 수 있다

 

section 10. 스패닝 트리에 변화가 생기던 날 

스패닝 트리는 사용하던 경로에 문제가 생기면 막았던 경로 중 하나를 열어둔다  

 

*Hello Time 

루트 브리지가 얼마 만에 한 번식 헬로 BPDU를 보내는지에 대한 시간 

디폴트 값은 2초 

 

*Max Age 

루트 브리지로부터 헬로 패킷을 기다리는 시간 

max age 동안 헬로 패킷을 받지 못하면 루트 브리지가 죽었다고 생각하여 새로운 스패닝 트리를 만든다 

스위치에서의 디폴트 값은 20초

 

*Forwarding Delay

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

디폴트 값은 15초

중요)

리스닝 -> 러닝(forwarding delay 초 후)

러닝 -> 포워딩 (forwarding delay 초 후)

=> 블로킹에서 포워딩으로 넘어가는 데 걸리는 시간은 forwarding dealy 시간 * 2

 

브리지에 문제가 생겼을 때 새로운 스패닝 트리를 만드는 방법 

1. 루트 브리지가 보내는 헬로 패킷을 받지 못함 

2. hello time 이 지나도 아직은 문제가 없음 

3. max age 가 지나도 연락이 없으면 해당 포트로 헬로 패킷 받는 것을 포기한다 

4. 다른 포트를 root 포트로 세팅한다 (블로킹 -> 리스닝 -> 러닝 -> 포워딩 : 총 forwarding delay * 2 초가 걸린다)

 

*다른 경로를 살리는 데 걸리는 시간 

20초 + 15초 + 15초 = 50초 

-> 생각보다 오래 걸려서 이를 개선할 많은 방법들이 존재한다

반응형