사전 네트워크 인터페이스
개념

네트워크 인터페이스

gabury1고친 사람 github-actions[bot]

네트워크 인터페이스는 컴퓨터가 네트워크로 데이터를 내보내고 받아들이는 출입구입니다. 운영체제는 출입구마다 이름을 붙여 관리합니다. 출입구 뒤에는 랜 카드 같은 장치가 붙기도 합니다. 장치 없이 소프트웨어로만 만든 가상 출입구도 있습니다.

쉽고 빠른 이해

네트워크 인터페이스는 컴퓨터가 네트워크에 드나드는 문입니다. 유선 랜과 와이파이에 함께 붙은 노트북에는 이 문이 둘 있습니다.

이 문을 따로 세는 까닭은 한 컴퓨터가 여러 네트워크에 동시에 붙기 때문입니다. 데이터를 보낼 때 어느 문으로 내보낼지 정해야 합니다. 남이 찾아올 주소도 문마다 따로 달아야 합니다.

어떻게 도나:

  1. 운영체제가 문마다 이름을 붙이고 주소를 답니다
  2. 프로그램이 데이터를 보내면 운영체제가 목적지를 보고 나갈 문을 고릅니다
  3. 문 뒤의 장치가 데이터를 선이나 전파에 실어 내보냅니다

개발자가 이 문을 직접 고르는 때는 서버를 띄울 때입니다. 서버가 어느 문으로 들어온 연결을 받을지 정해야 합니다. 같은 컴퓨터 안에서 온 연결만 받게 할 수도 있습니다. 모든 문으로 들어온 연결을 받게 할 수도 있습니다.

대가도 있습니다. 문이 늘면 어느 문으로 나갈지 정하는 규칙도 함께 늘어납니다. 문 하나가 한 번에 나를 수 있는 양에는 끝이 있습니다. 그 양을 넘으면 문 앞에 데이터가 밀립니다.

상세

큰 건물에는 출입구가 여럿 있습니다. 정문은 큰길로, 뒷문은 주차장으로 이어집니다. 나가는 사람은 가려는 곳에 맞춰 문을 고릅니다.

이 절은 먼저 네트워크 인터페이스가 무엇이고 왜 두는지 세웁니다. 그다음 실물 장치와 가상 인터페이스를 가릅니다. 주소가 어디에 붙는지도 봅니다. 끝으로 나갈 문과 받을 문을 고르는 법, 문마다 재는 값을 봅니다. 예로는 유선 랜과 와이파이를 함께 쓰는 노트북 한 대를 따라갑니다.

호스트와 출입구

호스트는 네트워크에서 데이터를 직접 보내고 받는 컴퓨터입니다. 노트북도 웹 서버도 호스트입니다. 호스트 하나가 네트워크에 닿는 접점은 하나가 아닐 수 있습니다.

네트워크 인터페이스는 이 접점 하나를 가리킵니다. 유선 랜 단자에 선을 꽂은 노트북이 와이파이에도 붙어 있으면 인터페이스가 둘입니다. 운영체제는 둘을 따로 세어 저마다 이름을 붙입니다.

이름은 운영체제마다 다르게 붙입니다. 리눅스에서는 eth0 · wlan0 · lo 같은 이름을 흔히 봅니다. 앞의 둘은 유선과 무선 인터페이스입니다. lo 는 뒤에서 볼 루프백 인터페이스입니다.

장치를 감추는 한 겹

프로그램은 데이터를 보낼 때 그 아래 장치가 무엇인지 모릅니다. 유선이든 무선이든 같은 방식으로 보냅니다. 운영체제가 장치마다 다른 사정을 인터페이스 뒤로 감추기 때문입니다.

장치마다 다른 사정은 디바이스 드라이버가 맡습니다. 드라이버는 특정 장치를 움직이는 법을 아는 운영체제의 부품입니다. 운영체제는 드라이버가 올린 장치를 인터페이스 하나로 보여 줍니다. 그래서 랜 카드를 바꿔 꽂아도 프로그램은 고칠 것이 없습니다.

실물 장치와 가상 인터페이스

랜 카드는 컴퓨터에 꽂는 하드웨어입니다. 정식 이름은 네트워크 인터페이스 카드입니다. 줄여서 NIC(Network Interface Card)라고 부릅니다.

인터페이스는 이 카드와 같은 것이 아닙니다. 인터페이스는 운영체제가 만든 관리 단위입니다. 그래서 하드웨어 없이 소프트웨어로만 있는 인터페이스도 만들 수 있습니다. 이 절에서는 이것을 가상 인터페이스라고 부릅니다.

