본문 바로가기

네트워크

[네트워크] 29. VLAN, 트렁킹, VTP

이 게시물은 <킹 오브 네트워킹 (피터전)>을 공부한 내용을 바탕으로 작성됨.

 


 

VLAN (Virtual LAN)

 

VLAN의 궁극적인 목적은 스위치에 접속된 장비들의 성능 향상 및 보안성 증대이다. 다음과 같은 네트워크가 있다고 생각해보자.

 

 

PC나 서버 그리고 라우터 같은 통신 장비들도 ARP를 사용하는데, 바로 직전 게시글에서 배운대로 ARP는 Broadcast 트래픽을 사용한다. 위 네트워크에서 PC1이 PC2의 MAC address를 알아내기 위하여 ARP request를 통해 Broadcast 프레임을 전송하면 SW는 이것을 모든 port로 뿌리게 되고, 관련도 없는 PC이 해당 프레임을 수신하게 되어 트래픽 낭비가 발생한다.

 

스위치에 접속된 장비들이 많을수록 Broadcast를 더 많이 뿌리게 되어 이를 처리하기 위해 CPU 낭비는 더 더 심해진다. 

 

 

 

 

 

 

만약 이처럼 PC1, PC2를 하나의 VLAN으로 묶어주고 PC3을 또 다른 VLAN으로 설정할 수 있다면 Transparent Bridging에 의해 동일한 VLAN에 소속된 port로만 Broadcast가 Flooding된다. 즉, PC3이 쓸데없는 Broadcast를 받지 않아도 된다. 이처럼 한 스위치에 연결된 장비들의 Broadcast domain을 분할해주는 기술을 VLAN이라고 한다.

 

 

 

 

VLAN과 라우터가 헷갈린다.

VLAN은 하나의 물리적인 스위치 내에서 여러 개의 논리적인 네트워크를 만드는 것이다. 그리고 라우터는 그렇게 나뉘어진 네트워크 간 통신을 가능하게 하는 장비이다.

 

VLAN은 네트워크 분할에 초점을 두며, 라우터는 이미 분할된 네트워크 가나 통신에 초점을 둔다.

 

 


 

VLAN 구성하기

 

 

위 같은 네트워크를 설정해보자.

 

 

SW1#show cdp neighbors
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
                  S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone
Device ID    Local Intrfce   Holdtme    Capability   Platform    Port ID
R1           Fas 0/1          158            R       C2900       Gig 0/0
R2           Fas 0/2          127            R       C2900       Gig 0/0
R3           Fas 0/3          152            R       C2900       Gig 0/0

 

 

라우터 interface 설정해주는 과정은 생략했다. 그냥 interface에 IP만 할당해주었다. 그 후 Switch에서 CDP를 출력해보면 위처럼 세 라우터가 잘 연결되어 있는 것을 확인할 수 있다.

 

 

 

 

SW1#show vlan brief

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa0/1, Fa0/2, Fa0/3, Fa0/4
                                                Fa0/5, Fa0/6, Fa0/7, Fa0/8
                                                Fa0/9, Fa0/10, Fa0/11, Fa0/12
                                                Fa0/13, Fa0/14, Fa0/15, Fa0/16
                                                Fa0/17, Fa0/18, Fa0/19, Fa0/20
                                                Fa0/21, Fa0/22, Fa0/23, Fa0/24
                                                Gig0/1, Gig0/2
1002 fddi-default                     active    
1003 token-ring-default               active    
1004 fddinet-default                  active    
1005 trnet-default                    active    
SW1#

 

 

Switch에 show vlan brief 명령어를 입력하면 해당 switch에 연결된 port들이 어떤 VLAN에 속하는지 보여준다. 아직까지는 아무 설정도 해주지 않았으므로 모든 interface가 VLAN1에 속해있다.

 

또한 VLAN은 number (ID)로 구분한다. VLAN1과 VLAN2는 서로 다른 VLAN인 것이다. 사용 가능한 VLAN 범위는 1~4094이며 1~1005 범위의 VLAN을 Normal VLAN이라고 부른다. 위 출력 결과에서도 알 수 있듯이 1002~1005는 토큰링, FDDI 프로토콜을 위해 사용되므로 VLAN에서는 사용하지 않는 번호이다.

 

따라서 이더넷에서 사용할 수 있는 normal VLAN 번호는 1~1001이다. 1006~4094 범위의 VLAN은 extended VLAN이라고 한다.

 

 

 

 

 

 

이제 Switch에 VLAN 설정을 해보자.

 

1 SW1(config)#vlan 10
2 SW1(config-vlan)#name ADMIN
3 SW1(config-vlan)#exit
4 SW1(config)#vlan 20
5 SW1(config-vlan)#name SALES
6 SW1(config-vlan)#exit

 

  1. VLAN 10을 만든다.
  2. VLAN 10의 이름을 ADMIN으로 지정한다. 이름을 지정하는 이유는 나중에 알아보기 편하게 하기 위함이다. 설정 안해주면 VLAN0010으로 저장된다.
  3. 빠져나온다.
  4. VLAN 20을 만든다.
  5. 이번엔 이름을 SALES로 지정했다.

 

 

 

