메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

IT/모바일

IPv6(Internet Protocol Version 6) 소개

한빛미디어

|

2001-06-19

|

by HANBIT

16,138

by 허버트 페이러(Hubert Feyrer), 역 한빛 리포터 1기 신동섭 놀라운 속도로 발전한 인터넷으로 지금까지 사용해오던 Ipv4에 의한 주소체계는 포화상태에 이르게 되었다. 여기에 대한 대안이 바로 Ipv6이다. 그래서 Ipv6이 무엇인지 알아보기로 했다.
인터넷의 미래 인터넷 전문가들은 인터넷이 몇 년 안에 심각한 문제에 직면하게 될 것이라고 한다. 인터넷 설계의 한계점과 빠른 성장 속도 때문에 새로운 호스트를 연결할 주소가 없다는 것이다. 그래서 더 이상의 새로운 웹 서버를 구축할 수 없고, 인터넷 서비스 제공회사에 더 이상 새로운 계정을 만들 수 없으며, 온라인 게임에 참가하거나, 웹에 접속할 수 있는 새로운 머신이 없어지게 될 것이다. 일부 사람들은 이러한 문제를 꽤 심각하게 여긴다. 지금껏 이러한 문제를 해결하기 위한 몇 가지 시도가 있었다. 그 중 가장 많이 알려진 방법은 모든 사용자 머신에 유일한 주소를 할당하지 않고, "사설" 주소를 할당하여 공식적으로 하나의 공인 주소에 여러 머신을 숨기는 것이다. 이러한 방법을 "IP 변장(masquerading)", 혹은 "네트워크 주소 전환(Network Address Translation, NAT)"이라고 한다. 그러나 공인 주소 뒤에 숨겨진 머신들은 인터넷에서 위치를 표시할 수 없어, 온라인 게임, P2P 네트워킹 등의 머신에 접속할 수 없게 된다. NAT의 단점은 [RFC3027]에서 볼 수 있다. 인터넷 주소 부족을 해결하기 위해서 주소 할당에 제한적인 옛날 인터넷 프로토콜을 버리고 새로운 프로토콜을 사용하는 방법도 있다. 오늘날 인터넷에 연결할 때 사용하는 프로토콜은 TCP/IP이다. 현재는 버전 4를 사용하고 있는데, 버전 4는 위에서 언급한 문제점이 모두 있다. 그러므로 이러한 문제를 해결한 더 향상된 버전으로 바꿔야 할 것이다. 현재 인터넷 프로토콜 버전 6이 나와 있다. 이 버전은 주소 공간에 대한 앞으로의 요구와 사생활, 암호화 같은 다른 특성도 만족시키며, 더 강력해진 모바일 컴퓨팅을 지원한다. 이 글에서는 IPv4를 알고 있다는 전제에서 IPv6 프로토콜을 소개할 것이다. 우선 주소 형식과 이름 분석(name resolution)의 변화를 다루고, 다음으로 간단하고 효과적인 전환 방식인 6to4(IPv4 환경에서 IPv6 환경으로 이전하기 위한 방식)로 IPv6을 사용하는 방법을 제시한다(아직은 ISP가 IPv6을 제공하지 않는다). IPv6의 장점 사람들에게 IPv4에서 IPv6으로 전환해야 된다고 말할 때, 대개 "왜?"라는 질문을 한다. 새로운 버전으로 전환해야 하는 몇 가지 장점은 다음과 같다.
  • 더 커진 주소 공간
  • 모바일 장치 지원
  • 보안 기능 탑재