문 너머에 무엇이 이어지느냐로 종류를 가르면 아래 표와 같습니다. 물리 인터페이스를 뺀 셋이 가상 인터페이스입니다.

종류 문 너머에 이어지는 것 예
물리 인터페이스 랜 카드 · 무선 칩 같은 하드웨어 유선 랜 · 와이파이
루프백 인터페이스 자기 자신 lo
컨테이너 · 가상 머신용 인터페이스 같은 호스트 안의 다른 인터페이스 컨테이너 · 가상 머신 안의 인터페이스
터널 인터페이스 암호화된 통로 너머의 먼 네트워크 가상 사설망

루프백 인터페이스는 보낸 데이터를 곧바로 자기에게 되돌립니다. 같은 컴퓨터 안의 프로그램끼리 네트워크 방식으로 통신할 때 씁니다. 개발 중에 localhost 로 접속하면 이 문을 지납니다.

컨테이너와 가상 머신도 자기 인터페이스를 갖습니다. 그 인터페이스는 가상 장치를 거쳐 호스트의 인터페이스와 이어집니다. 리눅스 컨테이너라면 veth 한 쌍이 이 가상 장치입니다. 그래서 컨테이너 안의 프로그램도 전용 문이 있는 것처럼 통신합니다.

VPN(Virtual Private Network, 가상 사설망)을 켜면 터널 인터페이스가 하나 생깁니다. 이 문으로 내보낸 데이터는 암호화되어 먼 네트워크까지 실려 갑니다.

주소는 인터페이스에 붙는다

IP 주소(Internet Protocol address, 인터넷 프로토콜 주소)는 네트워크에서 목적지를 가리키는 번호입니다. 이 번호는 호스트가 아니라 인터페이스에 붙습니다. 데이터가 찾아오는 곳이 호스트 전체가 아니라 문 하나이기 때문입니다.

노트북으로 보면 유선 랜 인터페이스와 와이파이 인터페이스가 저마다 IP 주소를 받습니다. 같은 노트북인데 주소가 둘입니다. 인터페이스 하나에 주소를 여럿 달 수도 있습니다.

물리 인터페이스에는 번호가 하나 더 있습니다. MAC 주소(Media Access Control address, 매체 접근 제어 주소)입니다. 대개 장치를 만들 때 새겨 넣는 번호입니다. 같은 선이나 같은 무선망에 붙은 장치끼리 서로를 가려낼 때 씁니다.

루프백 인터페이스에는 자기 자신을 가리키는 주소가 붙습니다. IPv4(Internet Protocol version 4, 인터넷 프로토콜 4판)에서는 127.0.0.1 입니다. 이 주소로 보낸 데이터는 컴퓨터 밖으로 나가지 않습니다.

flowchart TD
    H["노트북 · 호스트 한 대"]
    H --> E["유선 랜 인터페이스 · eth0"]
    H --> W["와이파이 인터페이스 · wlan0"]
    H --> L["루프백 인터페이스 · lo"]
    E --> E1["IP 주소 · MAC 주소"]
    W --> W1["IP 주소 · MAC 주소"]
    L --> L1["127.0.0.1"]

그림에서 주소는 노트북이 아니라 그 아래 인터페이스에 매달립니다. 그래서 같은 노트북을 찾아가도 어느 문으로 들어가느냐에 따라 쓰는 주소가 달라집니다.

인터페이스가 가진 값

운영체제는 인터페이스마다 몇 가지 값을 붙들고 있습니다. 주소 말고도 켜짐 상태와 크기 상한, 속도가 있습니다. 리눅스에서는 ip addr 명령으로 이 값들을 한꺼번에 볼 수 있습니다.

값 뜻
이름 운영체제 안에서 이 문을 부르는 이름
상태 켜졌나 꺼졌나. 선이 빠지면 꺼진 것으로 바뀐다
IP 주소 네트워크에서 이 문을 찾아오는 번호
MAC 주소 물리 장치에 새겨진 번호
최대 전송 단위 이 문으로 한 번에 내보낼 수 있는 데이터 묶음 크기의 상한
속도 1초에 나를 수 있는 양. 비트 수로 적는다

패킷은 네트워크를 지나가는 데이터 한 묶음입니다. 데이터는 한 덩어리로 가지 않고 이 묶음으로 잘려서 갑니다. 표의 최대 전송 단위는 이 묶음 하나의 크기 상한입니다.