1 SW1(config)#interface range f0/1-2
2 SW1(config-if-range)#switchport mode access
3 SW1(config-if-range)#switchport access vlan 10


4 SW1(config)#interface f0/3
5 SW1(config-if)#switchport mode access
6 SW1(config-if)#switchport access vlan 20

 

 

설정한 VLAN 10, 20을 interface에 할당해보자. 

 

  1. F 0/1, F 0/2 둘다 VLAN 10에 설정할 것이므로, range를 통해 한 번에 설정해주는 모드로 들어간다. 만약 interface 번호가 연속되어있지 않은 경우에는 interface range f0/5-6, f0/9 처럼 설정할 수 있다.
  2. port의 mode를 access로 설정한다. Access port는 하나의 VLAN에만 소속되는 port인데, 이렇게 직접 지정해주지 않으면 뒤에서 배울 DTP 프로토콜이 동작하여 인접한 장비와 협상을 거친 후 port의 mode가 결정된다. DTP 프로토콜이 동작하여 자동으로 port의 mode를 설정하는 것을 Dynamic DTP port라고 하는데, 이 경우 보안상 취약하고 더불어 많은 스위치 설정 명령어들이 Static DTP port 에서만 동작하므로 가능하면 이처럼 mode를 access로 직접 설정하는 Static 방식을 사용하는 것이 좋다.
  3. 해당 port의 VLAN 번호를 지정한다.

 

 

 

 

SW1#show vlan brief

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa0/4, Fa0/5, Fa0/6, Fa0/7
                                                Fa0/8, Fa0/9, Fa0/10, Fa0/11
                                                Fa0/12, Fa0/13, Fa0/14, Fa0/15
                                                Fa0/16, Fa0/17, Fa0/18, Fa0/19
                                                Fa0/20, Fa0/21, Fa0/22, Fa0/23
                                                Fa0/24, Gig0/1, Gig0/2
10   ADMIN                            active    Fa0/1, Fa0/2
20   SALES                            active    Fa0/3
1002 fddi-default                     active    
1003 token-ring-default               active    
1004 fddinet-default                  active    
1005 trnet-default                    active

 

 

설정 후 show vlan brief를 수행하면 VLAN 10 (ADMIN)에 Fa0/1, Fa0/2가, 그리고 VLAN 20 (SALES)에 Fa0/3가 설정되어있는 것을 확인할 수 있다.

 

 

이제 R3의 IP 주소를 1.1.10.3/24로 변경하여 R1,2,3이 서로 같은 Subnet에 존재하게 하여도 R1,2와 R3의 VLAN이 다르므로 R1,2와 R3 간 통신이 불가능하다. 맨 처음 통신이 이루어질 때 MAC address를 알아내기 위해 사용하는 ARP가 사용하는 Broadcast 프레임이 서로 다른 VLAN 사이에 전송되지 못하기 때문이다.

 

➜ R1,2와 R3의 Broadcast domain이 분리되었다.

 

 

 

 

 

 

 

VLAN 간의 라우팅

 

서로 다른 VLAN은 서로 다른 Network이다. 하나의 큰 Network를 가상으로 여러 개 찢어놓은 형태라고 생각하면 쉽다. 따라서 서로 다른 VLAN 간의 통신이 필요한 경우에는 Network 간 통신을 위해 사용되는 바로 그 장비 '라우터'를 사용한다.

 

 

 

 

여기서는 VLAN 10, VLAN 20에 속한 장비들 간 통신을 수행하기 위해 라우터 R4를 스위치 위에 추가했다. R4의 하나의 물리적 interface를 논리적으로 분할하여 각각 VLAN 10, VLAN 20에 할당한다. 이처럼 하나의 물리적 interface를 논리적으로 분할한 후 여러 개의 VLAN에 할당하는 기법을 trunking 트렁킹이라고 한다. 

 

이 말만으로는 이해가 잘 안될 수 있는데, R4-SW1를 연결한 회선이 물리적으로는 하나지만, 실제 동작은 VLAN10, VLAN20에 해당하는 데이터를 철저히 분리하며 데이터를 전송한다. 이 기법을 트렁킹이라고 하며, 하나의 물리적 회선을 여러 개의 논리적 회선으로 분할한다.

 

또한, 논리적으로 분할된 각 interface들을 sub-interface라고 한다.

 

 

 

R4(config)#no ip domain-lookup
R4(config)#enable secret cisco
R4(config)#line console 0
R4(config-line)#logg sync
R4(config-line)#exec-t 0
R4(config-line)#line vty 0 4
R4(config-line)#password cisco
R4(config-line)#exit

