IPv6
IPv6의 128비트 주소 표기·주소 유형·간소화된 헤더를 익히고 듀얼 스택·터널링·변환 전환 전략을 비교합니다.
NAT가 IPv4의 주소 부족 문제를 임시로 해결해 주었지만, 근본적인 한계는 변하지 않습니다.
개, 약 43억 개의 IPv4 주소는 이미 거의 모두 할당되었습니다.
스마트폰, IoT 기기, 클라우드 인스턴스가 폭발적으로 늘어나는 시대에 43억 개는 턱없이 부족합니다.
이 문제에 대한 근본적인 답이 IPv6입니다.
IPv4 고갈 타임라인
| 연도 | 사건 |
|---|---|
| 2011 | IANA 마지막 /8 블록 할당 완료 |
| 2011 | APNIC (아시아) 일반 할당 중단 |
| 2012 | RIPE (유럽) 마지막 /8 진입 |
| 2014 | LACNIC (남미) 마지막 /10 진입 |
| 2015 | ARIN (북미) 일반 IPv4 미할당 풀 고갈 |
| 2017 | AFRINIC (아프리카) 마지막 /8의 제한 할당 단계 진입 |
| 현재 | IPv4 이전/거래 시장과 CGNAT로 수요 보완 |
NAT로 연명해 왔지만, NAT의 한계는 분명합니다.
엔드투엔드 연결이 깨져 P2P 통신이 어렵고, NAT 테이블 관리에 오버헤드가 발생하며, 특정 프로토콜은 NAT 환경에서 정상 동작하지 않습니다.
IPv6 주소 구조
IPv6 주소는 128비트로 구성됩니다.
개의 주소를 제공합니다.
표기는 16비트씩 8개 그룹으로 나누고, 각 그룹은 16진수로 적습니다. 그룹 앞의 0을 생략할 수 있고 연속된 0 그룹은 주소 하나에서 한 번만 ::로 줄일 수 있습니다.
세 표기는 같은 128비트 주소입니다. ::는 한 주소에 한 번만 사용하여 생략한 0 그룹의 개수가 정해지도록 합니다.
| 표기 단계 | 주소 |
|---|---|
| 8개 그룹 전체 | 2001:0db8:0001:0000:0000:0000:0000:0001 |
| 그룹 앞의 0 생략 | 2001:db8:1:0:0:0:0:1 |
| 연속된 0 그룹 압축 | 2001:db8:1::1 |
| 복원 시 채우는 그룹 | 보이는 4개 그룹 + :: 위치의 0000 네 그룹 = 8개 |
- 8개 그룹 전체
- 주소: 2001:0db8:0001:0000:0000:0000:0000:0001
- 그룹 앞의 0 생략
- 주소: 2001:db8:1:0:0:0:0:1
- 연속된 0 그룹 압축
- 주소: 2001:db8:1::1
- 복원 시 채우는 그룹
- 주소: 보이는 4개 그룹 + :: 위치의 0000 네 그룹 = 8개
IPv4 vs IPv6 비교
| 비교 | IPv4와 IPv6 |
|---|---|
| 주소 | IPv4: 32비트·약 43억 개·점 십진 표기 / IPv6: 128비트·약 3.4×10³⁸개·콜론 16진 표기 |
| 기본 헤더 | IPv4: 20~60 B / IPv6: 40 B 고정, 확장 헤더 길이는 별도 |
| 헤더 체크섬 | IPv4에는 있음 / IPv6 기본 헤더에는 없음; 링크·상위 계층의 검사는 별도 |
| 주소 공유 | IPv4는 NAT를 널리 사용 / IPv6는 주소 부족 완화 목적의 NAT 필요성이 낮음 |
| 보안 | IPsec 등 인증·무결성·암호화 기술을 둘 다 사용 가능; IPv6만으로 암호화되지 않음 |
| 그룹 전달 | IPv4는 브로드캐스트 지원 / IPv6는 브로드캐스트 없이 멀티캐스트 등 사용 |
| 자동 구성 | IPv4는 DHCP·링크 로컬 등 / IPv6는 SLAAC·DHCPv6 등 |
| 단편화 | IPv4는 조건에 따라 라우터도 수행 / IPv6는 송신 호스트만 수행 |
IPv6 주소 유형
| 주소 유형 | 범위와 용도 |
|---|---|
| 글로벌 유니캐스트 | 2000::/3은 대표적인 전역 할당 범위 · 실제 인터넷 도달성은 라우팅·정책에 의존 |
| 링크 로컬 | fe80::/10 · 같은 링크 안의 통신 |
| 유니크 로컬 | fc00::/7 · 로컬 통신용, 일반적인 자체 생성 주소는 fd00::/8 |
| 멀티캐스트 | ff00::/8 · 그룹 통신 |
| 루프백 | ::1 · 자기 자신 |
| 미지정 | :: · 아직 주소가 정해지지 않은 상태 등 |
SLAAC (Stateless Address Autoconfiguration)
IPv6에서는 DHCP 없이도 자동으로 IP를 설정할 수 있습니다.
SLAAC은 링크 로컬 주소 생성, 중복 주소 탐지(DAD), 라우터 광고(RA) 수신, 글로벌 주소 생성 순서로 이해하면 됩니다.
RA 프리픽스가 자동 구성에 적합하고 수명·플래그 등 조건을 충족해야 하며, 새 글로벌 주소에도 DAD를 적용합니다. 인터페이스 ID는 MAC을 노출하지 않는 방식이 권고됩니다.
관리자가 주소를 더 엄격하게 통제해야 하는 환경에서는 DHCPv6와 함께 쓰기도 합니다.
SLAAC 과정
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 장치가 링크 로컬 주소 자동 생성
fe80::인터페이스ID (MAC 주소 기반일 필요 없음)
2. DAD(Duplicate Address Detection)
이 주소를 다른 장치가 쓰고 있는지 확인
3. Router Solicitation 전송
"라우터야, 네트워크 프리픽스 알려줘"
4. Router Advertisement 수신
프리픽스: 2001:db8:1::/64
5. 글로벌 주소 생성
2001:db8:1::인터페이스ID
(불투명한 안정 ID나 임시 ID 등; MAC 기반 ID는 필수 아님)IPv6 헤더
IPv4 대비 단순화된 점: 기본 헤더 체크섬 제거, 옵션 성격의 정보를 확장 헤더로 분리, 기본 헤더를 40바이트 고정 크기로 유지.
확장 헤더는 Next Header 값으로 체인처럼 이어집니다.
| 기본 헤더 필드 | 비트 수와 역할 |
|---|---|
| Version | 4 · IPv6는 6 |
| Traffic Class · Flow Label | 8 · 트래픽 분류 / 20 · 흐름 식별 |
| Payload Length | 16 · 기본 헤더 뒤 페이로드 길이 |
| Next Header | 8 · 다음 확장 헤더 또는 상위 프로토콜 |
| Hop Limit | 8 · 라우터 전달 횟수 제한 |
| 출발지·목적지 주소 | 각 128 · 통신 끝점 주소 |
IPv4에서 IPv6로의 전환 전략
| 전환 전략 | 동작과 비용 |
|---|---|
| 듀얼 스택 | IPv4·IPv6 동시 지원 · 직관적이나 두 스택 운영 필요 |
| 터널링 | 다른 IP 패킷 안에 캡슐화 · 점진적 전환이 가능하나 오버헤드·MTU 감소 |
| NAT64/DNS64 | IPv6 전용 클라이언트의 IPv4 서비스 접근 지원 · 변환과 DNS 구성의 제약 관리 |
개발자가 IPv6를 고려해야 하는 시점
아래 코드는 소켓 바인딩·리스닝까지만 보여 줍니다. accept()와 HTTP 응답 처리가 없으므로 출력된 URL에 웹 서비스를 제공하는 예제가 아닙니다. IPV6_V6ONLY=0의 듀얼 스택 지원 여부도 운영체제에 따라 확인해야 합니다.
"""IPv6 대응 서버 소켓 예시"""
import socket
# IPv4 전용 (문제가 될 수 있음)
# sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# sock.bind(("0.0.0.0", 8080))
# IPv6 + IPv4 듀얼 스택 (권장)
sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
sock.bind(("::", 8080)) # :: = 모든 IPv6 + IPv4 인터페이스
sock.listen(5)
print("듀얼 스택 서버 시작 (IPv4 + IPv6)")
print("IPv4: http://127.0.0.1:8080")
print("IPv6: http://[::1]:8080")| 체크리스트 | 확인 사항 |
|---|---|
| DB 스키마 | 순수 16진 IPv6는 최대 39자, IPv4 혼합 표기는 최대 45자. 영역 식별자(%eth0 등)도 저장하면 추가 길이 필요 |
| 유효성 검증 | IPv6 형식도 검증하는지 |
| 서버 바인딩 | :: 또는 듀얼 스택 바인딩 |
| 로드 밸런서 | IPv6 리스너 설정 |
| 클라우드 VPC | IPv6 CIDR 블록 할당 |
| 로그 파싱 | IPv6 주소 형식 파싱 가능한지 |
# IPv6 주소 확인
ip -6 addr show
# IPv6 연결 테스트
ping6 ::1 # 루프백
ping6 google.com # 외부 IPv6
# IPv6 라우팅 테이블
ip -6 route show
# IPv6 이웃 테이블 (NDP, ARP의 IPv6 버전)
ip -6 neigh show
# 사이트의 IPv6 지원 확인
dig AAAA google.com
curl -6 https://ipv6.google.com다음 장에서는 IP 주소를 기반으로 패킷이 네트워크를 횡단하며 목적지에 도달하는 과정, 라우팅을 살펴보겠습니다.