더 커진 주소 공간 IPv6은 IPv4에 비해 주소 공간이 명백히 커졌다. 현재 인터넷 구조는 32비트 주소 체계인 반면, 새로운 버전은 128비트 주소 체계이다. 주소 공간이 더 커지면, NAT와 같은 체계는 더 이상 필요가 없다. 그래서 오늘날 PDA 같은 모바일 장치, 휴대 전화뿐만 아니라 IP기반 장치와 완전하면서 자유롭게 IP 연결을 할 수 있다. 이동성(mobility) 모바일 장치와 IP에서 이동성을 지원하려면 특별한 프로토콜이 필요하며, IPv6 스택을 위해서는 "모바일 IP"라 불리는 프로토콜을 사용해야 한다. 그래서 IPv6를 사용하면, 다른 네트워크간의 로밍을 지원하며, 현재 접속한 네트워크를 빠져 나와 다른 네트워크로 접속할 때 글로벌 알림(global notification)도 지원한다. 로밍은 IPv4에서도 가능하지만 원활한 동작을 위해서 넘어야 할 몇 가지 제한 사항이 있다. 하지만 IPv6은 모바일 기능을 지원하므로 이런 일이 필요 없다. IPv4에서 모바일 IP로 주소를 지정할 때 필요한 문제는 [RFC3024]를 참조하자. 보안 인터넷 프로토콜 차기 버전은 모바일 외에 보안도 지원해야 할 것이다. IPv6 프로토콜에는 IPsec 스택이 있다. IPsec은 인증, 암호화, IP 트래픽 압축을 지원한다. SSL 또는 SSH와 같은 응용 레벨의 프로토콜이 없으면, 응용 레벨을 수정하지 않고도 두 노드 사이의 모든 IP 트래픽을 처리할 수 있다. 머신에 탑재되는 모든 응용 레벨은 인증과 암호화를 지원할 수 있고, 응용/서비스 베이스가 아닌 호스트 베이스로 구성할 수 있는 장점이 있다. IPsec에 대한 사항은 [RFC2411]에서 볼 수 있으며, 핵심 프로토콜은 [RFC2401]에 설명되어 있다. IPv4와의 차이점 지금부터는 IPv6의 중요한 특징에 대한 간략히 살펴본 후, IPv6의 세부적인 사항을 다룰 것이다. IPv4 동작 원리를 간단히 설명하고 IPv6에서 변화된 점을 강조하고자 한다. IPv6 주소와 이를 나누는 방법부터 설명하면, 다양한 형태의 주소, 브로드캐스팅은 어떻게 되는가를 상세히 알게 될 것이다. 그 후 IP 계층, 이름 분석(name resolution)의 변화와 IPv6에서 DNS의 새로운 특성에 대해 설명할 것이다. 주소 지정 IPv4 어드레스는 일반적으로 4자리의 점(dotted quad) 형태로 표시되는 32비트 값이다. 각각의 자릿수는 0~255사이의 값을 가지는 1바이트를 나타낸다.

127.0.0.1
이에 따르면 이론적으로 2^32 또는 40억 호스트가 인터넷에 연결될 수 있다. 하지만 그룹화 때문에 모든 주소가 다 사용되지는 않는다. IPv6 주소 체계는 128비트 기술을 사용하는데, 이론적으로는 2128개의 사용 가능한 호스트를 지원한다는 말이다. 실로 많은 머신의 주소를 지정할 수 있다. 또한 가까운 미래에는 IP폰, 휴대 전화, PDA 등 늘어나는 IP 요구도 충족시킬 것이다. IPv6 주소는 일반적으로 4 헥스 디지트(hex digit)로 정의되는 16 비트 그룹으로 나누며, 나누어진 그룹은 콜론으로 구분된다.