R4(config)#interface GigabitEthernet 0/0
1 R4(config-if)#no shut

2 R4(config)#interface GigabitEthernet 0/0.10
3 R4(config-subif)#encapsulation dot1Q 10
4 R4(config-subif)#ip address 1.1.10.254 255.255.255.0
  R4(config-subif)#exit

5 R4(config)#interface GigabitEthernet 0/0.20
6 R4(config-subif)#encapsulation dot1Q 20
7 R4(config-subif)#ip address 1.1.20.254 255.255.255.0
  R4(config-subif)#exit

 

 

위는 R4에 존재하는 하나의 interface (Giga 0/0)을 논리적으로 두 개로 분할하는 과정을 나타낸다. 

 

 

  1. 주 interface에 no shut을 쳐서 활성화 해준다.
  2. Sub-interface를 만든다. 주 interface인 GigabitEthernet 0/0뒤에 . 찍고 적당한 번호를 입력해주면 된다. 0~42억 사이의 번호 아무거나 입력해도 되지만, 관리하기 쉬운 번호로 입력해주자.
  3. encapsulation dot1Q 명령어 다음 VLAN의 번호였던 10을 입력한다.
  4. VLAN 10에 소속된 host들이 Gateway 주소로 사용할 IP 주소를 하나 할당해준다. 이제 VLAN 10에 속한 R1, R2는 외부와 연결될 때 이 Gateway 주소를 통해 밖으로 나가게 된다.
  5. 6. 7.은 위와 마찬가지

 

 

 

 

 

 

이제 R4와 연결되는 SW1의 F 0/4 interface를 Trunk로 지정해본다.

 

 

SW1(config)#interface fastEthernet 0/4
SW1(config-if)#switchport mode trunk

 

 

책에서는 위 두 명령어 중간에 switchport trunk encapsulation dot1Q를 넣어 트렁킹 방식을 지정하였는데, 난 이 명령어가 수행되지 않아서 일단 생략했다. (2901 라우터)

 

 

 

 

R1(config)#ip route 0.0.0.0 0.0.0.0 1.1.10.254
R2(config)#ip route 0.0.0.0 0.0.0.0 1.1.10.254
R3(config)#ip route 0.0.0.0 0.0.0.0 1.1.20.254

 

 

다음으로 R1, R2, R3에 Gateway 주소를 지정해주었다. Gateway는 서로 다른 두 network를 연결해줄 뿐만 아니라, Default route로써의 역할도 수행한다. 즉, 상세한 경로를 모르는 경우 데이터를 전부 다 Gateway로 전송하게 하는 역할을 하는 것이다. Gateway까지 설정해주고 나면 서로 다른 VLAN간 통신이 가능해진다.

 

 

 

 

R1#ping 1.1.20.3

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.20.3, timeout is 2 seconds:
!!!!!

 

 

R1➜R3 방향으로 ping을 때려봤다. 둘이 서로 다른 VLAN에 존재하지만 R4의 sub-interface로 잘 엮어줬기 때문에 통신이 가능해졌다.

 

 

 

 

 

VLAN간 통신은 다음 절차를 거쳐 수행된다.

 

  1. R1에서 R3에 ping을 때리는 경우, R3의 MAC address를 알지 못하기 때문에 ARP를 수행해야 한다. 이때 R3은 R1과 같은 subnet에 존재하지 않으므로 ARP 규칙에 따라 R1은 Gateway 1.1.10.254 (R4)의 MAC address를 request한다. (ARP 수행 시 출발지가 목적지와 다른 네트워크에 있다면, ARP destination은 목적지가 아닌, 목적지로 향하는 gateway로 설정한다.)
  2. ARP request를 받은 Switch는 그것을 동일한 VLAN에 전부 Flooding한다. 이때 R4는 VLAN 10, VLAN 20에 전부 소속되어 있으므로 ARP request는 R2, R4에게 전송된다.
  3. ARP request에 목적지 주소가 Gateway (R4)로 설정되어있으므로 R4는 이에 response를 보낸다.
  4. R1은 R4에서 온 response를 수신하고 R4의 MAC address를 알게 된다.
  5. 이제 R1은 목적지 IP주소에 R3의 IP를 넣고, 목적지 MAC address에 Gateway의 MAC을 넣은 후 Ping request를 R4에 전달한다.
  6. R4는 이 패킷의 목적지 MAC address가 자신으로 되어있으므로 이를 수신하고, 패킷 앞에 붙어있는 L2 헤더를 제거한 후 L3 헤더로 교체한다. L3에서는 IP를 사용하므로, L3 헤더를 장착한 이후로는 목적지 IP address를 확인할 수 있다. 따라서 R4는 이 패킷의 목적지 IP 주소가 R3이라는 것을 알게 된다.
  7. 이제 R4는 출발지 MAC address에 자신을 입력한 후, R3의 MAC address를 알기 위하여 VLAN 20에 ARP request를 전송한다.
  8. VLAN 20에 소속된 F 0/3 port를 통해 R3이 해당 ARP request 패킷을 수신한다.
  9. R3은 response를 통하여 자신의 MAC address를 R4에 알려준다.
  10. R4는 R3의 MAC address를 수신한다.
  11. R4는 출발지 MAC - R4 MAC / 출발지 IP - R1 IP / 목적지 MAC - R3 MAC / 목적지 IP - R3 IP로 설정된 ping request 패킷을 R3에게 전송한다.
  12. R3은 해당 ping request를 받는다. 그 후 출발지 MAC, 출발지 IP를 자신의 것으로 설정하고, 목적지 MAC은 R4의 MAC, 목적지 IP는 R1의 IP로 설정한 ping request를 Gateway R4에 전달한다. 이를 수신한 R4는 출발지 MAC을 자신의 것으로 바꾸고, 목적지 MAC을 R1의 것으로 바꾼 프레임을 R1에게 전송하면 최종적으로 R1-R3간 통신이 이루어진다.

 

 