최대 전송 단위는 줄여서 MTU(Maximum Transmission Unit, 최대 전송 단위)라고 부릅니다. 보낼 데이터가 MTU 보다 크면 여러 패킷으로 나눠 보냅니다. 유선 랜이 쓰는 방식인 이더넷에서는 대개 1500바이트입니다.

속도는 이 문의 폭입니다. 1초에 10억 비트를 나르는 인터페이스라면 그보다 많이 보내려 해도 한꺼번에는 못 지나갑니다. 뒤의 「문마다 재는 값」이 이 폭을 기준으로 삼습니다.

나갈 문 고르기

데이터를 보낼 때 운영체제는 나갈 문을 하나 골라야 합니다. 이때 보는 표가 라우팅 테이블입니다. 라우팅 테이블은 「이 범위의 주소로 가려면 이 문으로 나가라」는 줄을 모아 둔 표입니다.

그 줄 가운데 일부는 인터페이스에 주소를 달 때 함께 생깁니다. 주소를 달면서 그 문 너머에 있는 주소 범위도 정하기 때문입니다. 와이파이 문에 192.168.0.10 을 달면서 192.168.0.0~192.168.0.255 는 이 문 너머라고 함께 정하는 식입니다. 이 범위를 서브넷이라고 합니다.

목적지가 서브넷 안이면 그 문으로 곧장 보냅니다. 범위 밖이면 패킷을 대신 넘겨 줄 장비가 필요합니다. 라우터는 자기 앞으로 오지 않은 패킷을 받아 목적지 쪽으로 넘겨 주는 장비입니다.

네트워크마다 바깥으로 나가는 길목에 라우터를 하나 정해 둡니다. 이 라우터를 게이트웨이라고 합니다. 집에서는 공유기가 게이트웨이입니다.

기본 경로는 「다른 줄에 맞지 않는 목적지는 전부 이 문으로 내보내 게이트웨이에 맡겨라」는 줄입니다. 모든 주소에 맞는 가장 넓은 줄이기도 합니다. 이 줄 덕분에 호스트는 세상의 모든 주소 범위를 몰라도 어디로든 보낼 수 있습니다.

맞는 줄이 여럿이면 범위가 가장 좁은 줄을 따릅니다. 좁은 줄일수록 목적지를 더 자세히 가리키기 때문입니다. 나갈 문을 고르는 순서를 그림으로 보면 이렇습니다.

flowchart TD
    A["보낼 패킷의 목적지 주소"] --> B{"기본 경로 말고도 맞는 줄이 있나"}
    B -->|"있다"| C["그 가운데 범위가 가장 좁은 줄의 문으로 내보낸다"]
    B -->|"없다"| D["기본 경로의 문으로 내보내 게이트웨이에 맡긴다"]

노트북의 유선 랜이 회사 내부망에 붙어 있다고 해 봅시다. 내부망은 회사 안에서만 쓰는 네트워크입니다. 라우팅 테이블에는 「10.0.0.0~10.255.255.255 는 유선 랜 문으로」라는 줄이 있습니다.

목적지가 10.1.2.3 이면 이 줄과 기본 경로가 함께 맞습니다. 범위가 더 좁은 내부망 줄을 따르므로 패킷은 유선 랜 문으로 나갑니다. 목적지가 내부망 밖이면 기본 경로만 맞습니다. 그때는 기본 경로가 가리키는 문으로 나갑니다.

받을 문 고르기

받는 쪽에서도 문을 고릅니다. 프로그램이 네트워크로 데이터를 주고받으려면 운영체제에 통신 끝점을 하나 만들어 달라고 합니다. 이 끝점이 소켓입니다.

서버 프로그램은 소켓을 만든 뒤 어느 주소에서 연결을 기다릴지 정합니다. 이 일을 바인드라고 부릅니다. 바인드를 해야 찾아온 연결이 어느 소켓으로 갈지 운영체제가 압니다.

주소가 인터페이스에 붙어 있으므로 주소를 고르는 것은 곧 문을 고르는 것입니다. 어느 주소에 묶느냐에 따라 받아 주는 연결이 이렇게 갈립니다.

묶는 주소 받아 주는 연결
127.0.0.1 같은 호스트 안에서 온 연결만
내부망 쪽 인터페이스의 주소 그 주소로 찾아온 연결만
0.0.0.0 모든 인터페이스로 들어온 연결

