본문 바로가기

프로그래밍/미분류

IPv6 주소 뒤의 퍼센트 기호의 의미는?

반응형

http://superuser.com/questions/99746/why-is-there-a-percent-sign-in-the-ipv6-address


Q. (질문이 길어서 요점만 번역, 번역하지 않은질문 아래의 내용도 이해에 도움이 됨 읽어보세요.) ipv6 주소를 구하면 fe80::71a3:2b00:ddd3:753f%16 처럼 % 기호와 숫자가 붙어 나오기도 하고, 안 나오기도 하는데 이건 무엇인가?


A1. % 기호 뒤의 숫자는 스코프 아이디 ( scope id ) 이다.


IPv6 주소에는 3종류의 접근가능 스코프가 정의되어 있다.


 1. 글로벌 접근 주소 (globally addressable). ISP 가 부여한 IPv6 주소로 퍼블릭 인터넷에서 사용할 수 있다.

 2. 링크-로컬 (link-local). 이것은 169.254.X.X 와 비슷하게, 컴퓨터가 로컬 네트워크 통신에 이용하기 위해 부여한 주소이다. 이 주소는 글로벌 유니크하지 않기 때문에, 퍼블릭 인터넷으로 라우트 되지 않는다.

 3. 노드-로컬 (node-local). 이 주소는 로컬 인터페이스로 127.0.0.1과 비슷하다. 기본적으로 이 주소는 ::1 이다.


마이크로소프트의 IPv6 아티클이 내가 본 것 중에선 가장 이해하기 좋았다. 아티클을 보면 알 수 있듯이, 스코프 아이디 (scope id)가 주소에 붙어 있다는 것은 그 주소가 링크-로컬 주소라는 뜻이다. 물론 주소가 fe80 로  시작되는 것으로 알 수도 있다.


이 문제에 대해 깔금하게 정리되어 있는 것은 흔치 않은 듯 하다. 그래서 내가 RFC 4007 과 다른 것들로 부터 이해한 것을 정리해 본다면


컴퓨터는 여러 개의 서로 다른 스코프의 링크-로컬 주소를 가질 수 있다. 스코프 아이디는 각 주소가 어느 스코프를 위한 것인지를 나타낸다. 예를 들어보자. 컴퓨터가 두 개의 NIC(네트워크 인터페이스 카드)를 갖고 있고 다른 네트워크의 링크-로컬 주소를 가지고 있다. 무언가를 fe80 으로 시작하는 또 다른 주소로 보내려고 한다면, 컴퓨터는 어떤 NIC 를 통해서 보내야 할 지 어떻게 구별할 것인가? 


A2. fe80::/64 로 시작하는 IPv6 주소는 링크-로컬 주소로, 이 프리픽스에 네트워크 장비의 하드웨어 주소를 붙여서 만든 것이다. (IPv4의 169.254.0.0/16 과 비슷함) 한 머신의 모든 링크-로컬 주소는 동일하지만, 라우팅을 위해선 어떤 인터페이스로 가르키는 것인지 알 필요가 있다. 이를 위해 필요한 것이 퍼센트 기호 뒤에 붙은 번호로 존 인덱스(zone index)라고 부른다. 이것은 운영체제마다 다른데, 윈도우에서는 %16 은 16번 인터페이스를 뜻하고, 리눅스에서는 %eth0 와 같이 나오는 것을 볼 수 있을 것인다.


툴 또는 API 이 따라 이 존 인덱스가 중요하지 않다고 여기거나 또는 생략하는 경우가 있다. 예를 들어 리눅스의 ifconfig 명령은 어느 인터페이스에 주소가 속해 있는지가 명확하기 때문에 존 인덱스를 보여주지 않는다. 그러나 일반적으로는 존 인덱스를 고려하여야 한다.

728x90