핵심1 : L3 장비를 통과할 때 L2 주소 (MAC address)는 변경되지만 L3 주소인 IP는 변경되지 않는다!

 

핵심 2 : VLAN 10에 있는 R1과 VLAN 20에 있는 R3, 그리고 게이트웨이인 R4이 있을 때, R1에서 R4로 통신할 때는 MAC 주소를 사용하고, R1에서 R3으로 통신할 때는 IP 주소를 사용해야 합니다.

R1과 R4은 같은 VLAN 10에 속해 있으므로, 같은 로컬 네트워크에 있는 장치로 간주됩니다. 이 경우, R1은 R4의 MAC 주소를 이용하여 통신합니다. MAC 주소는 데이터 링크 계층에서 사용되는 주소이므로, R1은 R4의 MAC 주소를 알고 있어야 올바른 목적지로 데이터를 전송할 수 있습니다.

반면에, R1과 R3은 서로 다른 VLAN에 속해 있으므로, 서로 다른 네트워크에 위치한 장치로 간주됩니다. 이 경우, R1은 R3의 IP 주소를 이용하여 통신합니다. IP 주소는 네트워크 계층에서 사용되는 주소이므로, R1은 R3의 IP 주소를 알고 있어야 올바른 목적지로 데이터를 전송할 수 있습니다.

따라서, R1에서 R4로 통신할 때는 MAC 주소를 사용하고, R1에서 R3으로 통신할 때는 IP 주소를 사용해야 합니다.

 

 

 

➜  같은 네트워크 안에 존재하는 장비끼리는 L2 주소로 통신한다. 하지만 서로 다른 네트워크 간 통신에서는 L3 주소를 사용하여야 한다. (라우팅 해야하므로)

 

➜ 이 예제에서 R1, R2, R4가 서로 같은 네트워크에 있는 것으로 작동하고, R3, R4가 서로 같은 네트워크에 있는 것으로 작동한다. R4는 두 네트워크를 연결하는 Gateway이므로, 두 네트워크에 모두 속한다.

 

➜ 따라서 R1에서 R3로 프레임을 전송할 때, R1과 R3가 서로 다른 네트워크 상에 존재하므로 R3의 주소를 목적지 IP 주소에 작성하고, 그 경로상에 존재하는 Gateway의 주소를 MAC address에 입력한다. Gateway는 R1과 동일한 네트워크상에 존재하므로.

 

 

 

 

 

 

VLAN 내부에서의 통신은 다음 절차를 거쳐 수행된다.

 

VLAN 내부에서의 통신을 설명하기 위해 R1-R2간 통신을 수행한다고 가정하자.

 

 

  1. R1에서 R2(1.1.10.2)으로 통신을 시작하면 ARP가 먼저 수행된다. 이때 R1과 R2은 동일한 subnet 안에 존재하므로 R1➜R2로 직접 ARP request가 전달된다.
  2. 스위치를 거쳐 F 0/2 port를 통하여 R2에게 ARP request 패킷이 도달한다.
  3. R2은 자신의 MAC address를 담아서 MAC response를 R1에게 전달한다.
  4. R1은 이를 확인하여 R2의 MAC address를 알게된다.
  5. R1은 목적지 IP, 목적지 MAC address가 R2로 설정된 ping request 패킷을 switch로 전송한다.
  6. R2가 이를 수신하면 R1-R2간 통신이 이루어진다.

 

 

1번에서 '직접' ARP request가 전달된다의 의미는 다른 Network를 거치지 않고 즉, Router를 거치지 않고 ARP request를 전송한다는 의미이다.

 

여기서 중요한 점은, 서로 같은 네트워크에 있는 장비 간 통신은 L2 통신이라는 것. IP address를 전혀 사용하지 않았다.

 

 

 

 

 


 

트렁킹 (Trunking)

 

 

