사전 인터넷 계층
개념

인터넷 계층

gabury1고친 사람 github-actions[bot]

인터넷 계층은 데이터를 여러 네트워크를 건너 목적지 컴퓨터까지 옮겨 줍니다. 컴퓨터마다 주소를 붙입니다. 길목의 장비들이 그 주소를 보고 한 구간씩 넘겨 보냅니다. 따로 운영되는 여러 네트워크가 하나의 인터넷으로 이어지는 것이 이 계층 덕분입니다. 대신 데이터가 무사히 닿았는지는 챙기지 않습니다.

쉽고 빠른 이해

네트워크 통신은 여러 층으로 나뉘어 층마다 한 가지 일을 맡습니다. 인터넷 계층은 그 가운데 데이터 덩이를 목적지 컴퓨터까지 보내 주는 층입니다. 내 노트북에서 보낸 요청이 멀리 있는 데이터센터의 서버에 닿는 것도 이 계층이 길을 이어 준 결과입니다.

이게 없으면 선으로 바로 이어진 옆 장비끼리만 데이터를 주고받을 수 있습니다. 집 공유기 너머에 있는 컴퓨터에는 보낼 방법이 없습니다.

인터넷 계층은 이렇게 돕니다:

  1. 보내는 쪽이 데이터 덩이 앞에 출발지 주소와 목적지 주소를 붙입니다
  2. 길목의 장비가 목적지 주소만 보고 다음 장비를 골라 넘깁니다
  3. 목적지 컴퓨터가 자기 주소를 알아보고 덩이를 받아 바로 위 층에 올립니다

대가는 확인이 없다는 것입니다. 덩이가 중간에 버려지거나 순서가 바뀌어도 이 계층은 바로잡지 않습니다. 그 뒷수습은 프로그램에 더 가까운 위 층이 맡습니다.

상세

편지를 우체통에 넣으면 여러 우체국을 거쳐 받는 사람에게 갑니다. 어느 우체국도 처음부터 끝까지의 길을 다 알지 못합니다. 봉투의 주소만 보고 그 주소에 더 가까운 다음 우체국으로 넘길 뿐입니다.

인터넷 계층(internet layer)은 출발 컴퓨터에서 목적지 컴퓨터까지 데이터를 옮기는 계층입니다. 둘 사이에 네트워크가 몇 개 끼어 있든 상관없이 끝까지 데려다 놓습니다. 이 일에 쓰는 도구는 둘입니다. 컴퓨터마다 붙는 주소와, 그 주소를 보고 다음 구간을 고르는 일입니다.

이 계층의 대표 프로토콜이 IP(Internet Protocol, 인터넷 프로토콜)입니다. 주소를 어떻게 적을지도 IP 가 정하므로 이 주소를 IP 주소라고 부릅니다. 이 계층을 IP 계층이라고도 부르는 까닭입니다.

네 계층 가운데 아래에서 둘째

네트워크 소프트웨어는 통신을 여러 계층으로 나눠 층마다 한 가지 일만 맡깁니다. 인터넷이 쓰는 모델은 네 층입니다. 위에서부터 응용 계층 · 전송 계층 · 인터넷 계층 · 링크 계층입니다.

이 네 층을 TCP/IP 모델이라고 부릅니다. 대표 프로토콜인 TCP(Transmission Control Protocol, 전송 제어 프로토콜)와 IP 의 이름을 따온 것입니다.

보낼 데이터는 위에서 아래로 내려오며 층마다 맡은 일을 거칩니다. 인터넷 계층은 그 가운데 「어느 컴퓨터로, 어느 길로」를 맡습니다.

flowchart TD
    A["응용 계층 · 무엇을 주고받나"] --> B["전송 계층 · 어느 프로그램에 줄까"]
    B --> C["인터넷 계층 · 어느 컴퓨터로, 어느 길로"]
    C --> D["링크 계층 · 선으로 이어진 옆 장비까지"]

바로 아래 링크 계층은 선으로 직접 이어진 옆 장비까지만 데이터를 건넵니다. 바로 위 전송 계층은 목적지 컴퓨터 안에서 어느 프로그램에 줄지를 정합니다. 인터넷 계층은 그 사이를 채웁니다. 옆 장비 너머 목적지 컴퓨터의 문 앞까지 데이터를 데려갑니다.

통신을 일곱 층으로 나누는 OSI(Open Systems Interconnection, 개방형 시스템 상호연결) 7계층 모델도 있습니다. 이 모델에서는 같은 역할을 네트워크 계층이 맡습니다. 그래서 실무에서는 두 이름을 섞어 씁니다.

OSI 는 층을 아래에서부터 셉니다. TCP/IP 모델의 링크 계층이 맡는 일을 OSI 는 물리 계층과 데이터 링크 계층 두 층으로 나눕니다. 그래서 번호가 하나 밀려 네트워크 계층이 3번째 층이 됩니다.

