Post

스위치 - 2계층 장비

스위치 - 2계층 장비

스위치 장비 동작

  • 스위치: 패킷을 동시에 여러 장비가 서로 간섭 없이 통신하도록 도와주는 장비 (네트워크에서 통신을 중재하는 장비)
    • 효과
      • 여러 단말이 한꺼번에 통신할 수 있어 통신하기 위해 기다리거나 충돌 때문에 대기하는 문제가 해결되고 네트워크 전체의 통신 효율성이 향상됨
      • 허브는 모든 포트가 하나의 콜리전 도메인을 공유하지만, 스위치는 포트마다 콜리전 도메인이 분리됨
      • 단, 브로드캐스트 도메인은 분리하지 못함 (스위치 전체가 하나의 브로드캐스트 도메인)
    • 역할
      • 누가 어느 위치에 있는지 파악하고 실제 통신이 시작되면 자신이 알고 있는 위치로 패킷을 정확히 전송하는 것
      • MAC 주소와 단말이 위치하는 인터페이스 정보를 매핑한 MAC 주소 테이블을 갖고 있어야 가능함
    • 동작 과정
      • 플러딩 : 스위치가 허브와 같이 모든 포트로 패킷을 흘리는 동작 방식
        • 패킷이 들어온 포트를 제외한 모든 포트로 전송함
        • 플러딩이 일어나는 경우
          • MAC 주소 테이블에 도착지 MAC 주소가 없는 경우 (Unknown Unicast)
          • 브로드캐스트(FF:FF:FF:FF:FF:FF), 멀티캐스트 패킷인 경우
      • 어드레스 러닝 : MAC 주소 테이블을 만들고 유지하는 과정
        • 패킷의 출발지 MAC 주소와 패킷이 들어온 포트를 테이블에 기록함
        • 도착지 MAC 주소가 아니라 출발지 MAC 주소로 학습한다는 점이 중요함
        • 학습된 정보는 일정 시간(에이징 타임, 기본 300초) 동안 통신이 없으면 삭제됨
        • 브로드캐스트·멀티캐스트 주소는 출발지로 사용되지 않으므로 학습되지 않음
      • 포워딩/필터링 : 도착지 MAC 주소를 확인하고 자신이 가진 MAC 테이블과 비교해 맞는 정보가 있으면 매치되는 해당 포트로 패킷을 포워딩 함
        • 이때 다른 포트로는 해당 패킷을 보내지 않으므로 이 동작을 필터링이라고 함
        • 도착지가 패킷이 들어온 포트와 같은 포트에 있다면 패킷을 버림
  • 예시 (A → B 통신)
    1. A가 B에게 패킷 전송 → 스위치는 출발지 A의 MAC과 포트 1을 학습
    2. 테이블에 B의 MAC이 없으므로 포트 1을 제외한 모든 포트로 플러딩
    3. B가 응답 → 스위치는 B의 MAC과 포트 2를 학습
    4. 이후 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, 서버)이 연결됨
      • 태그 없이(Untagged) 패킷을 주고받음
    • 태그/트렁크(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 포트
t1SW1 → SW3p1
t2SW1 → SW2 → SW3p2 (갱신)
t3루프를 돌아 다시 SW1 → SW3p1 (갱신)
t4다시 SW2를 거쳐 SW3p2 (갱신)
  • 같은 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 러닝데이터 전송대기 시간
BlockingOXXX20초 (Max Age)
ListeningOOXX15초 (Forward Delay)
LearningOOOX15초 (Forward Delay)
ForwardingOOOO-
  • 따라서 블로킹 포트가 포워딩 상태가 되기까지 30~50초가 걸림
    • 링크가 직접 끊긴 경우 : Listening(15) + Learning(15) = 30초
    • 간접 장애로 BPDU를 기다려야 하는 경우 : Max Age(20) + 30 = 50초
  • STP 동작 방식
    1. 루트 브리지 선출 : 전체 네트워크에서 브리지 ID가 가장 낮은 스위치 하나를 루트 브리지로 선정함
      • 처음에는 모든 스위치가 자신을 루트 브리지로 생각하고 BPDU를 보내다가, 더 낮은 브리지 ID를 가진 BPDU를 받으면 그 스위치를 루트 브리지로 인정함
      • 루트 브리지의 모든 포트는 지정 포트(Designated Port)가 됨
    2. 루트 포트 선정 : 루트 브리지가 아닌 스위치마다 루트 브리지로 가는 경로가 가장 좋은 포트 하나를 루트 포트(Root Port)로 선정함
      • 비교 순서 : 루트 브리지까지의 경로 비용 → 상대방 브리지 ID → 상대방 포트 ID
    3. 지정 포트 선정 : 각 세그먼트(링크)마다 루트 브리지로 가는 경로가 가장 좋은 포트 하나를 지정 포트로 선정함
    4. 대체 포트(블로킹) : 루트 포트도 지정 포트도 아닌 포트는 블로킹 상태가 되어 루프를 끊음
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)

  • 백업 경로를 활성화하는데 시간이 너무 오래 걸리는 문제를 해결하기 위해 개발됨 (IEEE 802.1w)
  • 기존 STP 에서는 토폴로지가 변경되면 말단 스위치에서 루트 브리지까지 변경 보고를 보내고 루트 브리지가 그에 대한 연산을 다시 완료하고 이후 변경된 토폴로지 정보를 말단 스위치까지 보내는 과정을 거침
  • RSTP에서는 토폴로지 변경이 일어난 스위치 자신이 모든 네트워크에 토폴로지 변경을 직접 전파할 수 있음
  • 다양한 BPDU 메시지, 대체 포트 개념, 토폴로지 변경 전달 방식의 변화로 일반 STP보다 빠른 시간 내에 토폴로지 변경을 감지, 복구할 수 있음
  • 수렴 시간이 수 초(보통 1~2초) 이내로 단축됨

  • 포트 상태 단순화 (5개 → 3개)