트렁크(Trunk) 또는 트렁크 포트(Trunk port)는 복수 개의 VLAN에 소속된 port를 의미한다. 그리고 트렁크가 사용하는 프로토콜을 트렁킹 프로토콜이라고 한다.

 

 

 

 

 

위 네트워크에서 R1이 Broadcast frame을 전송하는 경우를 생각해본다. Broadcast는 반드시 동일한 VLAN 내에서만 이루어지므로 SW1은 이 frame을 받아서 SW2에게 전달한다. (R1과 같은 VLAN에 속한 R3에게 전달하기 위해)

 

앞전 게시물에서 이더넷 프레임에 대해 다루었는데, 일반 이더넷 프레임에는 출발지, 목적지 각각의 IP address, MAC address 등이 담기는데 여기에 VLAN number를 표시하는 필드는 없다. 그래서 만약 이 경우 일반 이더넷 프레임을 사용하면 SW2는 이 프레임을 VLAN 10, 20중 어느 곳에 전송해야 하는지 알 수가 없다. (SW1은 R1가 VLAN10에 속한다는 것을 알지만, SW2는 R1를 모르므로, 어느 VLAN에 속하는 지 알 수 없다.)

 

이러한 이유로 SW1는 SW2에게 Broadcast frame을 전송할 때 VLAN 번호를 표시해야 하는데, 이때 사용되는 프로토콜이 바로 트렁킹 프로토콜이다.

 

트렁킹 프로토콜의 동작 방식은 다음과 같다.

 

 

  1. Access port (host와 SW1를 잇는 port. 여기서는 R3와 SW1를 잇는 port를 의미한다.)를 통하여 frame을 수신하면 SW는 해당 frame이 소속된 VLAN number를 알 수 있다.
  2. SW1은 trunk port를 통해 SW2에게 해당 frame을 전송할 때 VLAN number를 표시한다. 그에 따라 SW2는 이를 수신하고, 이 frame이 어느 VLAN에 속하는 지 알 수 있게 된다.
  3. SW2는 frame에 부착된 VLAN 정보를 제거하고 VLAN 10에 소속된 모든 port에게 frame을 전송한다. 

 

 

여기서 VLAN number를 표기하는 방법은 트렁킹 프로토콜에 따라 다르다. 또한 트렁킹 프로토콜을 트렁킹 encapsulation이라고도 한다. Cisco 스위치에서 사용되는 트렁킹 encapsulation은 ISL / 802.1Q로 두 가지 방식이 있다. 최근에는 다른 스위치와의 호환성, 확장 VLAN 지원 등의 이유로 802.1Q가 더 자주 사용되고 있다.

 

 

 

 

 

IEEE 802.1Q trunking

 

IEEE 802.1Q Frame Format - Huawei

 

802.1Q 트렁킹 방식의 frame format은 아래와 같다. 위는 기존 이더넷 프레임인데, 802.1Q의 frame은 기존 frame에 VLAN Tag가 추가된 모습이다.

 

  • TPID (이더타입, Ethertype) : 현재 frame이 802.1Q frame이라는 것을 표시하며, 값이 항상 0x8100이다.
  • PRI (우선순위, Priority) : frame의 우선순위를 표기한다. 802.1P 우선순위 필드 혹은 CoS (Class of Service) 필드라고도 부른다. 0~7 사이의 값을 가지며 값이 클수록 우선순위가 높다. 음성이나 동영상 데이터를 전송할 때 이 값을 크게 설정하여 스위치에서 다른 프레임들보다 빨리 전송되게 할 수 있다.
  • VID (VLAN 번호, VLAN Idenfitier) : 프레임의 VLAN number를 표시한다. 이 필드의 길이가 12bit이므로 802.1Q 트렁킹 방식에서는 2의 12승  = 4096개의 VLAN number를 지원한다.

 

 

 

 

SW1(config-if)# switchport trunk encapsulation dot1q

 

Encapsulation 방식을 802.1Q로 지정하는 명령어는 이와 같다. 단순히 이렇게 설정한다고 해서 해당 port가 Trunk가 되는 것은 아니다. Trunk가 설정되었을 때 그 trunking 방식을 802.1Q로 하겠다는 의미이다.

 

 

 

 

 

 

Native VLAN

 

802.1Q 트렁킹에서는 Native VLAN이라는 것이 존재하는데, 얘는 다른애들과 다르게 좀 특별하다. Trunk port로 자신의 frame을 전송할 때 VLAN number를 표시하지 않는다. Default 값으로 Native VLAN은 VLAN 1으로 설정되어있다. 이 경우 VLAN 1에 속한 장비가 Switch에게 frame을 전송할 때, 자신의 VLAN number를 알리지 않는다.

 

모든 VLAN 중에서 자신의 VLAN number를 밝히지 않는 Native VLAN은 반드시 하나이기 때문에 VLAN number를 밝히지 않아도 이것이 어떤 number를 가지는 지 명확하게 알 수 있다.

 

 

 

 

 

 

 