이 층을 L3(Layer 3, 3계층)라고도 합니다. OSI 쪽 번호를 따른 이름입니다.

여러 네트워크를 하나로 잇는 계층

네트워크는 하나가 아닙니다. 집의 와이파이, 회사의 사내망, 통신사의 망, 데이터센터의 망이 저마다 따로 있습니다. 네트워크마다 선의 종류가 다릅니다. 안에서 장비를 가리키는 주소도 다릅니다.

링크 계층의 주소는 자기 네트워크 안에서만 통합니다. 그 주소로는 다른 네트워크에 있는 컴퓨터를 가리킬 수 없습니다. 인터넷 계층은 모든 네트워크 위에 공통 주소 체계 하나를 얹어 이 문제를 풉니다.

인터넷(internet)이라는 이름도 여기서 왔습니다. 네트워크와 네트워크 사이(internetwork)를 잇는다는 뜻입니다. 인터넷 계층이 없으면 컴퓨터는 같은 네트워크 안의 상대하고만 통신할 수 있습니다.

목적지를 가리키는 IP 주소

보내는 쪽은 데이터 앞에 출발지 IP 주소와 목적지 IP 주소를 적습니다. 목적지 주소는 가는 내내 최종 목적지를 가리킵니다. 길목에서 데이터를 넘기는 장비를 라우터라고 합니다. 라우터는 대개 이 주소를 읽기만 하고 고쳐 쓰지 않습니다.

구간마다 새로 적히는 링크 계층의 주소와 다른 점입니다. 링크 계층의 주소는 바로 옆 장비를 가리키므로 한 구간을 건널 때마다 바뀝니다. IP 주소는 끝을 가리키므로 처음부터 끝까지 같습니다.

IP 주소는 두 토막으로 읽습니다. 앞 토막은 컴퓨터가 속한 네트워크를 가리킵니다. 뒤 토막은 그 네트워크 안의 컴퓨터 하나를 가리킵니다. 앞 토막이 같은 주소들의 묶음을 서브넷이라고 부릅니다.

앞 토막 덕분에 길목의 장비는 컴퓨터 하나하나의 위치를 외울 필요가 없습니다. 목적지 네트워크로 가는 길만 알면 됩니다. 인터넷에 붙은 컴퓨터가 아무리 많아도 길 찾기가 감당할 만한 크기로 남는 까닭입니다.

주소를 적는 방식은 두 판이 함께 쓰입니다. 두 판은 주소 길이와 적는 모양이 다릅니다.

판 주소 길이 적는 모양
IPv4 32비트 192.0.2.1
IPv6 128비트 2001:db8::1

라우터가 한 홉씩 넘기는 방식

네트워크와 네트워크가 만나는 경계에는 라우터가 섭니다. 라우터는 두 네트워크 이상에 한꺼번에 붙어 있는 장비입니다. 한쪽에서 들어온 데이터를 다른 쪽으로 넘겨 주는 일을 합니다.

라우터는 데이터가 도착하면 목적지 IP 주소를 읽습니다. 그리고 자기가 가진 표에서 그 주소로 가려면 어느 이웃에게 넘겨야 하는지 찾습니다. 이 표를 라우팅 테이블이라고 합니다.

표가 알려 주는 것은 끝까지의 길이 아니라 바로 다음 장비 하나입니다. 이 다음 장비를 다음 홉이라고 부릅니다. 데이터는 라우터에서 라우터로 한 홉씩 옮겨 가며 목적지에 다가갑니다.

표에 맞는 줄이 없을 때를 대비해 라우터는 대개 기본 경로를 한 줄 둡니다. 모르는 목적지는 전부 그쪽으로 보내라는 줄입니다. 집 공유기의 라우팅 테이블은 거의 이 한 줄로 이루어져 통신사 쪽을 가리킵니다.

표를 보고 데이터를 넘기는 동작과 표를 채우는 일은 이름이 따로 있습니다. 넘기는 동작은 포워딩입니다. 표를 채우는 일은 라우팅입니다.

표는 관리자가 손으로 적어 넣을 수도 있습니다. 네트워크가 커지면 라우터들이 서로 경로 정보를 주고받아 표를 채웁니다. 이때 주고받는 약속을 라우팅 프로토콜이라고 합니다.

떠도는 데이터를 막는 수명 값

라우팅 테이블이 잘못 채워지면 데이터가 라우터 몇 대 사이를 빙빙 돌 수 있습니다. 이런 데이터를 내버려 두면 계속 쌓여 네트워크를 막습니다.

그래서 인터넷 계층은 데이터마다 수명 값을 붙입니다. 이 값을 TTL(Time To Live, 생존 시간)이라고 부릅니다. 라우터를 하나 지날 때마다 1씩 줄어듭니다. 0 이 되면 그 라우터가 데이터를 버립니다.

