스위치 장비 동작
- 스위치: 패킷을 동시에 여러 장비가 서로 간섭 없이 통신하도록 도와주는 장비 (네트워크에서 통신을 중재하는 장비)
- 효과
- 여러 단말이 한꺼번에 통신할 수 있어 통신하기 위해 기다리거나 충돌 때문에 대기하는 문제가 해결되고 네트워크 전체의 통신 효율성이 향상됨
- 허브는 모든 포트가 하나의 콜리전 도메인을 공유하지만, 스위치는 포트마다 콜리전 도메인이 분리됨
- 단, 브로드캐스트 도메인은 분리하지 못함 (스위치 전체가 하나의 브로드캐스트 도메인)
- 역할
- 누가 어느 위치에 있는지 파악하고 실제 통신이 시작되면 자신이 알고 있는 위치로 패킷을 정확히 전송하는 것
- MAC 주소와 단말이 위치하는 인터페이스 정보를 매핑한 MAC 주소 테이블을 갖고 있어야 가능함
- 동작 과정
- 플러딩 : 스위치가 허브와 같이 모든 포트로 패킷을 흘리는 동작 방식
- 패킷이 들어온 포트를 제외한 모든 포트로 전송함
- 플러딩이 일어나는 경우
- MAC 주소 테이블에 도착지 MAC 주소가 없는 경우 (Unknown Unicast)
- 브로드캐스트(FF:FF:FF:FF:FF:FF), 멀티캐스트 패킷인 경우
- 어드레스 러닝 : MAC 주소 테이블을 만들고 유지하는 과정
- 패킷의 출발지 MAC 주소와 패킷이 들어온 포트를 테이블에 기록함
- 도착지 MAC 주소가 아니라 출발지 MAC 주소로 학습한다는 점이 중요함
- 학습된 정보는 일정 시간(에이징 타임, 기본 300초) 동안 통신이 없으면 삭제됨
- 브로드캐스트·멀티캐스트 주소는 출발지로 사용되지 않으므로 학습되지 않음
- 포워딩/필터링 : 도착지 MAC 주소를 확인하고 자신이 가진 MAC 테이블과 비교해 맞는 정보가 있으면 매치되는 해당 포트로 패킷을 포워딩 함
- 이때 다른 포트로는 해당 패킷을 보내지 않으므로 이 동작을 필터링이라고 함
- 도착지가 패킷이 들어온 포트와 같은 포트에 있다면 패킷을 버림
- 예시 (A → B 통신)
- A가 B에게 패킷 전송 → 스위치는 출발지 A의 MAC과 포트 1을 학습
- 테이블에 B의 MAC이 없으므로 포트 1을 제외한 모든 포트로 플러딩
- B가 응답 → 스위치는 B의 MAC과 포트 2를 학습
- 이후 A ↔ B 통신은 포트 1, 2 사이에서만 포워딩 (나머지 포트는 필터링)
1
2
3
4
5
6
7
| MAC 주소 테이블
+-------------------+------+--------+
| MAC 주소 | 포트 | VLAN |
+-------------------+------+--------+
| AA:AA:AA:AA:AA:AA | 1 | 1 |
| BB:BB:BB:BB:BB:BB | 2 | 1 |
+-------------------+------+--------+
|
- 스위치의 패킷 전송 방식
- Store and Forward : 패킷 전체를 받은 후 오류(CRC)를 검사하고 전송. 안정적이지만 지연이 있음
- Cut-Through : 도착지 MAC 주소만 확인하고 바로 전송. 빠르지만 오류 패킷도 전달될 수 있음
- Fragment-Free : 앞 64바이트까지 확인 후 전송. 두 방식의 절충안 (충돌 패킷은 대부분 64바이트 이내에서 발견됨)
VLAN(Virtual Local Area Network)
- 물리적 배치와 상관없이 LAN을 논리적으로 분할, 구성하는 기술임
- 등장 배경
- 스위치는 브로드캐스트 도메인을 분리하지 못하므로 네트워크가 커질수록 불필요한 브로드캐스트가 증가함
- 부서별로 네트워크를 분리하려면 스위치를 따로 구매해야 했으나 VLAN을 사용하면 하나의 스위치로 분리 가능
- 효과
- 하나의 장비를 서로 다른 네트워크를 갖도록 논리적으로 분할한 것이므로 유니캐스트뿐만 아니라 브로드캐스트도 VLAN 간에 통신할 수 없음
- VLAN 간의 통신이 필요하다면 서로 다른 네트워크 간의 통신이므로 3계층 장비(라우터, L3 스위치)가 필요함
- 물리적 구성과 상관없이 네트워크를 분리할 수 있고 물리적으로 다른 층에 있는 단말이 하나의 VLAN을 사용해 동일한 네트워크로 묶을 수 있음
- 브로드캐스트 도메인이 작아지므로 불필요한 트래픽이 줄고, 네트워크가 분리되어 보안이 향상됨
- 종류
- 포트 기반 VLAN : 스위치를 논리적으로 분할해 사용하는 것이 목적인 VLAN
- 스위치의 포트마다 VLAN을 할당하고, 해당 포트에 연결된 단말은 그 VLAN에 속하게 됨
- 일반적으로 VLAN이라고 하면 포트 기반 VLAN을 말함
- 단말을 다른 포트로 옮기면 VLAN이 바뀌므로 설정을 다시 해야 함
- MAC 기반 VLAN : 스위치에 연결되는 단말의 MAC 주소를 기반으로 VLAN을 할당하는 기술
- 단말이 어느 포트에 연결되든 MAC 주소를 확인해 동일한 VLAN을 할당함
- 단말이 자리를 옮겨도 같은 네트워크를 유지할 수 있음
- MAC 주소 정보를 미리 등록해야 하므로 관리 부담이 있음
- VLAN 모드(Trunk/Access) 동작 방식
- 액세스(Access) 포트 : 하나의 VLAN에만 속하는 포트. 주로 단말(PC, 서버)이 연결됨
- 태그/트렁크(Trunk) 기능 : 하나의 포트에 여러 개의 VLAN을 함께 전송할 수 있게 해줌
- 주로 스위치와 스위치 간 연결에 사용됨
- VLAN마다 스위치 간 연결 포트를 따로 둘 필요 없이 하나의 포트로 여러 VLAN을 전송할 수 있으므로 포트 낭비 없이 네트워크를 더 유연하게 디자인 할 수 있음
- 패킷에 VLAN 정보를 담은 태그(IEEE 802.1Q)를 붙여 전송하고, 받는 스위치는 이 태그를 보고 어느 VLAN의 패킷인지 구분함
- 802.1Q 태그 : 이더넷 헤더의 출발지 MAC 주소 뒤에 4바이트로 추가됨
- VLAN ID는 12비트이므로 0, 4095를 제외한 1~4094 범위를 사용할 수 있음
- 네이티브 VLAN : 트렁크 포트에서 태그 없이 전송되는 VLAN (기본값 VLAN 1). 양쪽 스위치의 네이티브 VLAN이 일치해야 함
- MAC 테이블에서도 하나의 스위치에서 VLAN을 이용해 네트워크를 분리하면 VLAN 별로 MAC 주소 테이블이 존재하는 것처럼 동작함
1
2
| [PC-A VLAN10]--(Access)--[SW1]==(Trunk: VLAN10,20 태그)==[SW2]--(Access)--[PC-C VLAN10]
[PC-B VLAN20]--(Access)--+ +--(Access)--[PC-D VLAN20]
|
STP
- 네트워크 루프 : SPoF(Single Point of Failure, 단일 장애점)를 피하기 위해 스위치 두 대 이상으로 네트워크를 이중화하지만, 이렇게 디자인하면 경로에 루프가 생겨 패킷이 네트워크를 따라 계속 전송되므로 네트워크를 마비시킬 수 있음
- 루프(loop) : 네트워크에 연결된 모양이 고리처럼 되돌아오는 형태로 구성된 상황을 말함
- 이더넷 프레임에는 IP 헤더의 TTL 같은 필드가 없으므로 루프에 빠진 패킷은 스스로 사라지지 않음
브로드캐스트 스톰
- 루프 구조로 네트워크가 연결된 상태에서 단말이 브로드캐스트를 발생시키면 스위치는 이 패킷을 패킷이 유입된 포트를 제외한 모든 포트로 플러딩함
- 플러딩 된 패킷은 다른 스위치로도 보내지고 이 패킷을 받은 스위치는 패킷이 유입된 포트를 제외한 모든 포트로 다시 플러딩함
- 루프 구조 상태에서는 이 패킷이 계속 돌아가게 되고, 새로운 브로드캐스트가 발생할 때마다 누적되어 회선 대역폭을 모두 차지함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| [PC-A]
|
+-----+
| SW1 |
+-----+
/ \
/ \
+-----+ +-----+
| SW2 |-------| SW3 |
+-----+ +-----+
(1) PC-A가 브로드캐스트 전송
(2) SW1이 SW2, SW3로 플러딩
(3) SW2는 SW3로, SW3는 SW2로 플러딩
(4) SW2, SW3가 다시 SW1로 플러딩 → SW1은 또 플러딩 → 무한 반복
SW1 -> SW2 -> SW3 -> SW1 -> SW2 -> ... (시계 방향)
SW1 -> SW3 -> SW2 -> SW1 -> SW3 -> ... (반시계 방향)
→ 두 방향으로 패킷이 계속 돌고, 브로드캐스트가 생길 때마다 쌓여 대역폭을 가득 채움
|
- 영향
- 네트워크에 접속된 단말의 속도가 느려짐(많은 브로드캐스트를 처리해야 하므로 CPU 사용률이 높아짐)
- 네트워크 접속 속도가 느려짐(거의 통신 불가능 수준이 됨)
- 네트워크에 설치된 스위치에 모든 LED들이 동시에 빠른 속도로 깜빡임
스위치 MAC 러닝 중복 문제
- MAC 어드레스 플래핑 : 스위치 MAC 주소 테이블에서는 하나의 MAC 주소에 대해 하나의 포트만 학습할 수 있으므로 동일한 MAC 주소가 여러 포트에서 학습되면 MAC 테이블이 반복 갱신되어 정상적으로 동작하지 않음
- 원인
- 루프 구조에서는 유니캐스트 패킷도 양쪽 경로로 돌아 들어오므로, 같은 출발지 MAC 주소가 서로 다른 포트에서 번갈아 들어옴
1
2
3
4
5
6
7
8
9
10
| [PC-A] MAC: AA
|
+-----+ p1 +-----+
| SW1 |------------| SW3 |
+-----+ +-----+
| | p2
| |
+-----+ |
| SW2 |---------------+
+-----+
|
| 시점 | PC-A 패킷이 SW3에 들어온 경로 | SW3 MAC 테이블의 AA 포트 |
|---|
| t1 | SW1 → SW3 | p1 |
| t2 | SW1 → SW2 → SW3 | p2 (갱신) |
| t3 | 루프를 돌아 다시 SW1 → SW3 | p1 (갱신) |
| t4 | 다시 SW2를 거쳐 SW3 | p2 (갱신) |
- 같은 MAC 주소 AA의 포트가 p1 ↔ p2로 계속 바뀌는 현상이 MAC 어드레스 플래핑임
- 문제
- 스위치에서 학습된 주소의 포트가 계속 변경되므로 스위치가 정상적으로 동작하지 못하고 패킷을 플러딩함
- 해결방법
- 스위치 설정에 따라 경고 메시지를 관리자에게 알려주거나 수시로 일어나는 플래핑 현상을 학습하지 않도록 자동으로 조치함
- 루프 구간 중 하나의 포트만 셧다운 해도 루프를 예방할 수 있음
- 하지만 수동 개입으로는 장애 상황에 적절히 대응할 수 없으므로, 루프를 자동 감지해 포트를 차단하고 장애 때문에 우회로가 없을 때 차단된 포트를 스위치 스스로 다시 풀어주는 스패닝 트리 프로토콜이 개발됨
STP(Spanning Tree Protocol)
- 루프가 생기지 않도록 유지하는 것 (IEEE 802.1D)
- 루프를 확인하고 적절히 포트를 사용하지 못하게 만들어 루프를 예방하는 메커니즘
- 스위치는 BPDU(Bridge Protocol Data Unit)라는 프로토콜을 통해 스위치 간에 정보를 전달하고 이렇게 수집된 정보를 이용해 전체 네트워크 트리를 만들어 루프 구간을 확인함
- BPDU에는 스위치가 갖고 있는 ID와 같은 고유값이 들어가고 이런 정보들이 스위치 간에 서로 교환되면서 루프 파악이 가능해짐
- BPDU 종류
- Configuration BPDU : 루트 브리지가 2초마다 전송하는 구성 정보
- TCN(Topology Change Notification) BPDU : 토폴로지 변경을 루트 브리지에 알리는 메시지
- 브리지 ID(Bridge ID)
- 브리지 우선순위(Bridge Priority, 2바이트, 기본값 32768) + 스위치 MAC 주소(6바이트) 총 8바이트
- 값이 작을수록 우선순위가 높음
- 우선순위가 같으면 MAC 주소가 작은 스위치가 우선함
- 경로 비용(Path Cost)
- 링크 속도에 따라 정해지며, 속도가 빠를수록 비용이 낮음
- 예) 10Mbps: 100, 100Mbps: 19, 1Gbps: 4, 10Gbps: 2
- 포트 상태
- Disabled
- 포트가 고장나서 사용할 수 없거나 관리자가 셧다운한 상태
- Blocking
- 패킷 데이터를 차단한 상태로 상대방이 보내는 BPDU를 기다림
- 총 20초인 Max Age 기간 동안 상대방 스위치에서 BPDU를 받지 못했거나 후순위 BPDU를 받았을 때 포트는 리스닝 상태로 변경됨
- BPDU 기본 교환 주기(Hello Time)는 2초이고 10번의 BPDU를 기다림
- BPDU는 수신하지만 데이터 전송, MAC 러닝은 하지 않음
- Listening
- 리스닝 상태는 해당 포트가 전송 상태로 변경되는 것을 결정하고 준비하는 단계
- 이 상태부터는 자신의 BPDU 정보를 상대방에게 전송하기 시작함
- Forward Delay인 15초 동안 대기함
- 이 단계에서 루트 브리지, 루트 포트, 지정 포트가 결정되고 대체 경로가 되는 포트는 다시 블로킹 상태로 돌아감
- Learning
- 러닝 상태는 이미 해당 포트를 포워딩하기로 결정하고 실제로 패킷 포워딩이 일어날 때 스위치가 곧바로 동작하도록 MAC 주소를 러닝하는 단계임
- Forward Delay인 15초 동안 대기함
- Forwarding
- 패킷을 포워딩하는 단계. 정상적인 통신이 가능함.
| 상태 | BPDU 수신 | BPDU 송신 | MAC 러닝 | 데이터 전송 | 대기 시간 |
|---|
| Blocking | O | X | X | X | 20초 (Max Age) |
| Listening | O | O | X | X | 15초 (Forward Delay) |
| Learning | O | O | O | X | 15초 (Forward Delay) |
| Forwarding | O | O | O | O | - |
- 따라서 블로킹 포트가 포워딩 상태가 되기까지 30~50초가 걸림
- 링크가 직접 끊긴 경우 : Listening(15) + Learning(15) = 30초
- 간접 장애로 BPDU를 기다려야 하는 경우 : Max Age(20) + 30 = 50초
- STP 동작 방식
- 루트 브리지 선출 : 전체 네트워크에서 브리지 ID가 가장 낮은 스위치 하나를 루트 브리지로 선정함
- 처음에는 모든 스위치가 자신을 루트 브리지로 생각하고 BPDU를 보내다가, 더 낮은 브리지 ID를 가진 BPDU를 받으면 그 스위치를 루트 브리지로 인정함
- 루트 브리지의 모든 포트는 지정 포트(Designated Port)가 됨
- 루트 포트 선정 : 루트 브리지가 아닌 스위치마다 루트 브리지로 가는 경로가 가장 좋은 포트 하나를 루트 포트(Root Port)로 선정함
- 비교 순서 : 루트 브리지까지의 경로 비용 → 상대방 브리지 ID → 상대방 포트 ID
- 지정 포트 선정 : 각 세그먼트(링크)마다 루트 브리지로 가는 경로가 가장 좋은 포트 하나를 지정 포트로 선정함
- 대체 포트(블로킹) : 루트 포트도 지정 포트도 아닌 포트는 블로킹 상태가 되어 루프를 끊음
1
2
3
4
5
6
7
8
9
10
| [SW1] 루트 브리지 (Priority 4096)
D / \ D
/ \
R / \ R
[SW2]-------[SW3]
D B (Blocking)
R: 루트 포트, D: 지정 포트, B: 블로킹 포트
→ SW2-SW3 구간에서 SW3 쪽 포트가 블로킹되어 루프가 끊김
→ SW1-SW3 링크 장애 시 블로킹 포트가 포워딩으로 전환되어 우회 경로 확보
|
- 루트 브리지 위치가 중요함
- 자동 선출에 맡기면 성능이 낮은 스위치가 루트 브리지가 될 수 있으므로, 보통 코어 스위치의 우선순위를 낮게 설정해 수동으로 지정함
향상된 STP(RSTP, MST)
- STP는 루프를 예방하기 위해 같은 네트워크에 속한 모든 스위치까지 BPDU가 전달되는 시간을 고려함
- 블로킹 포트가 포워딩 상태로 변경될 때까지 30~50초가 소요됨
- 통신에 가장 많이 쓰이는 TCP 기반 애플리케이션이 네트워크가 끊겼을 때 30초를 기다리지 못하다보니 STP 기반 네트워크에 장애가 생기면 통신이 끊길 수 있음
- 스위치에 여러 개의 VLAN이 있으면 각 VLAN 별로 스패닝 트리 프로토콜을 계산하면서 부하가 발생하기도 함
- 기존 STP 토폴로지 변경 과정
1
2
3
4
| [말단 SW] --TCN--> [중간 SW] --TCN--> [루트 브리지]
|
[말단 SW] <--TC--- [중간 SW] <--TC--------+
→ 루트 브리지를 거쳐야 하므로 전파가 느림
|
RSTP(Rapid Spanning Tree Protocol)
| STP | RSTP |
|---|
| Disabled, Blocking, Listening | Discarding |
| Learning | Learning |
| Forwarding | Forwarding |
- 포트 역할 추가
- 루트 포트, 지정 포트 : STP와 동일
- 대체 포트(Alternate Port) : 루트 포트의 백업. 루트 포트에 장애가 나면 즉시 루트 포트로 전환됨
- 백업 포트(Backup Port) : 지정 포트의 백업. 같은 세그먼트에 연결된 다른 포트
- 에지 포트(Edge Port) : 단말이 연결된 포트. 루프가 생길 일이 없으므로 대기 없이 곧바로 포워딩 상태가 됨 (Cisco의 PortFast와 같은 개념)
- 빠른 수렴이 가능한 이유
- 모든 스위치가 2초마다 BPDU를 직접 생성하고, 3번(6초) 못 받으면 장애로 판단함 (STP는 Max Age 20초)
- 타이머에 의존하지 않고 이웃 스위치와 Proposal/Agreement 메시지를 주고받아 즉시 포워딩 여부를 합의함
- 토폴로지 변경을 감지한 스위치가 루트 브리지를 거치지 않고 직접 TC BPDU를 전파함
- 기존 STP와 호환됨 (STP 스위치와 연결되면 해당 포트는 STP 방식으로 동작)
1
2
3
4
5
| [루트 브리지]
| \
R | \ (Alternate)
[SW2] [SW2의 대체 포트]
→ 루트 포트 장애 시 대체 포트가 대기 시간 없이 바로 루트 포트로 전환
|
MST
1
2
3
| 인스턴스 1 : VLAN 1~100 → 루트 브리지 SW1 → 왼쪽 회선 사용
인스턴스 2 : VLAN 101~200 → 루트 브리지 SW2 → 오른쪽 회선 사용
→ 스패닝 트리 프로세스는 2개만 동작하면서 두 회선을 모두 활용
|
| 구분 | STP | PVST | MST |
|---|
| 스패닝 트리 수 | 1개 | VLAN 수만큼 | 인스턴스 수만큼 |
| 로드 셰어링 | 불가 | 가능 | 가능 |
| 장비 부하 | 낮음 | 높음 | 낮음 |
| 표준 | IEEE 802.1D | Cisco 독자 | IEEE 802.1s |