ISL (Inter-Switch Link)

 

ISL은 Cisco에서 개발한 Trunking 프로토콜이다. ISL은 802.1Q와 달리 확장 VLAN을 지원하지 못하기 때문에 Cisco에서도 802.1Q로 대체하는 추세이다. 802.1Q를 사용하여 데이터를 전송할 때는 이더넷 frame의 중간에 VLAN 필드를 넣어줬는데, ISL에서는 frame 앞에 26Byte 길이의 ISL 헤더를 부착한다. 그리고 맨 뒤쪽에 4Byte 길이의 FCS도 추가한다. FCS(Frame Check Sequence)는 수신측에서 해당 frame을 수신한 후, 그것에 에러가 존재하는지 확인하는 용도이다.

 

 

Inter-Switch Link (ISL) and IEEE 802.1Q - GeeksforGeeks

 

기존의 Etherent frame 앞에 ISL header를, 뒤에 ISL FCS를 붙이는 것을 확인할 수 있다.

 

 

 

SW1(config-if)# switchport trunk encapsulation isl

 

트렁킹 방식을 ISL로 지정하는 명령어는 위와 같다.

 

 

 

 

 

 

 

 

 

Switch port의 DTP 모드

 

DTP(Dynamic Trunking Protocol)는 Cisco switch에서 상대 switch와 trunk 관련 사항을 협상할 때 사용하는 프로토콜이다. DTP 모드의 종류는 다음과 같다.

 

DTP 모드 동작 방식 모드 형태
Access 항상 Access port로 동작 Static port
Trunk 항상 Trunk port로 동작
Dynamic desirable 상대가 Access port인 경우에만 나도 Access port로 동작.
나머지 경우에서는 Trunk port로 동작
Dynamic port
Dynamic auto 상대가 Dynamic auto / Access인 경우에 Access port로 동작.
나머지 경우에서는 Trunk port로 동작

 

 

 

앞 게시글에서 VLAN을 다룰 때, Dynamic port를 사용하면 보안상 취약하기 때문에 Static port를 지정하는 것이 바람직하다고 했다. 책의 실습 부분도 Static port만을 다루기 때문에 Static port 명령어만 짚고 넘어가자.

 

Access mode가 뭔지 궁금할 수 있는데, 큰 의미는 없다. VLAN을 지원하는 switch는 각 interface마다 mode를 사용자가 직접 지정해줄 수 있는데, 이 경우 Static port라고 한다. 만약 해당 interface가 Trunk로 작동해야 한다면 Trunk mode로 지정한다. 반면 Trunk가 아닌 모든 interface는 그저 스위치와 연결될 뿐, 별다른 동작을 하지 않으므로 Access mode로 지정한다.

 

 

 

 

Access port 설정

SW1(config-if)# switchport mode access

 

➜ 스위치의 해당 port를 Access port로 지정한다.

 

 

 

 

Trunk port 설정

SW1(config-if)# switchport trunk encapsulation dot1q
SW1(config-if)# switchport mode trunk

 

➜ 스위치의 해당 port를 Trunk port로 지정한다. Trunk port로 지정하기 위해서는 먼저 해당 port의 encapsulation 방식을 미리 설정해주어야 한다.

 

 

 

 

 

 

 


 

 

트렁킹 실습하기

 

 

 

위 네트워크를 구성한 후, SW1에서 cdp를 찍어보자.

 

SW1#show cdp neighbors
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
                  S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone
Device ID    Local Intrfce   Holdtme    Capability   Platform    Port ID
R1           Fas 0/1          171            R       C2900       Gig 0/0
R2           Fas 0/2          134            R       C2900       Gig 0/0
SW2          Fas 0/10         120            S       2960        Fas 0/10

 

 

구성을 마친 후 SW1에서 show cdp neighbors를 찍어보면 SW1와 직접 연결된 R1, R2, SW2를 확인할 수 있다.

 

 

 

 

 

이제 다음 표를 따라 VLAN을 설정해보자.

 

VLAN number 이름 소속 port
10 지정 x SW1 F0/1, SW2 F0/3
20 지정 x SW1 F0/2, SW2 F0/4
999 Native_VLAN x

 

 

위쪽에 있는 라우터 R1, R3는 VLAN 10에 속하도록하고, 아래쪽에 있는 라우터 R2, R4는 VLAN 20에 속하도록 하는 것이다. VLAN 999는 Native VLAN으로 사용하기 위하여 생성한다.

 

 

 

 

 

 

SW1 설정

SW1(config)#vlan 10
SW1(config-vlan)#vlan 20
SW1(config-vlan)#vlan 999
SW1(config-vlan)#name Native_VLAN
SW1(config-vlan)#exit

SW1(config)#interface fastEthernet 0/1
SW1(config-if)#switchport mode access
SW1(config-if)#switchport access vlan 10
SW1(config-if)#exit

