사전 IP
표준

IP

gabury1고친 사람 github-actions[bot]

IP 는 인터넷에서 데이터를 받는 쪽까지 보내 주는 약속입니다. 보내는 쪽이 적어 둔 주소만 보고, 중간 장비들이 한 구간씩 넘겨 목적지 쪽으로 밀어 줍니다. 무사히 닿았는지, 보낸 순서대로 닿았는지는 챙기지 않습니다. 「IP 주소」를 줄여 IP 라 부르기도 하고 계약 문서에서는 지식재산권을 뜻하지만, 이 편이 다루는 것은 데이터를 보내는 약속입니다.

쉽고 빠른 이해

IP 는 데이터 덩이 앞에 받는 곳 주소를 붙여 인터넷으로 내보내는 약속입니다. 봉투에 주소를 적어 우체통에 넣으면 중간 우체국들이 알아서 넘겨 주는 것과 닮았습니다.

세상의 네트워크는 회사 것, 집 것, 통신사 것이 저마다 다릅니다. IP 는 그 위에 공통 주소와 공통 덩이 모양을 하나씩 얹습니다. 그래서 어느 네트워크를 거치든 같은 방법으로 목적지를 찾아갑니다.

어떻게 도나:

  1. 보내는 쪽이 데이터 앞에 출발지와 목적지 주소를 붙입니다
  2. 중간 장비가 목적지 주소만 보고 다음 장비를 골라 넘깁니다
  3. 목적지 장비가 그 주소를 자기 것으로 알아보고 안에 든 데이터를 꺼냅니다

대가는 확인이 없다는 것입니다. 덩이가 버려지거나 순서가 뒤바뀌어도 IP 는 알려 주지 않습니다. 빠짐없이 순서대로 받아야 하는 프로그램은 그 일을 위 계층 프로토콜에 맡깁니다.

상세

IP 는 Internet Protocol 의 줄임말입니다. 이 절은 IP 가 나르는 덩이의 생김새와, 중간 장비가 그 덩이를 넘기는 판단을 봅니다.

IP 가 나르는 덩이 하나를 데이터그램이라고 부릅니다. 데이터그램은 받는 곳 주소를 스스로 달고 혼자 떠나는 데이터 한 덩이입니다. 앞 덩이가 어떻게 됐는지 몰라도 이 덩이 하나만 열어 보면 어디로 넘길지 정할 수 있습니다. 실무에서는 패킷이라는 넓은 말로도 자주 부릅니다.

네트워크가 하는 일은 여러 계층으로 나눠 봅니다. IP 는 여러 네트워크를 건너 목적지까지 보내는 인터넷 계층에 섭니다.

그 위는 전송 계층입니다. 양 끝 프로그램 사이를 챙깁니다. 그 아래는 링크 계층입니다. 장비와 장비 사이 한 구간을 실제로 건넙니다.

block-beta
    columns 1
    T["전송 계층"]
    I["인터넷 계층 · IP"]
    L["링크 계층"]

덩이 앞에 붙는 안내문

데이터그램은 안내문과 알맹이로 이루어집니다. 앞에 붙는 안내문을 헤더라고 합니다. 중간 장비는 알맹이를 들여다보지 않고 이 헤더만 읽습니다.

헤더를 읽으려면 낱말 둘을 먼저 풀어야 합니다. IP 주소는 네트워크에 붙은 기계마다 하나씩 주어지는 번호입니다. IPv4 에서는 192.168.0.1 처럼 점으로 나눈 네 칸에 적습니다. 한 칸이 8비트입니다.

나머지 하나는 홉입니다. 장비와 장비 사이 한 구간이 홉 하나입니다.

헤더가 적는 것은 크게 다섯입니다.

헤더가 적는 것 무엇에 쓰나
목적지 IP 주소 중간 장비가 다음에 어디로 넘길지 정합니다
출발지 IP 주소 받는 쪽이 답을 돌려보낼 곳을 압니다
남은 홉 수 길을 뱅뱅 도는 덩이를 어디선가 버리게 합니다
위 계층 표시 도착한 쪽이 알맹이를 위 계층의 어느 프로토콜에 넘길지 압니다
조각 정보 잘라 보낸 덩이를 받는 쪽이 도로 붙입니다