이름은 시간이지만 세는 것은 거쳐 간 라우터 수입니다. IPv6 는 이 값의 이름을 Hop Limit(홉 제한)로 바꿔 뜻을 맞췄습니다.

데이터를 버린 라우터는 보낸 쪽에 그 사실을 알립니다. 알림은 ICMP(Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜)라는 프로토콜로 보냅니다. ICMP 는 인터넷 계층에서 배달 중에 생긴 문제를 알리는 데 쓰입니다.

라우터 하나가 데이터 한 덩이를 받으면 아래 두 갈림을 거칩니다. 수명이 다했거나 기본 경로까지 없어 갈 곳을 못 찾으면 버리고 알립니다. 둘 다 통과하면 다음 홉으로 넘깁니다.

flowchart TD
    A["데이터 도착"] --> B{"TTL 을 1 줄이면 0 인가"}
    B -->|"0 이다"| X["버리고 ICMP 로 보낸 쪽에 알린다"]
    B -->|"남았다"| C{"맞는 줄이나 기본 경로가 있나"}
    C -->|"없다"| X
    C -->|"있다"| D["그 줄의 다음 홉으로 넘긴다"]

도착을 약속하지 않는 전달

인터넷 계층은 보내기 전에 상대와 연결을 맺지 않습니다. 데이터 덩이 하나하나가 목적지 주소를 품고 제각각 길을 찾아갑니다. 이런 방식을 비연결형이라고 부릅니다.

이 계층은 데이터를 목적지 쪽으로 보내려고 애쓸 뿐 도착을 약속하지 않습니다. 이런 전달을 최선형 전달(best-effort delivery)이라고 부릅니다. 라우터가 감당할 수 있는 양보다 많은 데이터가 몰리면 넘치는 덩이는 버려집니다.

잃는 것만이 아닙니다. 같은 목적지로 보낸 덩이들이 서로 다른 길로 가서 순서가 바뀌어 닿기도 합니다. 같은 덩이가 두 번 닿는 일도 드물게 생깁니다.

인터넷 계층은 이 가운데 어느 것도 바로잡지 않습니다. 빠진 덩이를 다시 보내고 순서를 맞추는 일은 위 계층의 TCP가 맡습니다. UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)를 쓰는 프로그램은 필요한 만큼 스스로 챙깁니다.

이렇게 만든 까닭은 길목의 장비를 단순하게 두려는 것입니다. 라우터가 덩이마다 도착을 확인하려면 지나가는 모든 통신의 상태를 기억해야 합니다. 확인을 양 끝의 컴퓨터에 맡기면 라우터는 주소를 보고 넘기는 일만 하면 됩니다. 이 생각을 종단 간 원칙이라고 부릅니다.

헤더를 한 겹 씌운 패킷

전송 계층이 넘겨준 데이터는 인터넷 계층에서 앞에 헤더 하나를 더 얻습니다. 헤더는 데이터 앞에 붙는 배달용 정보입니다. 라우터가 읽을 주소와 수명 값이 여기 적힙니다.

이렇게 IP 헤더가 붙은 한 덩이를 패킷이라고 합니다. IP 데이터그램이라고도 부릅니다.

패킷은 세 부분으로 이루어집니다. 맨 앞이 인터넷 계층이 붙인 IP 헤더입니다. 그 뒤에 전송 계층이 붙인 헤더와 보낼 데이터가 이어집니다. 인터넷 계층은 뒤의 두 부분을 한 묶음으로 보고 속을 들여다보지 않습니다.

block-beta
columns 5
  a["IP 헤더 · 주소와 수명"]:2 b["전송 계층 헤더"]:1 c["보낼 데이터"]:2

이렇게 아래 계층이 위 계층의 덩이를 건드리지 않고 자기 헤더만 덧씌우는 방식을 캡슐화라고 부릅니다. 덕분에 인터넷 계층은 안에 무엇이 들었든 똑같이 나릅니다.

전송 계층 헤더에는 목적지 컴퓨터 안의 어느 프로그램에 줄지 가리키는 포트 번호가 들어 있습니다. 그 번호를 읽는 것은 목적지 컴퓨터의 전송 계층입니다.

IP 헤더에 적히는 칸을 모으면 이렇습니다.

헤더의 칸 적는 것 누가 읽나
출발지 IP 주소 보낸 컴퓨터의 주소 받는 쪽 · 알림을 돌려보낼 라우터
목적지 IP 주소 받을 컴퓨터의 주소 길목의 라우터마다
TTL 남은 수명 길목의 라우터마다
프로토콜 번호 안에 든 데이터가 TCP 것인지 UDP 것인지 받는 쪽

