본문 바로가기

네트워크

스위칭 - VLAN (Virtual Local Area Network)

기초적인 부분들은 거의 다 다룬듯 하니 이제 자주 접하는 기술이나 프로토콜을 다뤄볼까 합니다.

이번에 다룰 VLAN은 L2 단에서 가장 많이 사용되는 기술이 아닐까 싶은데, 일반적으로 스위치나 라우터와 같은 장비에서 수행되다보니 개념적인 부분들을 제외하면 패킷 트레이서나 EVE, GNS3와 같은 시뮬레이터 에서 명령어를 입력해보는게 더 이해하기 쉬울거라 생각합니다.

또한 많이 사용되는 기술이다보니 파생되는 기술이나 프로토콜역시 많은편이므로 정확한 개념의 정리가 필요합니다.

 

 

1. VLAN 이란?

Virtual Local Area Network 를 번역해보면 가상 근거리 통신망 정도가 되겠는데, 여기서 LAN 이라는 것은 ARP의 영향을 받는 작은 네트워크죠. 뭔가 가상으로 이 LAN 을 어떻게 저떻게 하는 기술이라는걸 추측해볼 수 있겠습니다. 

 

ARP의 특징은 뭐였나요? ARP 테이블을 갱신하고 관리하기위해 브로드캐스트 패킷을 뿌린다는 거였습니다. 아래와 같은 네트워크를 생각해보겠습니다.

 

192.168.0.0/24 네트워크에서 각 PC들은 다른 PC들의 MAC 주소를 알아내기 위해서 ARP를 사용하죠. ARP Request는 192.168.0.255 로 브로드캐스팅 되겠고, 그러면 이 구성에서 각 PC의 MAC 주소를 갱신하기 위해 적어도3번의 ARP Request 가 발생할겁니다. 물론 거기에 응답하는 ARP Reply 도 있겠습니다.

 

이번엔 PC를 조금 더 추가시켜 보겠습니다.

 

11대의 PC가 있습니다. 당연히 11번의 브로드캐스팅과 응답이 발생하겠죠, 복잡해보이지만 아직까진 뭐 괜찮습니다. 이정도면 아주 작은 규모의 네트워크입니다. 하지만 PC가 100대라면 어떨까요? 아니, 1000대 이상의 규모라면 어떨까요? 

 

이 브로드캐스팅 패킷들이 넘쳐나서 네트워크에 영향을 주는 수준까지 도달하게 됩니다. 브로드캐스트라는 놈... 여러모로 문제가 많은데 안쓸수는 없고.. 

 

위 사진은 약 30초가량 짧게 캡쳐한 브로드캐스트 ARP 패킷들입니다. 20대 남짓한 규모의 정상적인 네트워크에서도 이정도인데, 네트워크 규모가 커질수록 기하급수적으로 늘어나는 브로드캐스트 패킷을 감당하기 어려울겁니다.

 

또다른 경우를 생각해보겠습니다. IPv4는 일반적으로 용도에 따라 서브넷팅하여 분리한 상태로 사용합니다. 그러는편이 ARP 브로드캐스트 패킷의 영향도 적게 받을 것이고, 네트워크 설계나 사후관리또한 편리하겠죠. 그러려면 아래 그림처럼 L3 스위치나 라우터를 추가로 구비하여 물리적으로 네트워크를 분리해줘야할겁니다.

 

 

그런데 L3 스위치나 라우터를 이용해서 LAN을 구분하자니 장비도 구매해야하고, 라우팅 또한 거쳐야하니 너무 번거롭습니다. 그래서 앞서 말했던 단점들을 L2 스위치에서 보완하기 위한 기술이 바로 VLAN입니다.

 

VLAN은 논리적으로 망을 분리해줍니다. VLAN을 사용하면 같은 IP 대역을 사용하더라도 L2 스위치 한대에서도 위 구성을 아래처럼 단순화할 수 있게 됩니다.

 

좀더 세부적으로 들여다보면 아래와 같습니다.

 