남은 홉 수는 앞으로 몇 홉을 더 건널 수 있는지를 적은 값입니다. 이름은 TTL(Time To Live, 살아 있을 시간)입니다. 장비를 하나 지날 때마다 하나씩 줍니다. 0 이 되면 그 덩이는 버려집니다.

길이 잘못 이어져 덩이가 같은 곳을 맴돌더라도 언젠가는 사라지게 하는 장치입니다.

홉 단위 전달

보내는 쪽은 목적지까지 가는 길 전체를 모릅니다. 아는 것은 바로 옆 장비뿐이고, 그 장비도 다시 자기 옆 장비만 압니다. 이렇게 한 홉씩 건넵니다. 홉과 홉 사이에서 덩이를 받아 넘기는 장비가 라우터입니다.

라우터가 다음 장비를 고르는 일이 라우팅입니다. 라우팅 테이블은 어떤 주소 대역이 어느 이웃 쪽에 있는지를 적어 둔 표입니다. 라우터는 이 표에서 목적지 주소에 맞는 줄을 찾습니다. 그 줄이 가리키는 이웃에게 덩이를 넘깁니다.

sequenceDiagram
    participant 보내는 호스트
    participant 라우터 A
    participant 라우터 B
    participant 받는 호스트
    보내는 호스트->>라우터 A: 목적지 주소를 단 데이터그램
    Note over 라우터 A: 라우팅 테이블에서 그 주소 대역을 찾아 이웃을 고른다
    라우터 A->>라우터 B: 같은 데이터그램을 그대로 넘긴다
    Note over 라우터 B: 라우팅 테이블을 다시 본다
    라우터 B->>받는 호스트: 목적지 주소가 이 호스트의 것이다
    Note over 보내는 호스트,받는 호스트: 잘 받았다는 답은 IP 가 돌려주지 않는다

라우터는 덩이를 넘긴 뒤 그 덩이를 잊습니다. 누가 누구와 통신 중인지 기억하지 않습니다. 그래서 다음 덩이는 사정에 따라 다른 길을 탈 수도 있습니다.

라우터의 판단 두 칸

라우터의 판단은 헤더 두 칸으로 끝납니다. 먼저 목적지 주소가 자기 것인지 봅니다. 자기 것이 아니면 남은 홉 수가 아직 있는지 봅니다.

flowchart TD
    A[데이터그램 도착] --> B{목적지 주소가 나인가}
    B -->|맞다| C[알맹이를 위 계층에 넘긴다]
    B -->|아니다| D{남은 홉 수가 0인가}
    D -->|맞다| E[버린다]
    D -->|아니다| F[남은 홉 수를 하나 줄여 다음 장비로 넘긴다]

판단이 이만큼 단순해서 라우터는 덩이를 빠르게 흘려보낼 수 있습니다. 한 덩이를 처리하려고 앞뒤 덩이를 기다릴 일도, 연결마다 기억을 쌓을 일도 없습니다.

약속하지 않는 것

IP 의 약속은 보내 보겠다는 것 하나입니다. 이것을 최선형 전달이라고 부릅니다. 무엇을 약속하지 않는지를 알아야 위 계층을 고를 수 있습니다.

약속하지 않는 것 그래서 생기는 일
도착 라우터에 덩이가 몰리면 넘치는 만큼 버려집니다
순서 다른 길을 탄 뒤 덩이가 먼저 닿기도 합니다
중복 없음 같은 덩이가 두 번 닿기도 합니다

이 빈틈은 양 끝의 프로그램이 메웁니다. TCP(Transmission Control Protocol, 전송 제어 프로토콜)는 보내는 데이터에 번호를 매깁니다. 빠진 것은 다시 보내고 순서도 맞춥니다. UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)는 그 일을 하지 않고 IP 의 성질을 프로그램에 거의 그대로 넘깁니다.

