Trunk & Inter-VLAN Routing


Trunk는 여러 VLAN의 Frame을 Link 하나로 보내는 Port이고 802.1Q Tag로 어느 VLAN Frame인지 구분한다.
다른 VLAN끼리는 Broadcast Domain이 달라서 L3장비 없이는 통신이 안된다

1. Native VLAN
A. Trunk에서 Tag를 안붙이고 보내는 VLAN 이다. 기본값은 VLAN 1
B. Tag 없는 Frame을 받으면 Native VLAN으로 처리 한다.
C. 양쪽 Switch의 Native VLAN이 같아야 한다. 다르면 CDP에서 Native VLAN mismatch 메시지가 뜨고 VLAN끼리 Frame이 섞여 버릴수 있다.
[보안상 Native VLAN은 안쓰는 VLAN으로 바꿔 두는게 좋다. (VLAN Hopping 방지)]

2. DTP (Dynamic Trunking Protocol)
Cisco 전용 Protocol로 Trunk를 자동으로 협상 한다. 양쪽 mode 조합에 따라 결과가 달라진다.

- dynamic auto ↔ dynamic auto : Access
- dynamic auto ↔ dynamic desirable : Trunk
- dynamic auto ↔ trunk : Trunk
- dynamic auto ↔ access : Access
- dynamic desirable ↔ dynamic auto : Trunk
- dynamic desirable ↔ dynamic desirable : Trunk
- dynamic desirable ↔ trunk : Trunk
- dynamic desirable ↔ access : Access
- trunk ↔ dynamic auto : Trunk
- trunk ↔ dynamic desirable : Trunk
- trunk ↔ trunk : Trunk
- trunk ↔ access : 설정 오류 (사용 X)
- access ↔ dynamic auto : Access
- access ↔ dynamic desirable : Access
- access ↔ trunk : 설정 오류 (사용 X)
- access ↔ access : Access

[2960은 기본값이 dynamic auto 라서 양쪽다 기본값이면 Trunk가 안된다.]
[switchport nonegotiate로 DTP를 끌수 있고 실무에서는 왠만하면 mode를 직접 지정한다]

3. Trunk 설정 예제
                                  Trunk                                          Trunk
R1--------------------------------SW1--------------------------------SW2
                                       |          |                                      |          |
                                    PC1     PC2                                 PC3     PC4
[R1 Fa0/0 ↔ SW1 Fa0/23 , SW1 Fa0/24 ↔ SW2 Fa0/24 는 Trunk]
[PC1 13.13.10.1 , PC3 13.13.10.2 : VLAN 10 (Fa0/1) / PC2 13.13.20.1 , PC4 13.13.20.2 : VLAN 20 (Fa0/2)]
[R1 Fa0/0.10 : 13.13.10.254 , Fa0/0.20 : 13.13.20.254]
EX1) 위 구성도에서 SW1 , SW2에 VLAN 10 , 20을 만들고 PC를 연결한 다음 Switch 사이는 Trunk로 설정한다. (R1은 아직 연결 안한 상태)

# SW1
vlan 10
 name SALES
vlan 20
 name DEV
!
interface fastethernet 0/1
 switchport mode access
 switchport access vlan 10
!
interface fastethernet 0/2
 switchport mode access
 switchport access vlan 20
!
interface fastethernet 0/24
 switchport mode trunk
!

[SW2도 똑같이 설정 한다.]
[2960은 802.1Q만 지원해서 switchport trunk encapsulation dot1q 명령어가 없다. 3560같은 L3 Switch는 이 명령어를 먼저 입력 해야 Trunk 설정이 된다.]

SW1#show interfaces trunk

Port        Mode             Encapsulation  Status        Native vlan
Fa0/24      on               802.1q         trunking      1

Port        Vlans allowed on trunk
Fa0/24      1-4094

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

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

Mode가 on 인건 switchport mode trunk로 직접 지정했기 때문이다.
[Trunk Port인 Fa0/24는 show vlan brief에 안나온다.]
PC1 → PC3 ping은 된다. (같은 VLAN 10)
하지만 PC1 → PC2 ping은 안된다. Router가 없어서 다른 VLAN끼리는 통신할 방법이 없기때문이다

4. Inter-VLAN Routing (Router-on-a-stick)