fe80::2a0:d2ff:fea5:e9f5
이는 그룹 안의 0을 생략할 수 있는 특별한 경우이다. 연속되는 0은 "::"으로 간결화 할 수 있다. 위의 주소는 fe80:0:00:000:2a0:d2ff:fea5:e9f5와 동일하다. 유지보수가 가능한 주소를 생성하기 위해서 Ipv6 주소는 두개의 부분으로 나뉘어 진다. 하나는 네트워크에서 머신이 on 상태인지를 확인하는 비트이고, 다른 하나는 네트워크나 서브 네트워크에서 머신을 인식하기 위한 비트인데, 각각 넷비트(netbits)와 호스트비트(hostbits)라고 한다. IPv4와 v6에서 넷비트는 왼쪽에 위치하거나, IP 번호의 가장 중요한 비트이다. 호스트비트는 오른쪽, 혹은 가장 중요하지 않은 비트이다:
+--------------------+--------------------+
|      n netbits     |   128-n  hostbits  |
+--------------------+--------------------+
IPv4에서는 모든 넷/호스트 비트에 사용되는 넷마스크(netmask)는 255.255.0.0이나 255.255.255.0이 대표적이다. 255.255.0.0은 네트워크와 머신에 주소 지정할 때 16비트를 사용한다. 255.255.255.0은 8비트로 256개의 서브넷(subnets)을 할당한다. 주소가 계층적인 주소에서 CIDR 라우팅(Classless Internet Domain Routing)으로 바뀔 때, 넷과 호스트 비트 사이의 경계는 더 이상 8비트가 아니며, 그 결과 넷마스크가 깨져 보이고, 어떻게 처리할 수도 없게 된다. 그 대신 네트워크 비트 숫자가 주어진 주소에 사용되어 경계를 나타내게 된다. 따라서 10.0.0.0/24는 255.255.255.0의 넷마스크와 같다. IPv6에서도 같은 구조가 사용된다. 2001:638:a01:2::/64에서 왼쪽의 64비트를 네트워크 주소로 사용하고 오른쪽 64비트를 네트워크에서 머신을 구분하는 데 사용한다는 것을 알 수 있다. 이 네트워크 비트는 일반적으로 "접두사(prefix)"라고 부르는데, 여기에서는 64비트이다. Ipv4의 일반적인 주소 체계는 (오래된) B 클래스와 C 클래스 넷이다. C 클래스 네트워크(/24)에서 24비트는 제공자가, 8비트는 사용자가 할당한다. 이에 서브네트워크를 부가하려면 끝을 "홀수의" 넷마스크로 만들면 되지만, 이 과정은 꽤 까다롭다. 제공자가 16비트만을 할당할 때, 그리고 서브네트워크를 부가하거나, 오른 쪽에 있는 비트를 두 개의 부분으로 나누는 시스템에서는 B 클래스 네트워크(/16)가 더 편하다. 이 때 한 부분은 사이트의 서브넷을 주소 지정하며, 다른 부분은 이 서브넷의 호스트를 주소 지정한다. 이러한 과정은 대개 바이트(8비트) 경계에서 이루어진다. 255.255.255.0 넷마스크(혹은 a /24 prefix)를 사용하면 네트워크의 규모가 커져도 관리하기가 편하다. 물론 하나의 서브넷에 254 머신까지, 그리고 256 서브넷까지만 가능하다. IPv6에서 주소를 지정할 때 128비트를 사용하는 것은 일반적인 구조와 같으며, 단지 필드가 더 넓다는 차이만 있다. 제공자는 일반적으로 /48네트워크를 할당한다. 서브네트워크와 64 호스트 비트를 위해 16비트는 남겨둔다.

Ipv6주소체계는 클래스 B 주소 체계와 비슷한 구조를 가지고 있다. 네트워크와 서브넷 공간이 충분하다고 해서, 호스트 주소 지정에 64비트를 사용하는 것은 낭비다. 하나의 서브넷에 수십억 개의 호스트를 사용하는 경우는 별로 없기 때문이다. 고정된 길이를 가지는 64비트 넓이의 호스트 식별자는 IPv4에서처럼 수동으로 할당할 수 없다. 대신에 v6 호스트 주소는 이른바 EUI64 주소로 생성한다. 이름에서 알 수 있듯이, EUI64 주소는 64 비트 넓이이며 아래쪽에 놓이는 네트워크 인터페이스의 MAC 주소에서 얻는다. 예를 들면, 이더넷에서 6 바이트(48비트) MAC 주소는 일반적으로 가운데에 "fffe" 헥스 비트로 채워진다. MAC 주소 01:23:45:67:89:ab를 EUI64 주소로 표현하면 01:23:45:ff:fe:67:89:ab이며, 이는 IPv6주소에 호스트 비트를 제공한다.

