본문 바로가기

Network

네트워크 인터페이스

네트워크 인터페이스란?

 

네트워크 인터페이스는 컴퓨터가 네트워크에 연결되도록 하는 하드웨어 또는 소프트웨어 구성 요소를 의미한다. 즉, 네트워크 인터페이스는 물리적 장치(NIC)와 소프트웨어 장치(Loopback, VLAN, Bridge, Bonding)를 모두 포괄하는 포괄적인 개념이다.

이러한 네트워크 인터페이스는 컴퓨터 내부의 디지털 데이터를 물리 매체로 변환해 전송하고, 반대로 수신된 물리 신호를 디지털 패킷으로 복원하는 경계 지점 역할을 한다.

 


네트워크 인터페이스의 위치 (OSI 모델 관점)

 

네트워크 인터페이스는 OSI 7 계층에서 Layer 2(데이터 링크)와 Layer 1(물리 계층) 경계에 위치하며 주로 다음과 같은 역할을 담당한다.

  • 프레임 캡슐화/역캡슐화: IP 패킷을 Ethernet 프레임으로 감싸고, 수신된 프레임에서는 다시 IP 패킷을 꺼냄
  • 전송 매체 제어: 비트 스트림을 케이블이나 무선 전파 신호로 인코딩해 보내고, 반대로 수신된 신호를 디코딩해 복원함

핵심 하드웨어 – Network Interface Card(NIC) or LAN Card

 

NIC는 컴퓨터를 네트워크에 연결하여 통신하기 위해 사용되는 하드웨어 장치를 의미한다. LAN Card(랜카드)는 이더넷 LAN 환경에서 유선 통신용으로 쓰이던 NIC의 한 종류인데 일반적으로 유선 NIC(즉 LAN Card)가 가장 많이 쓰이기 때문에, 편의상 ‘NIC’와 ‘LAN 카드’를 혼용하기도 한다.

 


Linux 가상 네트워크 인터페이스 - Virtual Network Interface(VNI)

 

LAN Card 와 같은 물리 NIC는 내 MAC 주소(또는 허용된 MAC 주소들)에 온 프레임을 처리하는 역할을 하지 IP주소를 할당하거나 패킷 라우팅과 같은 작업을 하지는 않는다. 결국 이러한 작업은 하드웨어가 아닌 소프트웨어에서 처리해야 하는데 이러한 역할을 하는 것이 가상 네트워크 인터페이스이다.

가상 네트워크 인터페이스(VNI)는 물리 NIC 위에 운영체제가 소프트웨어로 띄운 논리적 네트워크 포트를 의미한다. 즉, VNI는 일종의 가상 네트워크 장치라고 볼 수 있다.

VNI는 하나의 물리 케이블로도 네트워크 분리, 격리, 확장, 이중화를 가능하게 해 주며, 물리 장비 추가 없이도 VLAN, Bridge, Bonding 같은 다양한 토폴로지(Topology : 네트워크 장치들이 물리적·논리적으로 어떻게 연결되어 있는지를 나타내는 구조)를 지원한다.

이러한 VNI는 운영망, 관리망 분리, 컨테이너 네트워킹, HA/부하분산, 테스트 환경 구성 등을 케이블 교체나 물리 NIC 추가 없이 손쉽게 관리할 수 있다.

 

참고로 가상 네트워크 인터페이스는 물리 NIC 위에서 사설 IP를 소프트웨어적으로 여러 개 생성, 관리할 수 있게 해주는 역할을 한다. 공인 IP(외부 IP)는 라우터나 NAT 장비가 결정하므로 VNI 설정으로는 이러한 부분을 다룰 수 없다.

 

아래는 리눅스 커널에서 기본으로 제공하는 VNI 종류이다.

 

 

 

Loopback

Loopback은 내부 통신 전용 인터페이스이다. 우리가 흔히 개발을 할 때 자기 자신의 ip 주소를 127.0.0.1으로 설정하는데 이것이 가능한 이유가 Loopback 인터페이스 때문이다.

Loopback은 리눅스 상에서 lo로 표기되며 IP 주소 127.0.0.1 대역으로 들어오는 패킷을 호스트 자신에게 다시 전달하는 역할을 한다.

그 덕분에 어플리케이션이 127.0.0.1로 바인딩해도 물리 NIC 없이 내부 호출이 가능하다.

 

 

 

Alias (Secondary IP)

Alias는 하나의 물리 NIC 위에 여러 IP주소를 붙여 논리적으로 여러 장치로 만드는 역할을 한다. 즉, 1개의 물리 NIC를 가지고 있는 서버라도 Alias를 사용하면 마치 여러 개의 물리 NIC를 가진 것처럼 도메인별, 서비스별로 별도 IP를 할당해 SSL 바인딩, API 전용 IP와 관리 전용 IP 분리 등을 구현할 수 있다.

리눅스에서는 물리 NIC는 eth0, eth1, enp3s0, eno1, ens33, wlp2s0 등으로 표기되기에 Alias는 해당 인터페이스 이름 뒤에 [:번호] 를 붙여 나타낸다. (ex. eth0:0, eth0:1, enp3s0:2, enp3s0:3)

예를 들어 하나의 물리 NIC(eth0)가 있다고 가정하면 Alias를 다음과 같이 할당해 볼 수 있다.

eth0:0   →  203.0.113.10: 외부 공개 API 서버용 IP (예: api.example.com 접속)