노트북에서 띄운 개발용 서버를 127.0.0.1 에 묶으면 같은 와이파이의 다른 기기는 들어오지 못합니다. 0.0.0.0 에 묶으면 와이파이 쪽 문으로도 들어올 수 있습니다.

서버 한 대에 문이 둘 달려 있다고 해 봅시다. 하나는 회사 내부망에, 다른 하나는 인터넷 쪽 바깥 망에 붙어 있습니다.

memcached 같은 캐시 서버나 MySQL 같은 데이터베이스는 바깥에 드러나면 안 됩니다. 이런 서버를 내부망 쪽 주소에만 묶으면 바깥 쪽 주소로 찾아온 연결은 닿지 못합니다. 방화벽과 별개로 서버 스스로 거는 문단속입니다.

문마다 재는 값

운영체제는 인터페이스마다 드나든 양을 셉니다. 보낸 바이트와 받은 바이트가 따로 쌓입니다. 보낸 패킷, 받은 패킷, 오류, 버린 패킷의 수도 저마다 쌓입니다.

이 수들을 인터페이스 카운터라고 부릅니다. 카운터는 켜진 뒤로 늘어나기만 합니다. 그래서 두 시점의 값을 빼야 그 사이에 얼마나 흘렀는지 나옵니다. 이 차이로 아래 지표를 계산합니다.

지표 계산하는 법 알려 주는 것
처리량 두 시점 사이 바이트 증가분 ÷ 걸린 시간 지금 얼마나 흐르나
사용률 처리량 ÷ 인터페이스 속도 문의 폭을 얼마나 채웠나
오류 오류 카운터의 증가분 선이나 장치가 성한가
버림 버린 패킷 수의 증가분 문 앞에서 넘쳐 버려졌나

카운터는 바이트로 세고 속도는 초당 비트로 적습니다. 사용률을 계산할 때는 바이트에 8을 곱해 단위를 맞춥니다.

사용률이 가득 차면 보낼 패킷이 문 앞 큐에 쌓입니다. 큐까지 차면 그 뒤로 오는 패킷은 버려집니다. 그래서 성능을 볼 때 인터페이스는 CPU(Central Processing Unit, 중앙 처리 장치) · 메모리 · 디스크와 나란히 재는 자원입니다.

여러 장비의 인터페이스 값을 한곳에 모으는 일은 SNMP(Simple Network Management Protocol, 간이 망 관리 프로토콜)가 흔히 맡습니다. 여기서 장비에는 호스트뿐 아니라 라우터와 스위치도 들어갑니다. 스위치는 한 네트워크 안의 기기들을 선으로 이어 주는 장비입니다. 감시 서버가 이 장비들의 인터페이스마다 카운터를 읽어 가서 그래프로 그립니다.

관련 항목

네트워크 인터페이스를 가진 장비

호스트 · 노드 · 라우터 · 스위치 · 게이트웨이 · 공유기 · 네트워크 장치

네트워크 인터페이스 뒤에 놓이는 하드웨어와 계층

네트워크 인터페이스 카드 · 랜 카드 · 이더넷 · 와이파이 · 무선 랜 · 디바이스 드라이버 · 물리 계층 · 링크 계층

네트워크 인터페이스의 하위 종류

루프백 인터페이스 · 가상 인터페이스 · veth · 브리지 인터페이스 · 터널 인터페이스 · VLAN · 본딩

네트워크 인터페이스에 붙는 주소와 설정

IP 주소 · MAC 주소 · 서브넷 · 서브넷 마스크 · MTU · IPv4 · IPv6 · DHCP · localhost · 루프백

나갈 인터페이스를 정하는 라우팅 규칙

라우팅 · 라우팅 테이블 · 기본 경로 · 최장 접두사 일치 · 멀티홈드 호스트 · 패킷

인터페이스에 묶여 연결을 받는 소켓 개념

소켓 · 바인드 · 리슨 · 포트 · 와일드카드 주소 · 방화벽

네트워크 인터페이스를 재는 지표

처리량 · 대역폭 · 사용률 · 패킷 드롭 · 인터페이스 카운터 · 큐 · SNMP · 성능

인터페이스를 만들어 쓰는 가상화 기술

컨테이너 · 가상 머신 · Docker · VPN · 네트워크 네임스페이스 · 가상 스위치

네트워크 인터페이스를 살피는 명령

ifconfig · iproute2 · ethtool · tcpdump · netstat

다른 이름: network interface