::0123:45ff:fe67:89ab
이러한 호스트 비트는 호스트에 IPv6를 자동으로 할당하는 데 사용하며, 이는 v6 호스트의 자동구성을 지원한다. 즉 완전한 v6 IP 번호를 얻는 데 필요한 것은 첫째 (넷/호스트) 비트이다. 또한 IPv6는 이를 자동으로 할당할 수 있다. IP 관련 머신에 관해서는 외부 네트워크에 게이트웨이로 기능하는 단 하나의 라우터가 있다. Ipv6에서는 이 라우터가 "라우터 광고(advertisement)" 정보를 보내고, 클라이언트는 작동 중에 이를 수신하거나, 시작시 요청하게 된다. 라우터 광고 정보에는 라우터 주소 데이터, 라우팅하는 주소의 접두사가 들어 있다. 이러한 정보와 호스트가 생성한 EUI64 주소로 v6 호스트는 IP 숫자를 계산해 내므로, 수동으로 주소를 할당하지 않아도 된다. 물론 라우터에 어느 정도의 설정을 해 줘야 한다. 라우터가 생성하는 광고 정보는 IPv4의 ARP 프로토콜의 후임 격인 NDP(Neighbor Discovery Protocol, RFC 2461참조)의 부분이다. ARP와 대조적으로 NDP는 MAC 주소를 위한 v6 주소 검색뿐만 아니라, 라우터에 이와 유사한 서비스를 지원한다. 그리고 서비스하는 접두사는 마지막 문단에서 설명한 것처럼 v6 호스트의 자동구성에 사용된다. 다중 어드레스 IPv4에선 하나의 호스트는 네트워크 인터페이스당 하나의 IP 번호를 가진다. 웹 서버와 같은 애플리케이션은 하나 이상의 IP 번호를 가지기도 한다. IPv6에서는 이와 다르다. 각 인터페이스를 위해, 전세계적으로 유일한 IP 어드레스뿐만 아니라, 두 개의 주소가 더 있다. 이 두 가지 주소는 링크-로컬(Link-local) 주소와 사이트-로컬(site-local) 주소이다. 링크-로컬 주소는 fe80::/64의 접두사를 가지며. 호스트 비트는 인터페이스의 EUI64 주소로부터 생성된다. 다른 서브네트워크에서는 보이지도 않고 연결을 할 수 없으며, 같은 네트워크의 호스트와 라우터를 연결하는 데 링크-로컬 주소를 사용한다. 이러한 것을 해결하기 위한 방법으로 사이트-로컬 주소를 사용하거나, 제공자(provider)가 할당하는 글로벌 주소를 사용하기도 한다. 사이트-로컬 주소는 네트워크 주소 fec0::/10으로 할당되고, 서브넷과 호스트는 제공자 할당 네트워크(provider-assigned networks)로 할당된다. 단지 차이라면, 다른 네트워크처럼 주소가 외부 머신에 노출되지 않으며, 이의 사이트-로컬 주소가 다른 물리적 네트워크에 있다는 것이다. IPv6의 경우, 로컬 링크와 글로벌 IP 어드레스를 할당 받은 호스트를 가지는 것이 가장 일반적이다. 사이트-로컬 주소는 오늘날엔 별로 사용하지 않으며, 글로벌 연결이 필요한 경우 글로벌 단일 주소를 사용할 수 밖에 없다. 멀티캐스팅 IP 세계에서, 하나의 호스트와 연결하여 통신을 하는 데에는 유니캐스트(unicast), 브로드캐스트(broadcast), 멀티캐스트(multicast)의 세 가지 방법이 있다. 가장 일반적인 방법은 유니캐스트 주소를 사용하여 직접 연결하는 것이다. IPv4에서 유니캐스트 주소는 모든 주소 비트가 할당된 하나의 호스트에 할당된 "normal" IP 어드레스이다. 같은 IP 서브넷의 모든 호스트를 주소 지정하는 데 사용하는 브로드캐스트 주소는, 네트워크 주소로 설정하는 네트워크 비트를 가지며 모든 호스트 비트는 1로 설정한다. 멀티캐스트 주소는 인터넷에 흩어져 있는 머신과 같은 멀티캐스트 그룹의 다수 호스트를 연결하는 데 사용한다. 멀티캐스트는 IPv4에선 많이 사용되지 않는다. IPv6에서 유니캐스트 주소는 IPv4와 똑같다. 즉, 모든 네트워크와 호스트 비트는 타깃 네트워크와 머신을 인식하기 위해 할당된다. 하지만 Ipv6에서는 IPv4에서처럼 브로드캐스트를 사용할 수 없다. ff::/8 네트워크의 주소는 멀티캐스트 애플리케이션을 위해 이미 예약되어 있다. 그리고 IPv4로부터 브로드캐스트 주소를 대신할 두 가지 특별한 멀티캐스트 주소가 있다. 하나는 "all routers" 멀티캐스트 주소이고 또 다른 하나는 "all hosts"를 위한 것이다. 이 주소는 서브넷에서 특별한 의미를 가진다. 예를 들면, 두개의 다른 서브넷에 연결된 하나의 라우터는 연결될 모든 서브넷의 호스트/라우터에 주소를 지정할 수 있다.
  • 모든 호스트 ff0X::1
  • 모든 라우터 ff0X::2,
"X"는 링크 스코프 ID이며, 네트워크를 인식한다. 보통 링크 스코프 ID는 "node local" 스코프 경우엔 "1"로, 첫째 링크 경우엔 "2"로 시작한다. 두 개의 인터페이스가 하나의 링크에 붙으며, 그 결과 대역폭이 두 배가 된다.