eth0:1   →  10.0.0.5: 관리자 전용 SSH 접속용 IP (내부 운영자 접근)

eth0:2   →  192.168.200.30: 스테이징(테스트) 환경 API용 IP (별도 트래픽 분리)

 

이렇게 하면 물리 NIC는 하나지만 각 목적에 따라 IP를 분리해서 운영할 수 있다.

 

Alias는 같은 물리 NIC(eth0)의 L2 세그먼트 내에서만 “주소를 하나 더 얹는” 설정일 뿐, 네트워크 자체를 분리/격리해 주지는 않는다. 
실제 사설망 통신을 위해서는 해당 VLAN이나 라우터/방화벽 설정이 선행되어야 하며, 외부망과 내부망의 완전 분리(보안 경계)가 필요하다면 VLAN, 물리 NIC 추가, 또는 방화벽/라우터 설정이 반드시 필요하다.

 

 

 

VLAN (Virtual LAN)

VLAN은 Ethernet 프레임에 4byte 태그를 사용하여 L2 세그먼트(브로드캐스트 도메인)를 분리하는 기능이다. 다시 말해 논리적으로 서브넷을 분리하는 기능이라고 볼 수 있다.
이러한 VLAN은 L2(데이터 링크)에서 트래픽을 태그(ID)별로 분리하기 때문에 하나의 물리 NIC를 운영망, 관리망, DMZ 망 등으로 분리해서 사용할 수 있게 한다.

VLAN은 리눅스에서는 물리 NIC 이름 뒤에 [.VLAN_ID] 를 붙여 표기한다. (ex. eth0.10, eth0.20)

예를 들어 하나의 물리 NIC(eth0)가 있다고 가정하면 VLAN을 다음과 같이 할당할 수 있다.

eth0.10 → 192.168.10.5/24   (네트워크: 192.168.10.0/24)   : 운영망 (서비스 트래픽)

eth0.20 → 10.0.20.5/24         (네트워크: 10.0.20.0/24)         : 관리망 (SSH/관리 인터페이스)

eth0.30 → 172.16.30.5/24     (네트워크: 172.16.30.0/24)     : DMZ망 (공개 웹 서버)


이렇게 하면 물리 NIC는 하나지만 운영망(VLAN 10)과 관리망(VLAN 20), DMZ망(VLAN 30)을 서로 전혀 다른 네트워크처럼 분리해 운영할 수 있다.

 

 

 

Bridge (Virtual Switch)

Bridge는 여러 네트워크 인터페이스(물리 NIC, VLAN, 컨테이너/VM 등)를 하나의 가상 스위치(L2 도메인)로 묶어 주는 기능이다. 다시 말해, Bridge는 Bridge에 연결된 모든 포트가 마치 같은 스위치에 연결된 것처럼 프레임을 자유롭게 주고받을 수 있게 만들어 준다. 

Bridge는 리눅스에서 보통 `br0`, `br1` 등으로 표기된다.

예를 들어 하나의 물리 NIC(eth0)와 두 개의 Docker 컨테이너(veth0, veth1)가 있다고 가정하면 이들을 모두 하나의 Bridge(br0)에 묶어 다음과 같이 가상 스위치 네트워크를 구성할 수 있다.

 

br0 → 192.168.100.1/24 (네트워크: 192.168.100.0/24) : 컨테이너 & 호스트 간 투명 L2 통신

 

Bridge의 L2 역할
- 여러 인터페이스(물리 NIC, VLAN, 컨테이너/VM 등)를 하나의 가상 스위치로 묶어 MAC 주소 학습 기반으로 프레임을 서로 자유롭게 전달함

Bridge의 L3 역할
- 호스트가 Bridge 네트워크에 참여하려면 Bridge에도 IP 주소와 서브넷 마스크를 붙여야 한다. 즉 br0 → 192.168.100.1/24 는 “이 스위치 안의 장비들은 192.168.100.0~255 대역을 같은 네트워크로 본다”는 뜻이다.

 

이렇게 하면 도커 컨테이너들은 별도 NAT 없이 `192.168.100.x` 대역 IP를 직접 할당 받아 서로나 호스트, 물리망 장비와 동일한 L2 세그먼트에서 투명하게 통신할 수 있다.

 

 

 

Bonding (Link Aggregation)

Bonding은 두 개 이상의 물리 NIC를 하나의 논리 인터페이스로 묶어 주는 기능이다. Bonding을사용하면 링크 이중화 또는 부하분산 구성을 통해 가용성/대역폭을 동시에 확보할 수 있다.

Bonding은 리눅스에서 bond0, bond1 등으로 표기된다.

이러한 Bonding은 여러가지 동작 모드가 있다. 그 중에 주로 쓰이는 모드 mode=1으로 Bonding에 묶인 NIC 중 하나만 Active 상태로 트래픽을 처리하다 문제가 발생하면 Backup으로 전환하는 모드이다.


출처 :
https://better-together.tistory.com/101
https://www.geeksforgeeks.org/layers-of-osi-model/
https://velog.io/@km1031kim/Network-Bonding
https://louis-j.tistory.com/entry/%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4Network-Interface

 

'Network' 카테고리의 다른 글

IP주소 체계와 서브네팅  (1) 2025.07.13
스위치와 라우터  (1) 2025.01.12
TLS(Transport Layer Security)  (2) 2024.07.14
TCP와 UDP  (0) 2023.12.10
OSI 모델, TCP/IP 모델  (0) 2023.12.09