가운데는 단순하게 두고 챙길 일은 양 끝에서 하는 설계입니다. 이 생각을 종단 간 원칙이라고 부릅니다. 가운데 장비가 할 일이 적어야 네트워크를 크게 넓힐 수 있기 때문입니다.

네트워크마다 다른 것을 덮는 공통 계층

IP 가 없다고 해 봅시다. 네트워크마다 주소를 붙이는 방법도, 한 번에 실을 수 있는 크기도, 전달하는 방식도 다릅니다. 두 네트워크를 이으려면 그 둘만을 위한 번역기를 만들어야 합니다. 네트워크가 늘어날수록 번역기 수가 걷잡을 수 없이 불어납니다.

flowchart TD
    subgraph 없다["IP 가 없으면 · 네트워크 넷에 번역기 여섯"]
        A1[네트워크 가] --- A2[네트워크 나]
        A1 --- A3[네트워크 다]
        A1 --- A4[네트워크 라]
        A2 --- A3
        A2 --- A4
        A3 --- A4
    end
    subgraph 있다["IP 가 있으면 · 네트워크 넷에 얹는 곳 넷"]
        B1[네트워크 가] --- P[IP]
        B2[네트워크 나] --- P
        B3[네트워크 다] --- P
        B4[네트워크 라] --- P
    end
    없다 ~~~ 있다

IP 는 네트워크마다 다른 것을 덮어 버리는 얇은 공통 계층입니다. 주소를 붙이는 방법 하나와 덩이 모양 하나만 정합니다. 실제로 선을 타고 건너는 일은 아래 계층에 맡깁니다. 그래서 새 전송 기술이 나와도 그 위에 IP 를 얹으면 인터넷에 붙습니다.

중간 장비가 연결을 기억하지 않는다는 성질도 여기서 나옵니다. 장비 하나가 멈춰도 다음 덩이부터 다른 길로 돌아가면 됩니다. 수많은 네트워크를 이어 붙인 인터넷이 이 방식을 바탕으로 삼은 까닭입니다.

링크마다 다른 크기 상한

덩이가 지나는 구간마다 한 번에 실을 수 있는 크기에 상한이 있습니다. 이 상한을 MTU(Maximum Transmission Unit, 최대 전송 단위)라고 부릅니다. 상한보다 큰 덩이는 그대로 지나가지 못합니다.

이럴 때 덩이는 여러 조각으로 잘려 갑니다. 자르는 일이 단편화입니다. 받는 쪽이 조각을 도로 붙이는 일이 재조립입니다. 헤더의 조각 정보가 이 일에 쓰입니다.

조각도 각자 따로 갑니다. 하나만 잃어도 받는 쪽은 원래 덩이를 못 맞춥니다. 나머지 조각까지 버립니다.

flowchart TD
    D["원래 데이터그램 · 헤더 + 알맹이"] --> 조각
    subgraph 조각["상한에 맞춰 자른 조각 · 각자 따로 간다"]
        F1["조각 1 · 헤더 + 알맹이 앞부분"]
        F2["조각 2 · 헤더 + 알맹이 가운데"]
        F3["조각 3 · 헤더 + 알맹이 뒷부분"]
    end
    조각 --> R["하나라도 못 닿으면 재조립 실패 · 닿은 조각도 버린다"]

그래서 보내는 쪽이 길의 상한을 미리 알아내 처음부터 그보다 작게 보내는 방법을 씁니다. 그 방법이 경로 MTU 탐색입니다.

두 판본 — IPv4 와 IPv6

IP 에는 판본이 둘 있고 지금은 둘이 함께 돌아갑니다. IPv4 의 주소는 32비트입니다. 붙일 수 있는 주소 개수가 한정돼 있어, 인터넷에 붙는 기계가 늘자 모자라게 됐습니다. 여러 대가 주소 하나를 나눠 쓰도록 주소를 바꿔 주는 NAT(Network Address Translation, 네트워크 주소 변환)가 이 모자람을 미뤄 왔습니다.