하나의 링크에 연결되는 몇 개의 인터페이스는 결과적으로 링크에 대한 하나의 스코프 ID만이 있다. "all hosts" 멀티캐스트 사용은 다른 머신과 통신하고자 하는 모든 머신이 "all hosts" 그룹에 요청신호를 보내고 응답을 기다리는 NDP 옆의 solicitation code에 있다. 이름 분석(name resoltution) 지금까지 Ipv6의 주소 지정에 대해 설명했는데, 이 때쯤이면 하나의 의문점이 생길 것이다. Ipv4처럼 길고 볼품없는 Ipv6 주소를 근사한 호스트 이름으로 줄일 수 없는가 하는 것이다. 물론 방법이 있다. Ipv6에서 IP 숫자 분석에 대한 호스트 이름은 대개 세 가지 방법으로 이루어 진다. /etc/hosts에 있는 간단한 테이블을 이용하거나, NIS(Network Information Service, 이전에는 YP라 불렀음)를 사용하거나, DNS(Domain Name System)를 이용하는 것이다. 이 글을 쓰고 있는 시점에서는 Ipv6의 NIS/NIS+은 데이터베이스 컨텐츠와 전송용으로 솔라리스 8에서만 사용할 수 있다. 이 때 RPC 확장을 사용한다. Ipv6에서는 /etc/hosts처럼 간단한 address <-> name 맵을 가질 수 있다. 구현에 따라 /etc/hosts는 v6 주소도 포함하거나, 이름에 대한 v6 주소를 맵핑하는 별개의 파일이 있다. V6 주소를 사용할 수 있는 /etc/hosts는 BSD OS(NetBSD, FreeBSD 등)의 KAME 기반 IP 스택과 USAGI 리눅스 스택과 솔라리스에서 사용하는 /etc/ipnodes 가 대표적이다. 다른 구현에서는 다른 파일을 사용한다. DNS는 기본적으로는 달라진 점이 없다. Ipv6 이름 분석은 AAAA 레코드로 하는데, 이름에서 알 수 있듯이, A 레코드의 4배 용량을 가진 엔티티를 가리킨다. AAAA 레코드는 A와 마찬가지로, 왼쪽에 호스트 네임이 있으며, 오른쪽에 Ipv6 주소가 있다.

noon      IN      AAAA     3ffe:400:430:2:240:95ff:fe40:4385
역 분석(reverse resolution)을 위해 Ipv6은 the in-addr.arpa 영역을 사용하는데, 아래와 같이 역순으로 바이트(10진법으로)를 작성한다(중요한 것일수록 오른 쪽에 위치한다). Ipv6에서도 이와 비슷한데, 10진법의 수 대신에 4 비트를 나타내는 헥스 디지트가 사용되며, 리소스 레코드의 도메인이 ip6.int이라는 차이점이 있다. 위의 호스트를 역 분석하려면, /etc/named.conf 파일에 다음과 같은 줄을 삽입하면 된다.

zone "0.3.4.0.0.0.4.0.e.f.f.3.IP6.INT" { 
type master; 
file "db.reverse"; 
};
그리고 db.reverse 영역 파일에 다음을 삽입한다(SOA와 NIS와 같은 일반 레코드 옆에).

5.8.3.4.0.4.e.f.f.f.5.9.0.4.2.0.2.0.0.0   IN    PTR    noon.ipv6.example.com.
여기에서 주소는 역순이 되며, 헥스 디지트가 차례로 나타나 있다. 가장 중요한 것은 오른쪽에 위치하며, 헥스 디지트는 영역 파일과 마찬가지로 점(dot)으로 분리된다. IPv6에서 DNS를 셋업할 때 사용중인 DNS 소프트웨어 버전을 확인해야 한다. BIND 8.x는 AAAA 레코드를 이해하지만, IPv6으로 이름 분석은 제공하지 않는다. 그래서 BIND9.x가 필요한 것이다. BIND 9.x는 현재 말하고 있는 리소스 레코드를 지원하지만, 아직 공식적으로 도입된 것은 아니다. 여기에서 가장 눈에 띄는 변화는 제공자나 접두사를 쉽게 변환할 수 있는 A6 레코드이다. 지금까지 주소 지정과 이름 분석에서 IPv4와 IPv6의 기술적인 차이에 대해 다루었다. IP 헤더 옵션, QoS(Quality of Service), 플로우(flows) 같은 세부적인 사항은 제외했다.
허버트 페이러(Hubert Feyrer)는 Fachhochschule Regensburg에서 운영체제, 데이터베이스, 인공 지능 분야에서 활동하고 있다. 신동섭님은 한빛 리포터 1기로 활동 중이며, 전자공학을 전공했습니다. 현재 LG전자에 근무하고 있으며 네트워크 프로그램 개발을 담당하고 있습니다. 관심분야는 보안, 웹 솔루션, 프로토콜 쪽으로, 곧 보안에 관한 기사를 실을 예정입니다.
TAG :
댓글 입력
자료실

최근 본 상품0