- Authors

- Name
- Youngju Kim
- @fjvbn20031
IP 프로토콜: 데이터그램과 주소 체계
IP(Internet Protocol)는 인터넷 네트워크 계층의 핵심 프로토콜입니다. 모든 인터넷 장비는 IP 프로토콜을 실행해야 하며, 이는 인터넷을 하나로 묶어주는 접착제 역할을 합니다.
이 글에서는 IPv4 데이터그램 형식, IP 단편화, 주소 체계(서브넷, CIDR, DHCP), NAT, ICMP, 그리고 IPv6의 등장과 전환 메커니즘을 살펴봅니다.
1. IPv4 데이터그램 형식
IPv4 데이터그램은 헤더와 데이터(페이로드)로 구성됩니다.
IPv4 데이터그램 헤더 (20바이트 기본)
=====================================
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source IP Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination IP Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options (가변 길이) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
주요 헤더 필드
| 필드 | 크기 | 설명 |
|---|---|---|
| Version | 4비트 | IP 버전 (IPv4 = 4) |
| IHL | 4비트 | 헤더 길이 (32비트 워드 단위) |
| Total Length | 16비트 | 데이터그램 전체 길이 (바이트) |
| TTL | 8비트 | 남은 홉 수, 0이 되면 폐기 |
| Protocol | 8비트 | 상위 계층 프로토콜 (TCP=6, UDP=17) |
| Header Checksum | 16비트 | 헤더 오류 검출 |
2. IP 단편화와 재조립
2.1 단편화가 필요한 이유
각 링크에는 MTU(Maximum Transmission Unit) 가 있어서 전송 가능한 최대 프레임 크기가 제한됩니다. IP 데이터그램이 MTU보다 크면 단편화(Fragmentation)해야 합니다.
IP 단편화 예시
================
원본 데이터그램: 4000바이트 (헤더 20 + 데이터 3980)
링크 MTU: 1500바이트
단편 1: [헤더 20] [데이터 1480] = 1500바이트
ID=x, MF=1, Offset=0
단편 2: [헤더 20] [데이터 1480] = 1500바이트
ID=x, MF=1, Offset=185 (1480/8)
단편 3: [헤더 20] [데이터 1020] = 1040바이트
ID=x, MF=0, Offset=370 (2960/8)
2.2 재조립
IP 단편화의 재조립은 중간 라우터가 아닌 최종 목적지 호스트에서만 수행됩니다. 이는 단편들이 서로 다른 경로로 도착할 수 있기 때문입니다.
- Identification: 같은 원본 데이터그램의 단편임을 식별
- MF (More Fragments) 플래그: 뒤에 더 많은 단편이 있는지 표시
- Fragment Offset: 원본 데이터에서의 위치 (8바이트 단위)
3. IPv4 주소 체계
3.1 IP 주소의 기본 구조
IPv4 주소는 32비트로 구성되며, 점으로 구분된 10진수(dotted decimal notation)로 표기합니다.
IP 주소 표기
=============
이진수: 11000000 10101000 00000001 00000001
10진수: 192.168.1.1
32비트 = 약 43억 개의 고유 주소
3.2 서브넷 (Subnet)
서브넷은 라우터를 거치지 않고 서로 직접 통신할 수 있는 장치들의 네트워크입니다.
서브넷 예시
============
223.1.1.0/24 서브넷
+-----------------------+
| |
223.1.1.1 223.1.1.2 223.1.1.3
[호스트] [호스트] [라우터]
|
223.1.2.9
|
+-----------------------+
| |
223.1.2.1 223.1.2.2 223.1.2.3
223.1.2.0/24 서브넷
3.3 CIDR (Classless Inter-Domain Routing)
CIDR는 클래스 기반 주소 체계의 비효율성을 해결합니다. 서브넷 마스크의 길이를 자유롭게 지정하여 주소 공간을 효율적으로 활용합니다.
CIDR 표기법
=============
200.23.16.0/20
주소: 200.23.16.0
서브넷 부분: 200.23.0001|0000.00000000
^20비트
이 서브넷에 포함된 호스트 범위:
200.23.16.0 ~ 200.23.31.255
총 2^12 = 4096개 주소
3.4 클래스 기반 주소 (역사적 참고)
CIDR 이전에는 A, B, C 클래스로 주소를 분류했습니다.
IP 주소 클래스
================
클래스 A: 0xxxxxxx | 24비트 호스트 (2^24 = 약 1600만 호스트)
클래스 B: 10xxxxxx xxxxxxxx | 16비트 (2^16 = 65,536 호스트)
클래스 C: 110xxxxx xxxxxxxx xxxxxxxx | 8비트 (2^8 = 256 호스트)
문제점: 클래스 B는 너무 크고, 클래스 C는 너무 작음
--> 주소 공간 낭비 --> CIDR 도입
4. DHCP (Dynamic Host Configuration Protocol)
4.1 DHCP의 역할
DHCP는 호스트가 네트워크에 접속할 때 IP 주소, 서브넷 마스크, 기본 게이트웨이, DNS 서버 주소를 자동으로 할당해주는 프로토콜입니다.
4.2 DHCP 동작 과정
DHCP는 4단계 과정(DORA)을 통해 동작합니다.
DHCP 4단계 과정 (DORA)
========================
클라이언트 DHCP 서버
| |
|--- 1. DHCP Discover (브로드캐스트) -->|
| src: 0.0.0.0 |
| dst: 255.255.255.255 |
| |
|<-- 2. DHCP Offer ------------------|
| 제안 IP: 192.168.1.100 |
| 임대 시간: 3600초 |
| |
|--- 3. DHCP Request (브로드캐스트) ->|
| 요청 IP: 192.168.1.100 |
| |
|<-- 4. DHCP ACK -------------------|
| 확정 IP: 192.168.1.100 |
| 서브넷: 255.255.255.0 |
| 게이트웨이: 192.168.1.1 |
| DNS: 8.8.8.8 |
| |
5. NAT (Network Address Translation)
5.1 NAT의 필요성
IPv4 주소 고갈 문제를 해결하기 위해 NAT가 도입되었습니다. NAT를 사용하면 하나의 공인 IP 주소로 여러 내부 호스트가 인터넷에 접속할 수 있습니다.
5.2 NAT 동작 원리
NAT 동작
=========
내부 네트워크 (사설 IP) NAT 라우터 외부 인터넷
10.0.0.0/24 138.76.29.7
[10.0.0.1:3345] ----> [138.76.29.7:5001] ----> 웹서버
[10.0.0.2:2890] ----> [138.76.29.7:5002] ----> 웹서버
[10.0.0.3:1789] ----> [138.76.29.7:5003] ----> 웹서버
NAT 변환 테이블:
+-------------------+----------------------+
| WAN 측 | LAN 측 |
+-------------------+----------------------+
| 138.76.29.7:5001 | 10.0.0.1:3345 |
| 138.76.29.7:5002 | 10.0.0.2:2890 |
| 138.76.29.7:5003 | 10.0.0.3:1789 |
+-------------------+----------------------+
5.3 NAT의 논란
NAT에 대해서는 여러 비판이 있습니다.
- 포트 번호는 프로세스 식별 용도인데 호스트 식별에 사용하는 것은 계층 위반
- 종단 간(end-to-end) 원칙을 위배
- 서버 운영 시 포트 포워딩 설정이 필요
- P2P 애플리케이션에서 연결 문제 발생
6. ICMP (Internet Control Message Protocol)
6.1 ICMP의 역할
ICMP는 네트워크 장비 간에 오류 보고와 정보 교환을 위한 프로토콜입니다. IP 데이터그램의 페이로드로 캡슐화되어 전송됩니다.
6.2 주요 ICMP 메시지
ICMP 메시지 유형
=================
타입 코드 설명
---- ---- ----------------------------------
0 0 Echo Reply (ping 응답)
3 0 Destination Network Unreachable
3 1 Destination Host Unreachable
3 3 Destination Port Unreachable
4 0 Source Quench (혼잡 제어)
8 0 Echo Request (ping 요청)
11 0 TTL Expired (traceroute에서 사용)
12 0 IP Header Bad
6.3 활용 예시: Traceroute
Traceroute는 TTL 값을 1부터 순차적으로 증가시키면서 UDP 패킷을 전송합니다. 각 라우터에서 TTL이 0이 되면 ICMP TTL Expired 메시지를 반환하여 경로상의 라우터를 파악합니다.
Traceroute 동작
=================
호스트 --> TTL=1 --> [R1] --> ICMP TTL Expired 반환
호스트 --> TTL=2 --> [R1] --> [R2] --> ICMP TTL Expired 반환
호스트 --> TTL=3 --> [R1] --> [R2] --> [R3] --> ICMP TTL Expired 반환
호스트 --> TTL=4 --> [R1] --> [R2] --> [R3] --> [목적지] --> ICMP Port Unreachable
7. IPv6
7.1 IPv6의 등장 배경
IPv4 주소 공간(약 43억)이 고갈되면서 IPv6가 개발되었습니다. IPv6는 128비트 주소를 사용하여 사실상 무한한 주소 공간을 제공합니다.
7.2 IPv6 데이터그램 형식
IPv6 헤더 (40바이트 고정)
==========================
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Traffic Class | Flow Label |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload Length | Next Header | Hop Limit |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| Source Address |
+ (128 bits) +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| Destination Address |
+ (128 bits) +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
7.3 IPv4 대비 주요 변화
IPv4 vs IPv6 비교
==================
항목 | IPv4 | IPv6
------------------+-------------------+--------------------
주소 크기 | 32비트 | 128비트
헤더 크기 | 가변 (20~60바이트) | 고정 40바이트
단편화 | 라우터에서 가능 | 출발지에서만 가능
체크섬 | 있음 | 없음 (상위 계층에 위임)
옵션 | 헤더에 포함 | 확장 헤더로 분리
브로드캐스트 | 지원 | 멀티캐스트로 대체
7.4 IPv4에서 IPv6로의 전환
전 세계 모든 장비를 한꺼번에 교체할 수 없기 때문에 점진적인 전환 방법이 사용됩니다.
터널링 (Tunneling): IPv6 데이터그램을 IPv4 데이터그램의 페이로드로 캡슐화하여, IPv4 네트워크를 통과할 수 있게 합니다.
터널링 동작
=============
[IPv6] --> [IPv6/IPv4] ===== IPv4 터널 ===== [IPv4/IPv6] --> [IPv6]
호스트A 터널 입구 (IPv6를 IPv4에 터널 출구 호스트B
캡슐화하여 전송)
원래 패킷: [IPv6 헤더][데이터]
터널 내부: [IPv4 헤더][IPv6 헤더][데이터]
IPv4의 Protocol 필드 = 41 (IPv6)
8. 정리
| 개념 | 핵심 내용 |
|---|---|
| IPv4 헤더 | 20바이트 기본, TTL/Protocol/Checksum 포함 |
| 단편화 | MTU 초과 시 분할, 목적지에서만 재조립 |
| CIDR | 유연한 서브넷 마스크로 주소 효율성 향상 |
| DHCP | IP 주소 자동 할당 (Discover-Offer-Request-ACK) |
| NAT | 사설 IP를 공인 IP로 변환, 포트 번호로 매핑 |
| ICMP | 네트워크 오류 보고 및 진단 (ping, traceroute) |
| IPv6 | 128비트 주소, 고정 40바이트 헤더, 단편화 제거 |
다음 글에서는 라우터가 최적 경로를 찾기 위한 라우팅 알고리즘(Link-State, Distance-Vector)을 살펴보겠습니다.
참고 자료
- James F. Kurose, Keith W. Ross, "Computer Networking: A Top-Down Approach", 6th Edition, Chapter 4
- RFC 791 - Internet Protocol (IPv4)
- RFC 2460 - Internet Protocol Version 6 (IPv6)
- RFC 2131 - Dynamic Host Configuration Protocol