받는 쪽은 프로토콜 번호를 보고 안의 데이터를 전송 계층의 어느 프로토콜에 올릴지 정합니다.

구간마다 다른 크기 상한

선으로 이어진 한 구간이 한 번에 실어 나를 수 있는 크기에는 상한이 있습니다. 이 상한을 MTU(Maximum Transmission Unit, 최대 전송 단위)라고 합니다. 선의 종류가 구간마다 다르므로 이 값도 구간마다 다를 수 있습니다.

패킷이 다음 구간의 MTU 보다 크면 그 크기에 맞게 잘라 보내야 합니다. 이렇게 자르는 일을 단편화라고 합니다.

언제 이 계층을 신경 쓰나

백엔드 코드는 이 계층을 직접 다루지 않습니다. 프로그램은 운영체제에서 소켓이라는 통신 통로를 엽니다. 거기에 목적지 IP 주소와 포트만 넘깁니다. 헤더를 붙이고 다음 홉을 고르는 일은 운영체제가 맡습니다. 그래도 이 계층의 성질이 운영에서 드러나는 때가 있습니다.

서버에 요청이 안 닿으면 먼저 이 계층까지 길이 뚫렸는지 봅니다. ping 은 ICMP 로 상대에게 답을 청하는 도구입니다. 답이 오면 두 컴퓨터 사이에 인터넷 계층의 길은 이어져 있다는 뜻입니다.

traceroute 는 수명 값을 거꾸로 써먹는 도구입니다. TTL 을 1, 2, 3 으로 늘려 가며 보냅니다. 수명이 다한 라우터마다 ICMP 알림을 돌려보내므로 거쳐 간 라우터가 차례로 드러납니다.

방화벽과 클라우드의 보안 그룹 규칙은 대개 IP 주소의 묶음으로 적습니다. 묶음은 10.0.0.0/16 처럼 주소 뒤에 앞 토막의 비트 수를 붙여 적습니다. 이 표기를 CIDR(Classless Inter-Domain Routing, 클래스 없는 도메인 간 라우팅) 표기라고 부릅니다.

서버가 보는 출발지 IP 주소가 사용자 컴퓨터의 주소라는 보장은 없습니다. 집 공유기처럼 NAT(Network Address Translation, 네트워크 주소 변환)를 하는 장비는 지나가는 패킷의 출발지 주소를 자기 주소로 바꿔 답니다. 집 안의 여러 컴퓨터가 바깥 주소 하나를 나눠 쓰게 하려는 것입니다. 중간에 프록시가 끼어도 서버에는 프록시의 주소가 보입니다.

관련 항목

인터넷 계층 위아래에 있는 계층

응용 계층 · 전송 계층 · 링크 계층 · 물리 계층 · 데이터 링크 계층

인터넷 계층을 어디에 둘지 정하는 계층 모델

TCP-IP 모델 · OSI 7계층 · 네트워크 계층 · 계층 · 프로토콜 스택

인터넷 계층에서 일하는 프로토콜

IP · IPv4 · IPv6 · ICMP · ICMPv6 · IGMP · IPsec

인터넷 계층이 컴퓨터를 가리키는 주소

IP 주소 · 서브넷 · 서브넷 마스크 · CIDR · 사설 IP 주소 · 공인 IP 주소 · 루프백 주소 · 브로드캐스트 · 멀티캐스트 · 애니캐스트

인터넷 계층이 길을 고르는 방식

라우팅 · 포워딩 · 라우팅 테이블 · 다음 홉 · 기본 경로 · 최장 접두사 일치 · 정적 라우팅 · 동적 라우팅

라우팅 테이블을 채우는 라우팅 프로토콜

라우팅 프로토콜 · OSPF · BGP · RIP · IS-IS · 자율 시스템

인터넷 계층이 씌우는 헤더와 그 칸

패킷 · 데이터그램 · 헤더 · 캡슐화 · TTL · 프로토콜 번호 · 체크섬 · PDU

인터넷 계층이 약속하지 않는 전달의 성질

최선형 전달 · 비연결형 · 패킷 손실 · 순서 뒤바뀜 · 종단 간 원칙 · 신뢰성

인터넷 계층이 패킷 크기에 맞서는 장치

MTU · 단편화 · 경로 MTU 탐색 · MSS · 점보 프레임

인터넷 계층에서 패킷을 넘기는 장비

라우터 · L3 스위치 · 게이트웨이 · 공유기 · 호스트 · 네트워크 인터페이스 카드

인터넷 계층의 주소를 보고 바꾸는 장비와 규칙

NAT · 방화벽 · 보안 그룹 · 프록시 · 로드 밸런서 · VPN · 터널링

인터넷 계층의 길을 살피는 진단 도구

ping · traceroute · mtr · tcpdump · 패킷 캡처

다른 이름: internet layer · 인터넷층 · IP 계층