이번 문서의 목표: IPv6 주소를 규칙에 따라 정확히 축약·복원할 수 있고, 확장 헤더가 왜 필요한지, IPv4와 IPv6가 어떻게 다른지 설명하며, NAT가 사설 IP와 공인 IP를 어떻게 매핑하는지와 그 한계를 설명할 수 있게 된다.
왜 새로운 주소 체계가 필요한가
13편에서 IPv4 주소는 32비트라고 배웠습니다. 32비트로 표현 가능한 주소는 2의 32제곱, 약 43억 개입니다. 처음 인터넷을 설계할 당시에는 충분해 보였지만, 전 세계 인구와 각 사람이 쓰는 스마트폰·PC·IoT 기기 수를 생각하면 43억 개는 턱없이 부족합니다. 실제로 IPv4 공인 주소는 이미 고갈되었다고 알려져 있으며, 이를 늦추기 위한 임시방편으로 널리 쓰인 기술이 이번 편 뒷부분에서 다룰 NAT입니다. 하지만 근본적인 해결책은 주소 공간 자체를 훨씬 크게 늘리는 것이었고, 그 결과 나온 것이 IPv6입니다.
1. IPv6 주소 구조와 축약 규칙
IPv6(Internet Protocol version 6)는 주소 길이를 32비트에서 128비트로 늘린 차세대 IP 주소 체계입니다. 128비트로 표현 가능한 주소는 2의 128제곱 개로, 지구상의 모래알 수보다도 많다고 비유될 만큼 거대한 주소 공간입니다.
쉽게 말하면: IPv4가 4자리 번지수(옥텟 4개)였다면, IPv6는 훨씬 큰 동네 전체를 한 번에 표현할 수 있는 8자리 번지수입니다.
IPv6 주소는 128비트를 16비트씩 8묶음으로 나누고, 각 묶음을 16진수(hexadecimal, 0부터 9와 A부터 F까지 16개 기호로 숫자를 표현하는 방식) 4자리로 표기한 뒤 콜론(:)으로 구분합니다. 예를 들어 다음과 같은 형태입니다.
2001:0db8:0000:0000:0000:ff00:0042:8329이 표기는 그대로 쓰기에는 너무 길고 읽기 번거롭기 때문에, 두 가지 축약 규칙을 적용합니다.
규칙 1 — 각 묶음의 앞자리 0은 생략할 수 있다. 한 묶음이 0db8이면 앞의 0을 생략해 db8로 쓸 수 있습니다. 단 묶음 전체가 0000이면 최소 하나의 0은 남겨 0으로 표기합니다(이 상태에서 규칙 2를 적용하면 아예 없앨 수도 있습니다).
규칙 2 — 연속된 0만으로 이루어진 묶음들은 ::로 한 번만 압축할 수 있다. 0으로만 된 묶음이 연속으로 여러 개 있으면, 그 구간 전체를 ::(콜론 두 개)로 바꿉니다. 단, 한 주소 안에서 ::는 단 한 번만 사용할 수 있습니다.
앞의 예시 주소를 두 규칙으로 축약해 보겠습니다.
원래 주소: 2001:0db8:0000:0000:0000:ff00:0042:8329
규칙 1 적용(앞자리 0 생략): 2001:db8:0:0:0:ff00:42:8329
규칙 2 적용(연속된 0 묶음 압축): 2001:db8::ff00:42:8329가운데 3개 묶음이 모두 0이었으므로 이 구간을 ::로 압축했습니다. 결과인 2001:db8::ff00:42:8329가 실제로 통용되는 축약 표기입니다.
몇 가지 예시를 더 확인해 보겠습니다.
| 원래 주소(128비트, 16진수 8묶음) | 축약 표기 |
|---|---|
| fe80:0000:0000:0000:0202:b3ff:fe1e:8329 | fe80::202:b3ff:fe1e:8329 |
| 0000:0000:0000:0000:0000:0000:0000:0001 | ::1 |
| 0000:0000:0000:0000:0000:0000:0000:0000 | :: |
::1은 IPv4의 127.0.0.1처럼 자기 자신을 가리키는 루프백(loopback) 주소이고, ::(모든 비트가 0)는 주소가 아직 정해지지 않았음을 나타내는 미지정 주소입니다.
자주 틀리는 점: ::를 한 주소 안에서 두 번 이상 사용하는 실수가 잦습니다. 예를 들어 2001:0:0:1:0:0:0:1을 2001::1::1처럼 쓰면, 각 ::가 몇 개의 0 묶음을 대신하는지 알 수 없어 원래 주소로 복원할 수 없습니다. 이런 모호함을 막기 위해 ::는 반드시 주소 하나에서 한 번만 사용해야 하며, 압축할 0 묶음 구간이 여러 곳에 떨어져 있으면 그중 연속된 길이가 가장 긴 구간만 ::로 압축하고 나머지는 그대로 씁니다.
2. 확장 헤더 — 기본 헤더를 가볍게 유지하는 설계
IPv4 헤더는 옵션(option) 필드 때문에 길이가 20바이트에서 최대 60바이트까지 가변적으로 늘어날 수 있었습니다. 이 가변성 때문에 라우터가 헤더 길이를 매번 확인해야 해 처리 속도가 느려지는 단점이 있었습니다. IPv6는 이 문제를 해결하기 위해 기본 헤더(basic header)를 항상 40바이트 고정 길이로 단순화하고, 옵션이 필요한 경우에는 기본 헤더 뒤에 확장 헤더(extension header)를 필요한 만큼 체인처럼 이어 붙이는 방식을 택했습니다.
쉽게 말하면: IPv4는 옵션이 있을 때마다 봉투 자체의 크기가 들쭉날쭉 커지는 방식이었다면, IPv6는 봉투(기본 헤더) 크기는 항상 똑같이 두고, 필요한 추가 서류(확장 헤더)를 봉투 뒤에 클립으로 계속 이어 붙이는 방식입니다.
기본 헤더의 다음 헤더(Next Header) 필드가 그다음에 어떤 확장 헤더(또는 상위 계층 프로토콜)가 이어지는지를 가리켜, 마치 사슬처럼 여러 확장 헤더를 연결할 수 있습니다. 대표적인 확장 헤더 종류는 다음과 같습니다.
| 확장 헤더 | 역할 |
|---|---|
| Hop-by-Hop Options | 경로상의 모든 라우터가 확인해야 하는 옵션 정보 전달 |
| Routing | 패킷이 거쳐야 할 경로를 발신자가 미리 지정 |
| Fragment | 패킷이 분할되었을 때 조각 정보를 담음(IPv6는 발신 호스트에서만 분할하고 중간 라우터는 분할하지 않음) |
| Authentication (AH) | 데이터 출처 인증과 무결성 검증 |
| Encapsulating Security Payload (ESP) | 데이터 암호화를 포함한 보안 통신 지원 |
| Destination Options | 최종 목적지 호스트만 확인하면 되는 옵션 정보 전달 |
이 구조 덕분에 라우터는 대부분의 경우 40바이트 고정 크기의 기본 헤더만 빠르게 확인하고, 확장 헤더는 그 옵션이 실제로 필요한 목적지 호스트나 특정 라우터만 처리하면 되어 전체적인 전달 속도가 빨라집니다.
자주 틀리는 점: “IPv6는 옵션 기능 자체를 아예 없앴다”는 설명은 틀렸습니다. 옵션 기능은 확장 헤더라는 형태로 여전히 존재하며, 다만 기본 헤더에서 분리해 필요할 때만 이어 붙이는 구조로 바뀐 것입니다.
3. IPv4와 IPv6 비교
| 구분 | IPv4 | IPv6 |
|---|---|---|
| 주소 길이 | 32비트 | 128비트 |
| 표기 방식 | 10진수, 점(.)으로 구분한 4옥텟 | 16진수, 콜론(:)으로 구분한 8묶음 |
| 헤더 구조 | 옵션 필드로 인해 20–60바이트 가변 길이 | 기본 헤더 40바이트 고정 + 필요 시 확장 헤더 |
| 헤더 체크섬 | IP 헤더 자체에 체크섬 필드 존재 | 헤더 체크섬 필드 없음(상위·하위 계층의 오류 검출에 위임해 처리 속도 향상) |
| 단편화(fragmentation) | 발신 호스트와 경로상의 라우터 모두 단편화 가능 | 발신 호스트에서만 단편화(라우터는 단편화하지 않음) |
| 주소 자동 설정 | 주로 DHCP(동적 호스트 구성 프로토콜)에 의존 | DHCPv6와 함께 상태 비저장 자동 설정(SLAAC)도 지원 |
| 브로드캐스트 | 브로드캐스트 주소 존재 | 브로드캐스트 없음(멀티캐스트·애니캐스트로 대체) |
| 주소 부족 문제 | 주소 고갈로 NAT에 크게 의존 | 주소 공간이 매우 넓어 NAT 필요성이 크게 줄어듦 |
자주 틀리는 점: “IPv6에서도 IPv4처럼 라우터가 패킷을 단편화(fragmentation)할 수 있다”는 설명이 오답으로 자주 나옵니다. IPv6는 처리 속도를 높이기 위해 발신 호스트에서만 단편화를 수행하도록 설계되었고, 중간 경로의 라우터는 패킷을 쪼개지 않습니다. 경로 중간에 패킷이 너무 크면 라우터는 ICMPv6로 발신 호스트에 오류를 알려, 발신 호스트가 더 작은 크기로 다시 보내도록 합니다.
4. NAT — 사설 주소와 공인 주소를 연결하는 다리
NAT(Network Address Translation, 네트워크 주소 변환)는 사설 IP 주소를 사용하는 내부 네트워크가 하나(또는 소수)의 공인 IP 주소를 통해 인터넷과 통신할 수 있게 해주는 기술입니다. IPv4 주소 고갈 문제를 늦추기 위해 널리 쓰였으며, 12편에서 다룬 사설 IP 대역(예: 192.168.0.0/16)이 실제로 인터넷에 나가려면 반드시 NAT를 거쳐야 합니다.
쉽게 말하면: NAT는 회사 건물 안의 여러 직원(사설 IP)이 건물 대표 전화번호(공인 IP) 하나로 외부와 통화하되, 내선 번호(포트)로 누구의 통화인지 구분해 주는 교환대 역할을 합니다.
내부 호스트가 여러 대라도 공인 IP 주소는 하나뿐이므로, NAT는 각 내부 호스트의 사설 IP와 포트 조합을 공인 IP의 서로 다른 포트로 바꿔 구분합니다. 이렇게 IP뿐 아니라 포트까지 함께 변환하는 방식을 NAPT(Network Address Port Translation) 또는 PAT(Port Address Translation)라고 부르며, 가정용 공유기 대부분이 이 방식을 씁니다. NAT 장비는 이 변환 관계를 NAT 테이블에 기록해 두었다가, 응답 패킷이 돌아오면 이 표를 보고 어느 내부 호스트에게 돌려줘야 하는지 찾습니다.
| 사설 IP:포트(내부) | 공인 IP:포트(외부에 보이는 주소) | 목적지 서버 |
|---|---|---|
| 192.168.0.10:5000 | 203.0.113.5:40001 | 8.8.8.8:80 |
| 192.168.0.11:5000 | 203.0.113.5:40002 | 8.8.8.8:80 |
| 192.168.0.10:5001 | 203.0.113.5:40003 | 1.1.1.1:443 |
이 표를 읽는 방법은 다음과 같습니다. 내부의 192.168.0.10번 호스트와 192.168.0.11번 호스트가 같은 목적지(8.8.8.8:80)로 동시에 접속해도, 두 호스트의 사설 IP:포트 조합이 서로 다르므로 NAT는 이를 공인 IP 203.0.113.5의 서로 다른 포트(40001, 40002)에 매핑합니다. 외부 서버 입장에서는 두 요청이 모두 203.0.113.5라는 하나의 주소에서 온 것처럼 보이지만, NAT 장비는 내부적으로 포트 번호를 키(key)로 삼아 각 응답을 정확한 내부 호스트로 되돌려줍니다. 같은 192.168.0.10번 호스트라도 다른 목적지(1.1.1.1:443)로 접속하면 또 다른 포트(40003)가 배정되어 서로 구분됩니다.
NAT의 한계
NAT는 주소 고갈 문제를 완화하는 유용한 임시방편이지만 몇 가지 한계를 가집니다.
- 종단 간(end-to-end) 연결의 순수성이 깨진다. 원래 인터넷은 두 호스트가 중간 변형 없이 직접 통신한다는 설계였지만, NAT는 중간에서 주소를 바꿔치기하므로 이 원칙이 깨집니다.
- 상태를 유지해야 하는 부담(stateful)이 있다. NAT 장비는 각 연결의 매핑 정보를 테이블에 계속 유지해야 하며, 이 장비가 고장 나면 진행 중이던 모든 연결이 끊깁니다.
- 외부에서 내부로 먼저 연결을 시작하기 어렵다. NAT 테이블은 내부에서 외부로 나가는 요청이 있을 때 매핑을 만들므로, 외부에서 내부의 특정 호스트로 먼저 접속하려면 포트 포워딩(port forwarding) 같은 별도 설정이 필요합니다.
- IP 주소를 데이터 안에 직접 담는 프로토콜과 충돌한다. 일부 오래된 프로토콜(예: FTP의 능동 모드)은 통신 내용(payload) 안에 자신의 IP 주소를 적어 보내는데, NAT는 IP 헤더만 바꾸고 데이터 내용까지는 자동으로 바꿔주지 않으므로 이런 프로토콜은 NAT 환경에서 별도의 보완 처리가 필요합니다.
IPv6는 주소 공간이 매우 넓어 사설 IP와 공인 IP를 나눠 쓸 필요성 자체가 크게 줄어들므로, 원칙적으로는 NAT 없이 각 기기가 고유한 공인 주소를 가질 수 있습니다. 다만 실제 현장에서는 내부 네트워크 구조를 외부에 숨기려는 보안 목적 등으로 IPv6 환경에서도 유사한 주소 변환 기법이 제한적으로 쓰이기도 합니다.
자주 틀리는 점: “NAT를 쓰면 내부 네트워크 구조가 외부에 그대로 노출된다”는 설명은 틀렸습니다. 오히려 NAT는 내부의 여러 사설 IP를 하나의 공인 IP 뒤에 숨기는 효과가 있어, 외부에서는 내부 호스트의 실제 사설 IP 주소를 알 수 없습니다. 이는 NAT의 부수적인 장점으로도 자주 언급됩니다.
핵심 정리
- IPv6 주소는 128비트를 16비트씩 8묶음으로 나눠 16진수로 표기하며, 앞자리 0 생략과 연속된 0 묶음의
::압축(주소 하나에 단 한 번만) 두 가지 규칙으로 축약한다. - IPv6는 기본 헤더를 40바이트 고정 길이로 단순화하고, 옵션 기능은 Next Header로 체인처럼 이어지는 확장 헤더로 분리했다.
- IPv6는 IPv4보다 주소 공간이 압도적으로 넓고, 헤더 체크섬이 없으며, 단편화를 발신 호스트에서만 수행해 라우터 처리 속도를 높인다.
- NAT는 사설 IP:포트와 공인 IP:포트를 매핑하는 NAT 테이블로 여러 내부 호스트가 하나의 공인 IP를 공유하게 해주지만, 종단 간 연결 순수성 훼손, 상태 유지 부담, 외부발 연결의 어려움 같은 한계가 있다.