각 포트별로 VLAN을 할당하여 예시처럼 브로드캐스팅 도메인을 분리할 수 있게 됩니다. 이 구성이라면 VLAN이 다르므로 ARP 브로드캐스팅의 영향을 받지도 않고, 포트수만 넉넉하다면 사실상 여러 대의 스위치를 운용하는것과 같은 효과를 가집니다. 

 

또한 VLAN을 사용함으로써 아래와 같은 구성 역시 가능하게 되면서 물리적인 거리가 얼마나 되던 LAN으로 묶을 수 있게 되었습니다. LAN이 근거리 통신망이라는 뜻을 가지지만 이게 물리적으로 근거리에 있는 네트워크를 말하는 것이 아니라는것을 염두에 두셔야 합니다. LAN의 정의는 어디까지나 ARP Request 의 영향을 받는 네트워크 입니다.

 

VLAN은 이렇듯 굉장히 유용한 기술이고 자주 사용되는만큼 VLAN의 모드와 종류, 동작방식에 대해서는 정확한 이해를 필요로 합니다. 

 

 

2. VLAN 종류

Port Based VLAN - 물리적으로 관리되는 장비의 포트를 VLAN에 할당.
- 지배적으로 많이 사용되는 방식.
- Tagged / Untagged
MAC Address Based VLAN - MAC 주소로 VLAN을 할당.
- 모든 주소를 등록하고 관리할 필요가 있다.
IP Subnet Based VLAN - IP 네트워크로 VLAN 할당.
Protocol Based VLAN - 같은 프로토콜끼리 VLAN을 할당.
- 데이터 내용에 따라 다른 포워딩 정책을 적용할때 사용.

 

 

3. TAG

Port Based VLAN 방식에서는 이더넷 프레임에 TAG를 부착하여 VLAN을 구분하게 되는데 이 TAG는 스위치가 각 VLAN을 식별하기위해 붙이는 이름표와 같은 것입니다. 다만 모든 상황에서 이러한 Tagging이 수행되는것은 아니라는 점을 기억해 두셔야 합니다.

 

IEEE 802.1Q

아래에서 설명할 트렁킹 프로토콜의 대표적인 예시입니다. SMAC 과 EtherType 필드 사이에 4바이트의 VLAN 정보 필드를 추가합니다. 802.1Q Tag의 세부항목은 아래와 같습니다.

 

EtherType (TPID)
(16bits)
Priority (PCP)
(3bits)
CFI (DEI)
(1bit)
VLAN Number (VID)
(12bits)

1. 이더타입 (EtherType)

현재 프레임이 802.1Q 프레임이라는 것을 알립니다. 값이 항상 0x8100으로 고정됩니다.

 

2. 우선순위 (Priority / Priority Code Point)

우선순위를 표시합니다. 0~7 사이값을 가지며 값이 클수록 우선순위가 높습니다.

 

3. CFI (Drop Eligible Indecator)

PCP와 함께 또는 별개로 트래픽이 혼잡해질 때 제거되기 적합한 프레임을 가르킬때 사용됩니다.

 

4. VLAN 번호 (VID)

프레임 VLAN 번호를 표시합니다. 0x000, 0xFFF 값이 예비로 보존되고 212 = 4096 개의 VID가 존재합니다.

여기서 0번과 4095번은 System에서 예약되어있고, 1002~1005는 토큰링과 FDDI 용도로 사용됩니다. VLAN 1번은 Default VLAN으로 편집하거나 삭제가 불가능합니다.

 

 

따라서 사용 가능한 VLAN 번호는 아래와 같습니다.

Normal VLAN : 2~1001

Extended VLAN : 1006 ~ 4095

 

 

ISL (Inter-Switch Link)

Cisco 전용 Trunking 프로토콜입니다. ISL은 Extended VLAN을 지원하지 못하고 Native VLAN 또한 지원하지 않습니다. 현재에는 Cisco에서도 잘 사용되지 않고 802.1q로 대체되고 있습니다.

기존 이더넷 프레임 외곽에 VLAN 정보를 태깅하는 방식으로 앞에 26Byte, 뒤에 4Byte를 추가합니다.