Router의 물리 Interface 하나를 Sub-interface로 나눠서 VLAN마다 Gateway를 만드는 방식 이다.
EX2) SW1 Fa0/23에 R1을 연결해서 VLAN 10 , 20 사이를 Routing 한다.

# R1
interface fastethernet 0/0
 no shutdown
!
interface fastethernet 0/0.10
 encapsulation dot1Q 10
 ip address 13.13.10.254 255.255.255.0
!
interface fastethernet 0/0.20
 encapsulation dot1Q 20
 ip address 13.13.20.254 255.255.255.0
!
# SW1
interface fastethernet 0/23
 switchport mode trunk
!

[PC1 , PC3의 Gateway는 13.13.10.254 , PC2 , PC4는 13.13.20.254로 설정 한다.]

SW1#show interfaces trunk

Port        Mode             Encapsulation  Status        Native vlan
Fa0/23      on               802.1q         trunking      1
Fa0/24      on               802.1q         trunking      1

Port        Vlans allowed on trunk
Fa0/23      1-4094
Fa0/24      1-4094

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

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

이제 PC1 → PC2 ping도 R1을 거쳐서 된다.
[Link 하나로 모든 VLAN트래픽이 지나가서 트래픽이 많으면 병목이 생길수 있다. 그래서 실무 에서는 L3 Switch의 SVI를 많이쓴다.]

'네트워크 > 스위칭' 카테고리의 다른 글

브이랜(VLAN) 란?  (0) 2026.10.24

Enhanced Interior Gateway Routing Protocol


EIGRP는 Cisco가 만든 라우팅 프로토콜 이다.
RIP같은 Distance Vector 처럼 이웃한테 경로를 받지만 Topology table을 따로 가지고 있어서 OSPF같은 Link State 장점도 같이 가지고 있다

1. Advanced Distance Vector
EIGRP를 Hybrid라고 부르기도 하는데 정확하게는 Advanced Distance Vector 이다.
원래는 Cisco 전용 이었는데 2016년에 RFC 7868로 공개 되었다.
그래도 실무에서는 대부분 Cisco장비 끼리 쓴다

2. 특징
A. DUAL(Diffusing Update Algorithm)로 Loop없는 경로를 계산한다.
B. Classless : VLSM , CIDR를 지원한다.
C. IP Protocol 88번을 사용한다. [OSPF는 89]
D. Multicast 224.0.0.10을 사용한다.
E. AD : Internal 90 , External 170 , Summary 5
F. 주기적으로 전체 정보를 보내지 않고 변경된 부분만 필요한 Router에게만 보낸다. [Partial , Bounded Update]
G. Cost가 다른 경로도 같이 쓸수 있다. [Unequal Cost Load Balancing , variance 명령어]
H. RTP(Reliable Transport Protocol)로 Update를 신뢰성 있게 전달 한다.

- 방식 : RIPv2 - Distance Vector , OSPF - Link State , EIGRP - Advanced Distance Vector
- Metric : RIPv2 - Hop count , OSPF - Cost , EIGRP - Bandwidth + Delay
- 전송 : RIPv2 - UDP 520 , OSPF - IP 89 , EIGRP - IP 88
- AD : RIPv2 - 120 , OSPF - 110 , EIGRP - 90 (External 170)

3. Table 3가지

A. Neighbor Table : Hello로 찾은 이웃 Router 목록 [show ip eigrp neighbors]
B. Topology Table : 이웃들이 알려준 경로 , Successor(메인 경로)랑 Feasible Successor(백업 경로)가 여기에 있다. [show ip eigrp topology]
C. Routing Table : Successor 경로만 올라간다. [show ip route]
[백업 경로를 미리 들고 있어서 메인 경로가 죽어도 다시 계산할 필요 없이 바로 넘어갈수 있다]

4. Neighbor 조건 , Timer
A. AS 번호가 같아야 한다.
B. K값이 같아야 한다.
C. 같은 Subnet이어야 한다. [Primary IP 기준]
D. 인증 설정이 같아야 한다.
[OSPF랑 다르게 Hello/Hold Timer는 서로 달라도 Neighbor가 맺어 진다.]