SW1(config)#interface fastEthernet 0/2
SW1(config-if)#switchport mode access
SW1(config-if)#switchport access vlan 20

 

 

 

 

 

SW2 설정

SW2(config)#vlan 10
SW2(config-vlan)#vlan 20
SW2(config-vlan)#vlan 999
SW2(config-vlan)#name Native_VLAN
SW2(config-vlan)#exit

SW2(config)#interface FastEthernet 0/3
SW2(config-if)#switchport mode access
SW2(config-if)#switchport access vlan 10
SW2(config-if)#exit

SW2(config)#interface FastEthernet 0/4
SW2(config-if)#switchport mode access
SW2(config-if)#switchport access vlan 20

 

 

이제 switchport mode access를 왜 입력하는지 감이 온다. Trunk가 아닌 port들을 Access port라고 하는데, SW1,2와 연결된 Router들은 전부 다 Access port이다. 여기서는 SW1-SW2를 연결하는 port만이 Trunk이므로!

 

따라서 전부 다 Access port로 지정해준다. (Static port) 그 후 각 port들에게 VLAN 10 또는 VLAN 20을 지정해주는 것. 

 

 

 

 

SW1#show vlan brief

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa0/3, Fa0/4, Fa0/5, Fa0/6
                                                Fa0/7, Fa0/8, Fa0/9, Fa0/10
                                                Fa0/11, Fa0/12, Fa0/13, Fa0/14
                                                Fa0/15, Fa0/16, Fa0/17, Fa0/18
                                                Fa0/19, Fa0/20, Fa0/21, Fa0/22
                                                Fa0/23, Fa0/24, Gig0/1, Gig0/2
10   VLAN0010                         active    Fa0/1
20   VLAN0020                         active    Fa0/2
999  Native_VLAN                      active

 

SW1에서 VLAN 설정을 살펴보면 Fa0/1은 VLAN 10에, Fa0/2는 VLAN 20에 그리고 Native VLAN은 VLAN 999에 잘 설정된 것을 확인할 수 있다.

 

 

 

 

SW1(config)#interface fastEthernet 0/10
SW1(config-if)#switchport mode trunk
SW1(config-if)#switchport trunk native vlan 999

 

SW1의 F0/10 port를 trunk port로 지정해주는 과정이다. 책에서는 #switchport trunk encapsulation dot1q 명령어가 포함되는데,, 이상하게 내 스위치에서는 이 명령어가 안 먹는다. 그래서 해당 명령어만 빼고 설정한 후에 #show interface trunk를 입력하여 현재 trunk 상태를 확인해보았더니

 

 

 

SW1#show interface trunk
Port        Mode         Encapsulation  Status        Native vlan
Fa0/10      on           802.1q         trunking      999

Port        Vlans allowed on trunk
Fa0/10      1-1005

Port        Vlans allowed and active in management domain
Fa0/10      1,10,20,999

Port        Vlans in spanning tree forwarding state and not pruned
Fa0/10      1,10,20,999

 

그냥 디폴트로 802.1q로 설정돼있는 것 같아서 안심~ Native VLAN도 VLAN 999로 잘 설정돼있다. SW2도 이와 같은 방식으로 설정해준다.

 

 

 

 

 

SW1#show interface status
Port      Name               Status       Vlan       Duplex  Speed Type
Fa0/1                        connected    10         auto    auto  10/100BaseTX
Fa0/2                        connected    20         auto    auto  10/100BaseTX
Fa0/3                        notconnect   1          auto    auto  10/100BaseTX
Fa0/4                        notconnect   1          auto    auto  10/100BaseTX
Fa0/5                        notconnect   1          auto    auto  10/100BaseTX
Fa0/6                        notconnect   1          auto    auto  10/100BaseTX
Fa0/7                        notconnect   1          auto    auto  10/100BaseTX
Fa0/8                        notconnect   1          auto    auto  10/100BaseTX
Fa0/9                        notconnect   1          auto    auto  10/100BaseTX
Fa0/10                       connected    trunk      auto    auto  10/100BaseTX
Fa0/11                       notconnect   1          auto    auto  10/100BaseTX
Fa0/12                       notconnect   1          auto    auto  10/100BaseTX

 

 

#show interface status 명령어를 통하여 현재 trunk로 사용되고 있는 port를 확인할 수 있다. 위에서 설정한대로 Fa0/10 interface가 trunk로 동작하고 있다.

 

여기까지 했으면 같은 VLAN에 있는 라우터들끼리 서로 연결이 가능해진다. 즉 VLAN 10에 존재하는 R1, R3끼리 그리고 VLAN 20에 존재하는 R2, R4끼리 통신이 가능해진 것이다.

 

 

 

R1#ping 1.1.10.3

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.10.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/0/0 ms

 

 