ISL Header
(26Bytes)
Ethernet Frame ISL CRC
(4Bytes)

ISL 헤더의 세부 내용은 아래 Cisco 기술 노트를 참조하시면 됩니다.

 LINK  Cisco - ISL 기술 노트

 

 

NATIVE

VLAN 이라는 개념은 기본적으로는 스위치만 알고 있는 개념입니다. 하지만 네트워크에는 스위치 말고도 많은 장비들이 존재합니다. 아래 사진과 같은 구성에서 허브는 VLAN 정보가 tagging 된 프레임을 형식 오류라 판단하고 폐기합니다. 그러면 untagging 한 상태로 보내야 할텐데, 스위치가 untagging 된 프레임을 받으면 이 Native VLAN이라고 판단하고 사용한다는 뜻입니다.

또한 802.1Q Trunking에서는 Native VLAN을 지원하므로 VLAN을 할당하지 않은 프레임이 Trunk Port를 지날 때 기본적으로 이 Native VLAN을 붙여서 전송하게 됩니다. 즉 Native VLAN 이란 tagging 되지 않은 프레임을 기본적으로 Native VLAN 이라고 생각하겠다. 와 같은 의미입니다. 따라서 VLAN 정보가 tagging 되지 않은 프레임을 스위치는 구분할 수 없으니 Native VLAN은 단 하나만 지정해 줄 수 있습니다.

 

기본 Native VLAN 은 1번으로 할당되어 있으며 이는 보안상의 이유로 바꿔주는것이 좋습니다. 

 

 

4. VLAN Port Mode 종류

Access port mode

End Device와 직접 연결되는 포트에 주로 사용하게 됩니다. 

일반적으로 스위치에서 End Device와 연결되는 포트의 모드를 Access로 설정하고 VLAN 번호를 할당하게 되는데 이 경우에는 스위치가 포트만 보고 포워딩하기 때문에 프레임에 Tag를 제거합니다. 

 

Trunk mode

다수의 VLAN Traffic을 전달하거나, 특정 VLAN의 포워딩을 제한할 수 있습니다. 프레임에 VLAN 정보를 Tagging하기 때문에 위와 같은 구성처럼 L2 → L3 로 하나의 회선만이 존재할 경우 한 포트에 두개의 VLAN을 Access 할 수 없기 때문에 여러 VLAN 트래픽을 구분할 수 있게 VLAN 정보를 프레임에 tagging합니다.

 

장비간 연결된 포트에 트렁크를 설정하게 되며 Uplink 혹은 여러 VLAN 트래픽이 지나가야 하는 포트에 Trunk Mode를 주게 됩니다.

 

Dynamic mode

VLAN 포트 지정은 생각보다 번거롭습니다. 관리자가 직접 포트에 모드와 VLAN을 할당해야하는데, 사용되는 VLAN이 많거나 설정해야할 장비가 많을수록 작업량이 굉장히 많아집니다. 이러한 수고로움을 줄이기 위해 사용되는 모드입니다.

 

Dynamic mode 의 경우 Access Mode상태에서 포트의 Mode를 negotiation 하여 동적으로 결정하게 되는데 이때 DTP(Dynamic Trunking Protocol) 을 사용하여 negotiation 메시지를 전달하게 됩니다. 

 

DTP 협상 과정

모드 DTP 모드 설명
Static Access Mode - DTP를 전송하지 않음, 상대방이 보낸 DTP 무시
Trunk Mode - DTP를 먼저 전송하고 상대방이 보낸 DTP 무시
Dynamic Dynamic Auto - DTP를 먼저 전송하지 않음, 상대방에게 DTP를 받았을 경우 DTP 전송
Dynamic Desirable - DTP를 먼저 전송

 

 

5. 예제

다음과 같은 구성에서 모든 포트가 Access 모드일 때, 결과적으로 통신이 불가능한 예시는 몇번일까요?

 

출처 : https://cafe.naver.com/neteg/139184