Hello 5초 / Hold 15초 [대부분의 Interface]
Hello 60초 / Hold 180초 [T1이하 속도의 NBMA , Multipoint Frame Relay 등]
[IOS 버전에 따라 auto-summary가 기본으로 켜져 있는경우가 있어서 설정할때 no auto-summary를 꼭 넣어 주는게 좋다]

'네트워크 > 라우팅' 카테고리의 다른 글

멀티 에어리어(Multi Area) OSPF 란?  (0) 2026.10.26
OSPF 네이버(Neighbor) 상태 와 DR/BDR 선출  (0) 2026.10.23
OSPF(Open Shortest Path First) 란?  (0) 2026.10.22
RIPv2 란?  (0) 2021.03.22
Passive interface 설명 및 예제  (0) 2021.03.21

Modbus Data Model & Function Code


Modbus는 Client(Master)가 요청하고 Server(Slave)가 응답하는 단순한 구조의 산업용 프로토콜 이다.
장비 안의 데이터는 4가지 영역으로 나뉘어 있고 어떤 영역을 읽을지 쓸지는 Function Code로 정한다

1. 데이터 모델


- Coil : 크기 - 1 bit , 권한 - Read / Write , 주소 (관례) - 0xxxx (00001~) , 예시 - 모터 기동 / 정지 출력
- Discrete Input : 크기 - 1 bit , 권한 - Read , 주소 (관례) - 1xxxx (10001~) , 예시 - 리밋 스위치 , 비상정지 버튼 상태
- Input Register : 크기 - 16 bit , 권한 - Read , 주소 (관례) - 3xxxx (30001~) , 예시 - 온도 , 압력 측정값
- Holding Register : 크기 - 16 bit , 권한 - Read / Write , 주소 (관례) - 4xxxx (40001~) , 예시 - 설정값(Set Point)

A. 4개 영역이 장비 안에서 진짜 따로 있는지 , 같은 메모리를 나눠쓰는지는 제조사 마다 다르다
[40001 같은 주소는 사람이 보기편하게 붙인 관례이고 실제 Packet에는 0부터 시작하는 Offset이 들어간다. 40001 → 0x0000 , 40010 → 0x0009]
[이 1 차이 때문에 값이 한칸씩 밀려서 읽히는 실수가 진짜 자주 나온다. 매뉴얼 에서 주소가 1부터인지 0부터인지 꼭 확인해야 된다]

2. Function Code

- Code 01 : Hex - 0x01 , 이름 - Read Coils , 대상 - Coil
- Code 02 : Hex - 0x02 , 이름 - Read Discrete Inputs , 대상 - Discrete Input
- Code 03 : Hex - 0x03 , 이름 - Read Holding Registers , 대상 - Holding Register
- Code 04 : Hex - 0x04 , 이름 - Read Input Registers , 대상 - Input Register
- Code 05 : Hex - 0x05 , 이름 - Write Single Coil , 대상 - Coil [ON = 0xFF00 , OFF = 0x0000]
- Code 06 : Hex - 0x06 , 이름 - Write Single Register , 대상 - Holding Register
- Code 15 : Hex - 0x0F , 이름 - Write Multiple Coils , 대상 - Coil
- Code 16 : Hex - 0x10 , 이름 - Write Multiple Registers , 대상 - Holding Register

A. 한번에 읽을수 있는 양 : FC 03 , 04는 최대 125개 Register , FC 01 , 02는 최대 2000개 Coil
B. 한번에 쓸수 있는 양 : FC 16은 최대 123개 Register , FC 15는 최대 1968개 Coil
[읽기는 01 ~ 04 , 쓰기는 05 , 06 , 15 , 16 이라서 산업용 Firewall에서 Function Code로 쓰기만 막는 설정도 할수 있다.]

3. Exception 응답
요청을 처리 못하면 Function Code에 0x80을 더해서 응답하고 뒤에 Exception Code 1 Byte가 붙는다. [예 : 0x03 → 0x83]
A. 01 Illegal Function : 장비가 지원하지 않는 Function Code
B. 02 Illegal Data Address : 없는 주소
C. 03 Illegal Data Value : 잘못된 값 (개수 초과 등)
D. 04 Server Device Failure : 장비 내부 오류
[현장에서 02가 뜨면 거의 주소 Offset 문제다]

+ Recent posts