IPv6는 주소를 128비트로 늘렸습니다. 헤더도 손봐서 중간 라우터가 덩이를 자르지 않게 했습니다. 두 판본은 서로 알아듣지 못하므로 한쪽만 쓰는 상대와 이야기하려면 중간에 옮겨 주는 장치가 필요합니다.

잘못됐다고 알려 주는 곁 프로토콜

IP 자신은 결과를 알려 주지 않지만, 옆에 붙어 사정을 알리는 프로토콜이 하나 있습니다. ICMP(Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜)입니다. 목적지를 못 찾겠다, 남은 홉 수가 다 됐다, 덩이가 너무 커서 못 지나간다 같은 알림을 출발지로 돌려보냅니다.

이 알림도 결국 IP 데이터그램에 실려 갑니다. 그래서 알림 자체도 도중에 버려질 수 있습니다. 중간 장비가 막아 두어 아예 안 오기도 합니다. 알림이 오면 도움이 되는 것이지 온다는 보장이 있는 것은 아닙니다.

IP 에 맡기는 일과 맡기지 않는 일

무엇을 IP 에 맡기고 무엇을 위 계층에 맡기는지를 가르면 고를 것이 분명해집니다.

IP 가 하는 일 IP 가 하지 않는 일
주소를 보고 목적지까지 보냅니다 도착했는지 확인하지 않습니다
성질이 다른 네트워크를 건넙니다 순서를 맞추지 않습니다
구간 상한에 맞춰 덩이를 자릅니다 어느 프로그램에게 줄지 가리지 않습니다

마지막 칸이 프로그램을 짜는 쪽에 바로 걸립니다. 한 기계 안에서는 여러 프로그램이 동시에 통신합니다. 알맹이를 누구에게 줄지 가리는 일은 전송 계층의 포트 번호가 맡습니다. 그래서 응용 프로그램은 IP 만 쓰지 않고 TCP 나 UDP 를 골라 얹습니다.

그래도 백엔드 일에서 IP 는 자주 튀어나옵니다. 서버에 붙은 주소를 ip addr 로 확인할 때, 연결이 어느 구간에서 끊기는지 traceroute 로 짚을 때, 방화벽에 10.0.0.0/8 같은 대역만 열어 둘 때가 그렇습니다.

관련 항목

IP 위에 얹혀 도는 프로토콜

TCP · UDP · QUIC · ICMP · IGMP · IPsec

IP 데이터그램 헤더를 이루는 구성 요소

헤더 · IP 주소 · TTL · 프로토콜 번호 · 체크섬 · 페이로드

IP 를 정의하는 판본과 문서

IPv4 · IPv6 · RFC · IETF · IANA

IP 데이터그램이 목적지까지 거치는 처리 단계

캡슐화 · 라우팅 · 포워딩 · 단편화 · 재조립 · MTU · 경로 MTU 탐색

IP 데이터그램을 받아 넘기는 장비

라우터 · 게이트웨이 · 스위치 · 방화벽 · NAT · 로드 밸런서

IP 주소를 나누고 풀어 주는 주소 체계

MAC 주소 · 서브넷 · 서브넷 마스크 · CIDR · ARP · DNS · 포트 번호

IP 전달에서 자주 나는 오류

패킷 손실 · 순서 뒤바뀜 · 혼잡 · 라우팅 루프 · IP 스푸핑

IP 가 따르는 설계 원칙

최선형 전달 · 종단 간 원칙 · 비연결형 · 패킷 교환 · 계층

IP 가 속하는 상위 분류

네트워크 · 인터넷 · 프로토콜 · 인터넷 계층 · TCP/IP 모델 · OSI 모델

IP 전달을 들여다보는 명령과 도구

ping · traceroute · tcpdump · Wireshark · netstat

다른 이름: Internet Protocol · 인터넷 프로토콜 · 인터넷 규약