1번은 모든 포트가 VLAN 10으로 Access되어있으니 당연히 통신이 될거구요, 얼핏 보기에는 2번과 3번이 VLAN이 다르므로 통신이 불가능할 것으로 보입니다. 하지만 앞서 배운 내용을 잘 떠올려 본다면 2번 역시 통신이 된다는 것을 깨달을 수 있습니다.

 

Access 모드의 경우에는 VLAN 정보가 tagging 되어 있지 않습니다. 포트만 보고 스위치가 포워딩합니다. 따라서 2번의 경우에도 우측의 스위치는 VLAN 20번으로 할당된 포트에서 패킷을 받았으므로 좌측 스위치에서 프레임을 VLAN 10으로 취급하던 말던 VLAN 20으로 취급합니다. 따라서 정상적인 통신이 가능하게됩니다.

 

3번의 경우에는 VLAN 20으로 프레임을 받았으니 VLAN 10으로는 포워딩하지 않겠죠. 통신이 불가합니다. VLAN이 다르다고 무조건 통신이 안되는 것으로 생각하시는 분들이 많은데, 이 예제로 tagging, untagging에 대한 이해를 확실히 하셔야합니다.

 

 

Command

VLAN은 다음과 같은 절차들을 거쳐서 할당하게 됩니다.

 

 

VLAN 생성

스위치에서는 기본적으로 VLAN 1로 모든 인터페이스가 할당되어 있습니다. 다른 VLAN들을 할당하기 위해서는 우선적으로 VLAN을 생성해야합니다.

Switch(config)# vlan [NUMBER]
Switch(config-vlan)# name [NAME]

 

VLAN 설정

생성한 VLAN의 인터페이스에서 필요한 설정들을 해줄 수 있습니다.

Switch(config)# interface vlan [NUMBER]
Switch(config-if)#			//vlan 인터페이스

 

VLAN 할당 및 모드설정

- Access Mode

Switch(config)# interface FastEthernet 0/1			//Access 모드로 사용할 포트 인터페이스
Switch(config-if)# switchport					//L3의 경우 해당 포트를 스위치포트로 사용
Switch(config-if)# switchport mode access			//스위치포트의 모드를 Access로 설정
Switch(config-if)# switchport access vlan [NUMBER]		//VLAN 할당

 

- Trunk Mode

Switch(config)# interface FastEthernet 0/1			//Trunk 모드로 사용할 포트 인터페이스
Switch(config-if)# switchport					//L3의 경우 해당 포트를 스위치포트로 사용
Switch(config-if)# switchport trunk encapsulation dot1q		//802.1Q 프로토콜 사용
Switch(config-if)# switchport mode trunk			//스위치포트의 모드를 Trunk로 설정
Switch(config-if)# switchport trunk allow vlan [NUMBER]		//Trunk 포트의 통신을 허용할 VLAN 설정
Switch(config-if)# trunk native vlan [NUMBER]			//Native VLAN 설정

 

- Dynamic Auto

Switch(config)# interface FastEthernet 0/1			//Dynamic 모드로 사용할 포트 인터페이스
Switch(config-if)# switchport					//L3의 경우 해당 포트를 스위치포트로 사용
Switch(config-if)# switchport mode dynamic auto			//포트의 모드를 Dynamic Auto 로 설정

 

- Dynamic Desirable

Switch(config)# interface FastEthernet 0/1			//Dynamic 모드로 사용할 포트 인터페이스
Switch(config-if)# switchport					//L3의 경우 해당 포트를 스위치포트로 사용
Switch(config-if)# switchport mode dynamic desirable		//포트의 모드를 Dynamic desirable 로 설정

 

VLAN 및 인터페이스 확인

Switch# show vlan brief
Switch# show interface vlan [ID, NAME]
Switch# show interface status

 

명령어와 관련된 부분들은 사용하시면서 자연스레 외우시는 편이 좋습니다. 명령어를 잘 몰라도 물음표를 입력하면 명령어들이 나열되니 패킷트레이서의 경우 VLAN Setting Practice Lab 들을 다운받으셔서 직접 구성해보시면 도움이 많이 됩니다.