R1에서 R3(1.1.10.3)으로 핑을 때려보았다. 잘 전송된다. R1, R3는 물리적으로 분리되어 있지만 논리적으로는 동일한 Network에 연결되어 있는 것이다. R1-R3 그리고 R2-R4 간 연결은 Trunk를 통해 이루어진다.

 

 

 

 

 


 

VTP (VLAN Trunking Protocol)

 

VTP(VLAN Trunking Protocol)는 어떤 스위치에 설정된 VLAN number와 이름에 대한 정보를 다른 스위치에게 전달할 때 사용하는 프로토콜이다. VTP를 이용하면 VLAN 설정 작업이 편리해진다.

 

 

 

VTP 동작원리

  1. 어떤 스위치에서 VLAN을 추가/수정/삭제하면 해당 VLAN 정보가 변경되는데, 이 update 정보를 다른 스위치에게 전송하여 동기화해야 한다.
  2. 해당 스위치는 VTP 설정 번호(Configuration Revision) 값을 기존값에서 1 증가시킨 후 다른 스위체에게 변경된 VLAN 정보와 함께 전송한다.
  3. 그 정보를 수신한 타 스위치는 자신의 VTP configuration revision과 수신한 revision 값을 비교한다.

 

이때 수신한 정보의 Revision값이 더 높으면 더 new version이므로 자신의 VLAN 정보를 새로운 정보로 교체한다.

Revision 값이 같으면 걍 무시한다. 아무 동작도 할 게 없다.

Revision 값이 더 작은 게 수신된 경우 내 것이 더 new version이므로, 내가 갖고있는 VLAN 정보를 상대에게 전송한다.

 

 

 

 

SW1(config)#vtp domain MyVTP
Changing VTP domain name from NULL to MyVTP

 

앞에서 SW1-SW2 간 Trunk를 다 설정해주었으므로 vtp domain MyVTP를 통해 VTP domain 이름만 설정해주면 VTP가 바로 동작한다.

 

 

 

 

 

SW1#show vtp status
VTP Version capable             : 1 to 2
VTP version running             : 1
VTP Domain Name                 : MyVTP
VTP Pruning Mode                : Disabled
VTP Traps Generation            : Disabled
Device ID                       : 0090.0CE6.0E00
Configuration last modified by 0.0.0.0 at 3-1-93 03:57:12
Local updater ID is 0.0.0.0 (no valid interface found)

Feature VLAN : 
--------------
VTP Operating Mode                : Server
Maximum VLANs supported locally   : 255
Number of existing VLANs          : 8
Configuration Revision            : 4
MD5 digest                        : 0x97 0x03 0x19 0xB4 0x5F 0x65 0xD8 0xFE 
                                    0xE3 0x6D 0x6C 0x8A 0xAF 0xF6 0x3B 0x29

 

 

VTP를 설정해주고 나면 위처럼 스위치에 설정된 VLAN 정보를 확인할 수 있다.

 

  • VTP Domain Name ➜ Domain 이름. 바로 위에서 설정해준 MyVTP로 설정되어 있다.
  • VTP Pruning Mode ➜ 인접 스위치에 VLAN 10에 소속된 port가 없으면 VLAN 10에서 만든 브로드캐스트 프레임을 인저버 스위치쪽으로 전송하지 않게 하는 것이 Pruning이다. vtp pruning 명령어를 입력하면 활성화된다.
  • VTP Operating Mode ➜ 현재 VTP가 어떤 mode로 동작하는지 나타낸다. 여기서는 server mode
  • Number of existing VLANs ➜ 현재 설정된 VLAN 개수
  • Configuration Revision ➜ VLAN을 추가/삭제/이름변경 할때마다 이 번호가 1씩 증가한다.

 

 

 

 

 

VTP 모드

 

  • Server ➜ VLAN 생성/삭제/이름변경이 가능한 모드로, 자신의 VLAN config 정보를 다른 스위치들에게 전송한다. 다른 스위치에게서 받은 정보와 자신의 정보를 일치시키며, 이를 다른 스위치에게 중계한다. 모든 스위치는 default로 Server mode로 설정된다.

 

  • Client ➜ VLAN 생성/삭제가 불가능하다. 자신의 VLAN config 정보를 다른 스위치에게 전달, 다른 스위치에게서 받은 VLAN 정보를 자신의 것과 일치시키고 또 다른 스위치에게 중계하는 다리 역할만 한다.

 

  • Transparent ➜ 자신의 VTP 정보를 다른 스위치에게 전송하지 않는다! 또, 다른 스위치에게서 받은 VTP 정보도 쌩깐다. 하지만 그 정보를 다른 스위치들에게 전송하는 다리역할은 가능하며, 자신이 사용할 VLAN을 생성/삭제하는 것은 가능하다.

 

 

Mode VLAN 생성/변경/삭제 VTP 정보 전송 VTP 정보 중계 VTP 정보 동기화
Server O O O O
Client X O O O
Transparent O (자신의 것만) X O