STPRSTP
Disabled, Blocking, ListeningDiscarding
LearningLearning
ForwardingForwarding
  • 포트 역할 추가
    • 루트 포트, 지정 포트 : 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

  • 기존 STP에서는 루프가 생기는 토폴로지에서 한 개의 포트와 회선만 활성화되므로 자원을 효율적으로 활용할 수 없음
  • VLAN마다 최적의 경로가 다를 수 있는데 포트 하나만 사용할 수 있다보니 멀리 돌아 통신해야 할 경우도 생김
  • 이 문제를 해결하기 위해 PVST(Per Vlan Spanning Tree)가 개발되었고 VLAN마다 다른 스패닝 트리 프로세스가 동작하므로 VLAN마다 별도의 경로와 트리를 만들 수 있게 됨
    • VLAN마다 루트 브리지를 다르게 지정해, VLAN 10은 왼쪽 회선, VLAN 20은 오른쪽 회선을 사용하는 식으로 로드 셰어링이 가능함
  • 하지만 PVST는 모든 VLAN마다 별도의 스패닝 트리를 유지해야 하므로 더 많은 부담이 됨
    • VLAN이 수백 개라면 스패닝 트리 프로세스도 수백 개가 돌아가며 BPDU도 VLAN마다 발생함
  • 따라서 MST(Multiple Spanning Tree, IEEE 802.1s)가 개발되었음

  • 여러개의 VLAN을 그룹으로 묶고 그 그룹마다 별도의 스패닝 트리가 동작함
  • 이 경우 PVST보다 훨씬 적은 스패닝트리 프로토콜 프로세스가 돌게 되고 PVST의 장점인 로드 셰어링 기능도 함께 사용 가능
  • RSTP를 기반으로 동작하므로 빠른 수렴도 함께 제공됨

  • 주요 개념
    • 인스턴스(Instance) : 여러 VLAN을 묶은 그룹. 인스턴스마다 하나의 스패닝 트리가 동작함
    • 리전(Region) : 동일한 MST 설정을 공유하는 스위치 그룹
      • 같은 리전에 속하려면 리전 이름, 리비전 번호, VLAN-인스턴스 매핑 정보가 모두 같아야 함
    • IST(Internal Spanning Tree, 인스턴스 0) : 리전 내부의 기본 스패닝 트리. 리전 간 통신과 BPDU 전송을 담당함
    • CST/CIST : 여러 리전을 하나의 스위치처럼 보고 리전 간에 구성되는 스패닝 트리
1
2
3
인스턴스 1 : VLAN 1~100   → 루트 브리지 SW1 → 왼쪽 회선 사용
인스턴스 2 : VLAN 101~200 → 루트 브리지 SW2 → 오른쪽 회선 사용
→ 스패닝 트리 프로세스는 2개만 동작하면서 두 회선을 모두 활용
구분STPPVSTMST
스패닝 트리 수1개VLAN 수만큼인스턴스 수만큼
로드 셰어링불가가능가능
장비 부하낮음높음낮음
표준IEEE 802.1DCisco 독자IEEE 802.1s
This post is licensed under CC BY 4.0 by the author.