IPv6 주소 확장·축약 쉽게 이해하기 — 개념과 원리
IPv6 주소는 128비트이며, 16진수 네 자리씩 여덟 그룹을 콜론으로 구분해 씁니다. 너무 길기 때문에 그룹 앞의 0을 생략하고, 연속된 0 그룹 한 구간을 "::"로 줄이는 표기가 허용됩니다. 이 도구는 전체 표기(확장형)와 RFC 5952가 권고하는 표준 축약형을 서로 변환하고, 역방향 DNS 이름(ip6.arpa)도 만들어 줍니다. 서로 다른 로그의 주소를 비교하거나, 방화벽 규칙을 쓰거나, PTR 레코드를 만들 때 필요합니다.
계산 방법
- 확장: "::"를 기준으로 나눠 양쪽 그룹 수를 셉니다. 8에서 그 수를 뺀 만큼 0000 그룹을 채우고, 모든 그룹을 앞에 0을 붙여 네 자리로 맞춥니다.
- 축약(RFC 5952): 각 그룹 앞의 0을 지우고 소문자로 쓴 뒤, 두 개 이상 연속된 0 그룹 중 가장 긴 구간을 "::"로 바꿉니다. 길이가 같으면 앞쪽 구간을 줄이고, 0 그룹이 하나뿐이면 "0"으로 둡니다.
- 역방향 DNS: 확장형의 16진수 32자리를 거꾸로 늘어놓고 한 자리마다 점을 찍은 뒤 ".ip6.arpa"를 붙입니다.
원리
"::"는 한 번만 쓸 수 있습니다. 읽는 쪽이 "8 − 적힌 그룹 수"로 생략된 0 그룹 수를 알아내야 하기 때문입니다. RFC 4291은 유효한 축약 규칙을 정하지만 같은 주소를 여러 방식으로 쓰는 것을 허용합니다. RFC 5952는 그중 하나를 표준 표기로 정해 문자열 비교, 검색, 정렬 결과가 일관되도록 합니다. 역방향 DNS는 16진수 한 자리(4비트, 니블) 단위로 동작하므로 ip6.arpa 이름은 32개 레이블로 이루어집니다.
예제 풀이
- 입력: 2001:db8::ff00:42:8329
- "::" 왼쪽은 2개(2001, db8), 오른쪽은 3개(ff00, 42, 8329)이므로 8 − 5 = 3개의 0 그룹이 생략되었습니다.
- 네 자리로 채우면 2001:0db8:0000:0000:0000:ff00:0042:8329입니다.
- 다시 축약하면 2001:db8::ff00:42:8329로, 입력이 이미 표준 표기였습니다.
- 32자리를 뒤집으면 9.2.3.8.2.4.0.0.0.0.f.f.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa입니다.
결과 해석
확장형은 고정 길이 저장과 정렬에, 축약형은 화면 표시와 문서에 적합합니다. 2001:db8::/32는 문서 예시용으로 예약된 대역(RFC 3849)이므로 예제 같은 주소는 실제 인터넷에 나타나지 않습니다.
흔한 실수
- "::"를 두 번 써서 주소가 모호해지는 경우
- 0 그룹 하나를 "::"로 줄이는 경우(RFC 5952는 0으로 쓰라고 권고)
- 표준 표기에 대문자 16진수를 쓰는 경우
자주 묻는 질문
"::"는 0을 몇 개 나타내나요?
전체 그룹이 여덟 개가 되도록 필요한 만큼의 16비트 0 그룹을 나타냅니다.
2001:0db8::1과 2001:db8::1은 같은 주소인가요?
네, 같습니다. 그룹 안 앞자리 0은 값에 영향을 주지 않습니다.
ip6.arpa 이름은 어디에 쓰나요?
IPv6 주소를 호스트 이름으로 되돌려 찾는 PTR 레코드를 등록하는 DNS 이름입니다.
출처: IETF RFC 4291, IP Version 6 Addressing Architecture · IETF RFC 5952, A Recommendation for IPv6 Address Text Representation · IETF RFC 3596, DNS Extensions to Support IP Version 6