Search
Duplicate

컴퓨터 네트워크/ IPv6

IPv6 개요

IPv4의 한계

IPv4는 산술적으로 43억(2322^{32})개 정도의 주소를 표현할 수 있지만, 전세계적으로 인터넷의 급격한 보급과 무선 인터넷, 인터넷 정보 가전기기 등의 IP 주소에 대한 수요가 증가하면서 현 IPv4의 주소 체계로는 이에 대한 처리가 어렵다는 문제가 대두되었다.
또한 IPv4 주소 구조에 잠재하는 문제로 인해 사용되지 않는 많은 수의 주소들이 존재한다는 점에서 그 이유를 찾을 수 있다. 즉 클래스 A, B, C로 구분하여 ‘네트워크’ 단위로 주소를 할당하는 클래스 단위의 주소 할당 방식은 쓰이지 않는 많은 IP 주소를 발생시켜 주소의 낭비를 초래하였다.
예컨대 2,000개의 주소가 필요한 기관이 60,000개 이상의 주소를 수용할 수 있는 B 클래스의 주소를 할당 받음으로써 사용되지 않고 버려지는 주소가 생기게 되었다.

IPv6의 등장

1994년 IETF에서 표준화로 채택된 IPv6는 IPv4의 32비트 주소길이를 4배 확장한 차세대 주소체계로서 128비트의 주소 길이를 사용하여 약 3.4×10383.4 \times 10^{38}개의 주소가 생성 가능하다.
이런 IPv6의 주소체계는 IP의 주소 고갈 문제를 근본적으로 해결할 수 있을 뿐만 아니라 보안 문제, 라우팅 효율성 문제, QoS(Quality of Service) 보장, 무선 인터넷 지원과 같은 다양한 기능들을 제공할 수 있게 되어서 차세대 인터넷 구현의 핵심적인 요소로 인식되고 있다.
IPng는 IPv6를 개발하기 위한 기술적인 표준으로서 17개의 기준 항목들을 RFC 1726에 정의하였는데, 몇 가지를 살펴보면 다음과 같다.
범위(Scale)
적어도 101210^{12}개의 종단 시스템(end system)을 식별하고 어드레싱 할 수 있어야 하고, 라우팅 프로토콜과 그 구조는 10910^{9}개의 개별 네트워크를 수용할 수 있어야 한다.
토폴로지 유연성
라우팅 구조와 프로토콜은 다양한 네트워크 토폴로지를 수용할 수 있어야 한다.
매체 독립성
수많은 다른 종류의 LAN, MAN, WAN 매체의 인터네트워크에서 동작할 수 있어야 한다.
비신뢰성 데이터그램 서비스
프로토콜은 신뢰성을 보장하지 않는 데이터그램 전송 서비스를 지원해야 한다.
안전한 동작
해킹으로 인한 서비스 거부로부터의 보호, 라우팅 및 제어 프로토콜에 대한 보호 등과 같은 기능을 수행하는 안전한 네트워크 계층을 제공해야 한다.
고유한 이름
전 세계적이고 도처에서 사용될 수 있는 인터넷 상에서의 고유한 이름을 IP계층 객체에 할당할 수 있어야 한다.
멀티캐스트
프로토콜은 유니캐스트 및 멀티캐스트 패킷 전송을 지원할 수 있어야 한다.
이동성 지원
프로토콜은 이동성 있는 단말 및 네트워크를 지원할 수 있어야 한다.

IPv6 특징

확장된 주소 공간

IPv6는 128비트의 주소 공간을 갖는다. 128비트의 주소 공간에는 3.4×10383.4 \times 10^{38}개의 주소가 할당될 수 있다. 이러한 큰 주소 공간은 인터넷 백본에서부터 소규모 사설 네트워크에 ㅇ르기까지 모든 단말기에 할당할 수 있는 주소공간으로 전혀 문제가 없다.
주소 할당 방식은 기존의 비효율적인 클래스별 할당을 지양하고, 주소에 대한 낭비를 없애기 위해 A, B, C, D등급과 같은 클래스별 할당이 아닌 유니캐스트(Unicast), 애니캐스트(Anycast), 멀티캐스트(Multicast) 주소 형태로 이루어진다.
예컨대 인터넷을 사용하는 개인 사용자들에게는 유니캐스트 주소를 할당하고, 근거리 통신망으로 연결된 기업 및 학교 등의 사용자에게는 애니캐스트 주소를 사용하게 하며, 인터넷 서비스 제공 업체와 같은 대규모 사업자에게는 멀티캐스트 주소를 할당하게 된다.
마지막으로 IPv6는 언제 어디서나 용이한 인터넷 접속을 위해(특히 무선 인터넷의 경우) 주소의 자동 생성 기능을 지원한다.

새로운 헤더 포맷

IPv6 헤더는 패킷 처리에 대한 오버헤드를 최소로 줄이기 위해 IPv4의 헤더에 비해 명확하고 단순하게 구성하였다. IPv4에서 별로 사용되지 않았던 일부 헤더 필드를 삭제하고 확장 헤더를 도입하여 선택적인 사용을 가능하게 했는데, 이는 패킷을 중계하는 라우터들의 부하를 줄이기 위한 것이다.
기존의 헤더에 비해 변화된 내용으로는 첫째, 헤더를 고정 길이로 변경하였다.
헤더의 길이를 고정하여 시스템에서 헤더의 길이를 예측하기가 용이해져 하드웨어를 이용한 빠른 처리가 가능해졌다. 더불어 기존 IPv4의 가변길이 패킷과의 호환을 위해 IPv6에서는 선행헤더의 뒤에 확장헤더를 붙여서 사용할 수 있게 하였다.
둘째, 패킷 단편화(Fragmentation) 관련 필드가 삭제되었다.
패킷을 단편화 시키는 기능은 라우터에 많은 부담을 주고, 네트워크의 효율적인 이용을 방해하기 때문에 IPv4에서 사용하던 식별자 필드와 단편 오프셋 필드를 삭제하였다.
IPv6에서는 경로 MTU 탐색이라는 새로운 기능으로 패킷 단편화 기능을 대신한다.
마지막으로 체크섬 필드가 삭제되었다.
체크섬 필드는 패킷의 정확한 전송 여부를 검사하기 위한 필드이지만, 체크섬을 계산하기 위한 부하가 많고 이미 데이터링크 계층에서 체크섬 계산이 행해지고 있으므로 삭제가 되었다.
결론적으로 주소 필드의 증가로 기본 헤더의 길이는 IPv4의 두 배로 되었고, 전체 필드 수는 12개에서 8개로 단순화되어 기본적인 처리 속도를 개선할 수 있게 되었다.

향상된 서비스 지원

응용 프로그램이 특정 서비스 품질(QoS)를 요구하는 경우, 응용 프로그램에 의해 생성된 트래픽을 실시간과 비실시간 트래픽으로 구분하는 것이 필요하다.
예컨대 긴급하지 않은 데이터 패킷과 화상 회의나 음성 전송과 같이 시간에 민감한 응용 데이터 패킷을 구분할 수 있어야 하는데, IPv6는 이러한 트래픽을 효과적으로 분류할 수 있는 기능을 제공한다.
이를 위해 IPv6 헤더 내에 플로우 레이블(Flow Label) 필드가 정의되어 있다.
실제로 IPv6 자체가 IPv4보다 더 나은 서비스 품질을 제공한다고는 할 수 없지만 트래픽 플로우에 대한 구분을 수행할 수 있는 여건을 마련함으로써 간접적으로 향상된 서비스 품질을 제공할 수 있다.

보안 기능

IPv4는 처음 설계 시 보안에 대한 규정을 하지 않았다. 따라서 IPv4에서의 보안은 IPSec(Internet Protocol Security)이라는 보안 관련 프로토콜들을 별도로 설치해 주어야 하는 부가적 기능을 필요로 하였다. 이러한 방식은 현재의 전자 상거래 활성화 등과 같은 인터넷 환경의 변화에는 효과적으로 대처할 수 없는 접근법이다.
IPv6에서는 이러한 문제를 해결하기 위해 프로토콜 내에 보안관련 기능을 탑재할 수 있도록 설계되었다.
즉, IPv6는 보안과 관련된 인증 절차, 데이터 무결성 보호, 메시지의 발신지 확인 기능을 제공한다. 또한 IPv6의 표준 확장 헤더를 통하여 네트워크 계층에서의 종단간 암호화를 제공하여 패킷에 대한 변조를 방지할 수 있다.

주소 자동설정

IPv4에서는 시스템을 설정할 때 IP 주소, 네트워크 마스크, 게이트웨이 주소 등과 같은 여러 설정을 입력하고, 재시작해야 하는 절차를 거쳐야 했다. 이와 같은 작업은 네트워크의 규모가 커질수록 더욱 복잡하게 된다.
하지만 IPv6에서는 로컬 IPv6 주소를 자동으로 생성할 수 있다.
LAN 상의 MAC(Medium Access Control) 주소와 라우터가 제공하는 네트워크 프리픽스(Prefix: IPv6 주소 앞 부분에 위치하는 비트의 집합)를 결합하여 IP 주소를 생성할 수 있다.
이러한 주소 자동설정 기능은 시스템 관리나 설정에 필요한 막대한 비용과 시간을 줄여주고 사용자에게 편리함을 제공한다. 예컨대 이동형 컴퓨터의 경우 어느 곳에서든 네트워크와 연결을 설정하면 자동으로 포워딩 주소를 설정할 수 있게 된다.
이러한 주소 자동설정의 구현방법은 크게 두 가지로 분류되며 다음과 같다.
상태 보존형 자동설정(Stateful Auto-Configuration)
기본적으로 DHCP(Dynamic Host Configuration Protocol) 서버로부터 주소를 비롯한 모든 네트워크 정보를 받는 방식이다. 호스트가 DHCP 서버에 주소를 요청하면, 서버에서는 할당 가능한 주소를 살펴보고 가용한 주소를 호스트에게 할당하는 방식이다.
이 방식은 주소의 이용 효율성을 향상시킬 수 있고 호스트의 인증과정 등을 이용하여 보안성을 유지할 수 있다. 하지만 서버의 설치 및 구성과 관리가 복잡하며 예상치 못한 접속에도 대응할 수 있도록 대규모의 데이터베이스를 갖추어야 하는 단점이 있다.
비상태형 자동설정(Stateless Auto-Configuration)
IPv6에서 새로 개발된 자동설정법으로 호스트 측에서 스스로 주소를 생성하는 방법이다. 호스트는 자신의 인터페이스 정보와 라우터로부터 얻은 네트워크 프리픽스 정보 또는 Well-Known 프리픽스 정보를 이용하여 자체적으로 IPv6 주소를 생성한다.
이 방법은 호스트가 자신의 주소에 대한 생성 및 할당을 수행함으로써 특별히 서버의 설치가 필요 없다는 장점이 있다. 단점으로는 이용 권한이 없는 호스트의 접근 등으로 인해 발생할 수 있는 보안 관련 사항에 대한 처리 기능이 필요하다는 것이다.
IPv6와 IPv4의 특징을 요약하면 아래 표와 같다.
구분
IPv4
IPv6
주소 길이
32비트
128비트
표시 방법
8비트씩 4부분으로 10진수 표시 예) 203.252.53.55
16비트씩 8부분으로 16진수 표시 예) 2002:0221:ABCD:DCBA:0000:0000:FFFF:4002
주소 개수
약 43억개
21282^{128}개 (43억 x 43억 x 43억 x 43억)
주소할당 방식
A, B, C, D 등의 클래스 단위 비순차적 할당
네트워크 규모, 단말기 수에 따른 순차적 할당
브로드캐스트 주소
있음
없음(대신, 로컬 범위 내에서의 모든 노드에 대한 멀티캐스트 주소 사용)
보안
IPSec 프로토콜 별도 설치
IPSec 자체 지원
서비스 품질
제한된 품질 보장(Type of Service에 의한 서비스 품질 일부 지원)
확장된 품질 보장(트래픽 클래스, 플로우 레이블에 의한 서비스 품질 지원)
Plug & Play
불가
가능

IPv6 주소

주소 표기

IPv6의 주소는 16진수로 표시한다. 128비트의 긴 주소를 보다 읽기 쉽게 하기 위해 16진수 콜론 표기법을 사용한다. 이것은 128비트를 16개씩 8개의 필드로 나누어 콜론(:)으로 구분하는데, 각 16비트의 필드는 16진수 값으로 표현한다.

주소 생략법

16진수로 표현하는 것은 128비트의 긴 주소를 간단히 표현하는데 큰 역할을 하지만 이를 그대로 이용하는 것은 문제점이 있다. 또한 일부 특정한 유형의 IPv6 주소 할당으로 인하여 주소에는 ‘0’의 값을 갖는 경우가 많다. ‘0’의 값을 포함한느 주소의 작성을 보다 쉽게 하기 위해 몇 가지 조건 하에서 주소를 생략할 수 있는 방법들이 제안되었는데 그 방법은 다음과 같다.
각 필드에서 선행하는 0은 생략될 수 있다. 이러한 생략 방식을 사용하면 0221은 221로 00AB는 AB로 0000은 0으로 나타낼 수 있다. 단 뒤에 나오는 0은 생략할 수 없다. 4200은 42로 생략할 수 없다. 이러한 생략 방법의 예는 그림 8-3과 같다.
0으로만 나타난 연속된 필드는 0을 모두 삭제하고 2개의 콜론(이중콜론)만으로 나타낸다. 하지만 ‘::’ 기호를 사용하는 경우는 주소당 한 번만 허용됨을 주의해야 한다. 또한 ‘::’는 주소 내에서 선행과 후행에 관계 없이 사용될 수 있다. 그림 8-4는 연속된 0을 생략하는 과정을 도시하고 있다.
IPv4와 IPv6의 주소를 하나의 주소 내에 함께 표현하는 경우가 있는데, 이와 같은 경우에는 하위 32비트를 IPv4 형식으로 주소 표기를 한다. 즉 x:x:x:x:x:x:d.d.d.d와 같은 표기가 가능하다. (여기서 ‘x’는 16진수 값을, ‘d’는 10진수 값을 나타낸다)
::203.252.1.1 ::FFFF:123.1.0.42
C++

주소 프리픽스 표현 방법

IPv6의 주소 프리픽스 표현은 IPv4의 CIDR(Classless Inter-Domain Routing)에서의 표기법과 유사하다. IPv6의 주소 뒤에 ‘/’를 표기하고, 프리픽스의 길이를 나타내는 10진수의 숫자를 표기한다. 예컨대 다음과 같다.
BEAF::ABCD:0:0FFFF/70
C++
위 예의 경우 BEAF::ABCD:0:FFFF가 노드의 주소가 되며, 70비트의 프리픽스를 의미한다. 여기서 주의할 점은 /의 앞에 있는 주소 부분은 반드시 IPv6의 주소 표기 방법을 따라야 한다. 따라서 주소를 생략하는 경우도 앞서 설명한 주소 생략법의 법칙을 정확히 적용해야 한다.

주소 형태

IPv6의 주소는 크개 유니캐스트(Unicast) 주소, 멀티캐스트(Multicast) 주소, 애니캐스트(Anycast) 주소와 같이 3종류의 형태로 분류할 수 있다. 각각의 주소 형태에 대한 특징을 살펴보면 다음과 같다.

유니캐스트(Unicast) 주소

유니캐스트 주소는 1대 1 통신을 함에 있어서 서로 간의 인터페이스를 식별하는 주소이다. 유니캐스트 주소는 단일 인터페이스를 지정하며 유니캐스트 주소로 보내진 패킷은 그 주소에 해당하는 인터페이스에만 전달된다.
IPv4의 유니캐스트 주소는 네트워크, 서브네트워크, 호스트로 구성되었지만, IPv6에서는 주소 공간의 확장으로 인해 보다 많은 계층적 구조를 가질 수 있다. 이처럼 다양한 유니캐스트의 주소를 살펴보면 다음과 같다.
1.
미지정(unspecified) 주소
주소 0:0:0:0:0:0:0:0 혹은 :: 를 미지정 주소라 한다. 이 주소는 노드가 자신의 주소를 알 수 없을 때 이를 알아내기 위하여 사용된다. 예컨대 호스트를 초기화하기 위해 패킷을 전송할 때 자신의 IP 주소를 알지 못하므로, 미지정 주소를 발신지 주소필드에 사용하여 자신의 주소를 얻어내는 경우에 사용한다.
따라서 미지정 주소는 목적지 주소로 사용할 수 없다. 그리고 어떤 노드에도 할당되지 않는다.
2.
루프백(loopback) 주소
주소 0:0:0:0:0:0:0:1 혹은 ::1은 루프백 주소이다. 이 주소는 IPv4의 127.0.0.1과 마찬가지로 자기 자신에게 패킷을 전송할 경우에 사용된다. 따라서 루프백 주소는 호스트의 주소로는 할당될 수 없으며, 패킷이 외부로 전송될 때 발신지의 주소로도 사용될 수 없다.
3.
IPv4 주소를 포함한 IPv6 주소
IPv4 호환 주소(IPv4-Compatible Address)
IPv6의 네트워크와 IPv4의 네트워크가 동시에 존재하는 경우에 IPv6 패킷이 IPv4 네트워크를 경유하고자 할 때 사용되는 주소 방식이다. 즉 IPv6와 IPv4 간에 호환성을 보장하기 위해 사용되는 주소이다.
IPv4 호환주소는 주소필드 128비트 중 상위 96비트를 0으로 하고 나머지 32비트를 IPv4 주소로 사용한다. IPv4 호환 주소 형식은 그림 8-5와 같다.
IPv4 매핑 주소(IPv4-Mapped Address)
호스트가 IPv6를 전혀 지원하지 않는 경우 IPv6 네트워크에서 IPv4 호스트를 식별하기 위한 주소이다. 즉 IPv4 호스트들의 주소를 IPv6 주소로 변환할 때 사용되는 주소이다.
IPv4 매핑 주소의 형식은 그림 8-6에서 나타내고 있는 바와 같이 상위 80비트를 0으로 하고 다음 16비트를 1로 나머지 32비트는 IPv4 주소로 구성된다.
4.
글로벌 유니캐스트 주소
인터넷 상의 호스트를 구별할 수 있는 세계적으로 유일한 주소이다. 첫 세 비트가 000으로 시작되는 경우 그림 8-7과 같이 인터페이스 ID 필드의 크기가 고정되어 있지 않다. 이것은 일반적인 글로벌 유니캐스트의 주소 형식과 동일하다.
이진 값 000으로 시작되지 않는 글로벌 유니캐스트 주소의 경우는 64비트의 인터페이스 ID 필드를 지니게 되는데, 이러한 예로 통합 글로벌 IPv6 유니캐스트 주소(Aggregatable Global Unicast Address)를 들 수 있다. 통합 글로벌 유니캐스트 주소 형식은 그림 8-8과 같다.
TLA ID
라우팅의 계층 구조에서의 최상위 식별자이다. 현재는 8,192개의 TLA ID가 존재한다. TLA ID 할당은 IANA(Internet Assigend Numbers Authority)에서 관장하고 있다.
Res
TLA ID나 NLA ID의 크기에 대한 확장성을 고려하여 향후 사용을 위한 예약된 비트이다.
NLA ID
특정 단위의 사이트를 구별하기 위해 TLA ID에 의해 기관 단위로 할당되는 식별자이다. 또한 NLA ID는 네트워크 규모에 따라 계층적인 할당이 가능하다.
SLA ID
NLA ID를 할당 받은 최종 개별 사용자가 그 조직 내부의 서브 네트워크를 설계하기 위해 이용하는 식별자이다. IPv4와 다르게 16비트이기 때문에 최대 65,535개의 서브 네트워크를 구성할 수 있다.
5.
로컬 유니캐스트 주소
글로벌 주소에 대한 절약과 특정 조직(사이트) 내에서의 보안문제를 위하여 해당 사이트에서만 사용이 가능한 주소형식이다. 따라서 인터넷 상에서는 사용할 수 없으며 로컬 사이트 내에서만 사용할 수 있는 주소이다.

멀티캐스트(Multicast) 주소

멀티캐스트 주소는 인터페이스 그룹을 식별하는 주소이다. 즉, 임의의 멀티캐스트 주소로 패킷을 전송하는 경우, 해당 멀티캐스트 그룹에 등록되어 있는 모든 호스트가 패킷을 받게 된다.
멀티캐스트 주소는 동일한 프리픽스 공유 여부와 무관하며, 동일한 물리적 네트워크에 연결되어 있지 않은 경우에도 패킷은 해당 그룹의 호스트에게 전달된다. 이러한 멀티캐스트 주소는 상위 8비트가 모두 1로 되어 있으며, 그림 8-9와 같은 형식을 갖는다.
Flag
플래그 필드는 4비트로 구성되어 있으며, 설정된 멀티캐스트의 주소가 이미 규정되어 있는 주소인지 일시적으로 사용되기 위한 주소인지를 규정한다.
4비트 중 상위 3비트는 아직 사용되고 있지 않는 비트로 모두 0이다. 따라서 마지막 비트는 이에 대한 구분을 하는데 0인 경우가 영구적으로 규정되어 있는(Well-Known) 멀티캐스트 주소를 나타내고, 1인 경우는 일시적(Transient)인 주소를 나타낸다.
그림 8-10은 이와 같은 멀티캐스트 주소 플래그 필드 구성에 대한 내용을 보여준다.
Scope
멀티캐스트 트래픽이 전달될 수 있는 IPv6 네트워크의 범위로 나타낸다. Scope 필드는 4비트로 구성되어 있고, 필드 값에 따라 몇 개의 범위로 구분된다.
노드 로컬 범위(Node-Local Scope)는 멀티캐스트 주소가 해당 노드(호스트)내에서 유효한 것이며, 링크 로컬 범위(Link-Local Scope)는 그 인터페이스가 소속되어 있는 동일 링크상에서 유효하다.
이와 같은 범위 구분 방식으로 사이트 로컬 범위(Site-Local Scope)와 조직 로컬 범위(Organization-Local Scope)가 존재하고, 글로벌 범위(Global Scope)와 같은 경우는 전 세계에서 유효하게 되어 있다.
범위에 따른 멀티캐스트 주소 값을 요약해 보면 아래 표와 같다.
값(16진수)
범위
0
Reserved
1
Node-local Scope
2
Link-local Scope
5
Site-local Scope
8
Organization-local Scope
E
Global Scope
F
Reserved
모두가 공통적으로 사용할 수 있도록 설계된 멀티캐스트 주소들은 이미 영구적으로 규정되어 있다. 이러한 멀티캐스트 그룹은 RFC 2375에 나타나 있는데, 몇 가지를 살펴보면 다음과 같다.
1.
예약된 멀티캐스트 주소
이것은 멀티캐스트 그룹에 할당되어서는 안되는 이미 정해져 있는 주소로써 범위는 다음과 같다.
FF0x:0:0:0:0:0:0:0 (x는 0~F를 나타내는 16진수 값)
2.
모든 노드 멀티캐스트 주소
이것은 해당 범위 내의 모든 IPv6 노드를 식별하는 주소이다. 내용은 다음과 같다.
FF01::1(노드 로컬 범위에서의 모든 노드를 지칭하는 멀티캐스트 주소)
FF02::1(링크 로컬 범위에서의 모든 노드를 지칭하는 멀티캐스트 주소)
3.
모든 라우터 멀티캐스트 주소
이 주소는 해당되는 범위 내에서의 모든 IPv6 라우터들을 식별하는 주소이다. 내용은 다음과 같다.
FF01::2(노드 로컬 범위에서의 모든 라우터를 나타내는 멀티캐스트 주소)
FF02::2(링크 로컬 범위에서의 모든 라우터를 나타내는 멀티캐스트 주소)
FF05::2(사이트 로컬 범위에서의 모든 라우터를 나타내는 멀티캐스트 주소)

애니캐스트(Anycast) 주소

애니캐스트 주소는 멀티캐스트 주소와 비슷하게 다수의 인터페이스 그룹을 식별할 수 있다. 하지만 멀티캐스트와는 다르게 패킷을 전송할 때 해당 그룹에 속하는 모든 인터페이스에게 전달하는 것이 아니고, 해당 그룹에 속하는 인터페이스 중 가장 가까운 거리에 있는 인터페이스에게만 패킷이 전달된다.
여기서 가장 가까운 거리라는 의미는 라우팅 프로토콜에 의해 설정되는 네트워크 상의 거리가 가장 짧은 것을 나타낸다.
따라서 이러한 애니캐스트는 서브 네트워크 상의 가장 가까운 자원을 찾아내기 위한 수단으로 사용되기도 하며, 주소 형식은 그림 8-11과 같다.
이러한 애니캐스트 주소는 IPv6의 발신지 주소로 사용해서는 안되며, 호스트의 주소로서 할당되어서도 안 된다.
애니캐스트의 기능을 통하여 사용자는 가장 가까운 라우터와 통신을 할 수 있을 뿐만 아니라 특정 서비스를 받기 위해 가장 가까운 서버를 찾을 수도 있다.

미니요약 | IPv6 주소 형태

IPv6 패킷

기본 구조

IPv6 패킷은 IPv4와 같이 맨 앞부분에 주소 정보등과 같은 데이터 전송에 필요한 정보들을 포함한 기본 헤더를 갖는다.
IPv6 기본 헤더 크기는 항상 40바이트로 고정되어 있다. 그리고 그 기본 헤더 뒤에는 데이터의 전송에 대한 세부 사항들을 필요에 따라 지정하거나 특정 기능을 사용할 수 있도록 여러 가지 옵션들을 추가할 수 있도록 여러 가지 옵션들을 추가할 수 있는 확장 헤더들이 위치한다.
확장헤더 다음에는 상위 계층의 PDU(Protocol Data Unit)가 위치하게 되는데, PDU의 예로는 TCP 세그먼트나 UDP 메시지,혹은 ICMP(Internet Control Message Protocol) 메시지를 들 수 있다.
앞서 설명한 세 가지 필드를 통틀어서 IPv6 패킷이라 호칭하고, 그 중 기본 헤더 필드를 제외한 확장 헤더와 상위 계층의 PDU 부분을 페이로드 필드로 정의한다.
페이로드 필드는 기본적으로 65,535 바이트까지의 크기를 가질 수 있다. IPv6 패킷의 기본 구조는 그림 8-12와 같다.

기본 헤더

IPv6 기본 헤더는 그림 8-13에서 나타내고 있는 바와 같이 40바이트의 고정 길이를 갖는다. IPv6 기본 헤더는 기본적으로 발신지에서부터 목적지까지 데이터를 전송하는데 필요한 필수적인 정보들을 포함한다. 각 필드의 기능에 대해 살펴보면 다음과 같다.
버전(Version) 필드: 4비트
IP의 버전을 나타내는 필드로써 IPv6의 경우 6의 값을 가진다.
트래픽 클래스(Traffic Class) 필드: 8비트
IPv6 패킷의 클래스나 우선순위를 나타낸다. IPv4의 TOS(Type of Service) 필드와 유사한 기능을 하며, IPv4와의 연동시에 IPv4의 TOS 값에 매칭된다.
플로우 레이블(Flow Lable) 필드: 20비트
네트워크 상에서 패킷들의 어떤 특정한 흐름에 대한 특성을 나타내는 필드이다. 기본적으로 0으로 되어 있고, 음성이나 화상 등의 실시간 데이터의 트래픽을 나타내기 위해 0이 아닌 값으로 설정된다. 이 필드에 대한 사용 방법은 IETF에서 아직 논의 중이다.
페이로드 길이(Payload Length) 필드: 16비트
페이로드의 길이를 바이트 단위로 표시한다. 필드의 길이가 16비트이므로 216(65,536) 바이트까지 표시할 수 있다. 이것은 IP 패킷의 길이를 제한하게 되는데, 이보다 더 큰 데이터그램을 보내기 위해서는 홉-바이-홉(Hop-by-Hop) 확장헤더의 점보 페이로드(Jumbo Payload) 옵션을 이용한다.
점보 페이로드 옵션을 사용할 경우 페이로드 길이 필드는 모두 ‘0’으로 설정된다.
다음 헤더(Next Header) 필드: 8비트
IPv6 기본헤더 다음에 어떠한 종류의 확장 헤더가 오는지를 나타내는 필드이다. 예컨대 0인 경우는 홉-바이-홉 헤더가 뒤에 온다는 것을 알려준다. 다음 헤더 필드는 다른 모든 확장 헤더에도 동일하게 포함되는데, 다음에 오는 확장 헤더의 종류를 표현하기 위해 사용된다.
다음 표는 헤더의 종류를 표시하는데 사용되는 값들을 보여주고 있다.
값(10진수)
헤더
0
Hop-by-hop Options Header
2
Internet Control Message Protocol
4
Internet Protocol
6
Transmission Control Protocol
17
User Datagram Protocol
41
Encapsulated IPv6 Header
43
Routing Header
44
Fragment Header
45
Inter-domain Routing Protocol
46
Resource Reservation Protocol
50
Encapsulating Security Payload
51
Authentication Header
58
Internet Control Message Protocol v6
59
No Next Header
30
Destination Options Header
홉 제한(Hop Limit) 필드: 8비트
IP 패킷이 전송되는 거리를 홉(Hop) 단위로 제한할 떄 사용하는 필드이다. IPv4의 TTL(Time to Live) 필드와 같은 역할을 하며, 경유할 수 있는 라우터의 최대 개수를 지정한다. 즉 헤더 생성 시 임의의 초기값으로 설정되고, 각 라우터를 지날 때마다 이 값을 1씩 감소시키며, 홉 제한 값이 0이 되면 패킷을 폐기하게 된다.
홉 제한 필드는 라우팅 루프가 발생하는 것을 방지하는 것 외에 멀티캐스트 그룹 내에서 가장 가까운 서버를 찾는 것에도 이용된다.
발신지, 목적지 주소(Soure, Destination Address) 필드: 128비트
IPv4와 마찬가지로 패킷을 보내는 호스트의 주소와 패킷이 도착해야 할 목적지 호스트의 주소를 나타낸다. IPv6 주소 형식에 따라 각각 128비트의 길이를 갖는다.

확장 헤더

확장 헤더는 기본 헤더에서 제공하는 기본적인 기능 외에 추가적인 기능들을 지원하기 위해 사용된다. 확장 헤더는 기본 헤더 바로 다음에 위치하며 몇 가지가 표준안에 정의되어 있다.
확장 헤더의 형식은 그림 8-14와 같고, 기본 헤더의 다음 헤더(Next Header) 필드로부터 싲가하여 다음 확장 헤더를 차례대로 검사하여 헤더를 식별한다.
확장 헤더의 맨 앞의 1바이트는 다음 확장 헤더 값을, 다음 1바이트는 해당 확장 헤더의 길이를 표시한다. 확장 헤더는 일반적으로 IPv6 패킷 내에 없거나 하나 이상 존재할 수 있다.

홉-바이-홉(Hop-by-Hop) 옵션 헤더

모든 라우터는 패킷의 홉-바이-홉 옵션들을 검사하고 처리해야 한다. 즉, 홉-바이-홉 옵션 헤더는 패킷이 전달되는 경로상의 모든 라우터가 검사해야 하는 옵션 정보를 전달하는데 사용된다.
홉-바이-홉 헤더는 IPv6 헤더의 다음 헤더(Next Header) 값이 0인 경우에 해당되며, 헤더 형식은 그림 8-15와 같다.
RFC 2460, 2675, 2711에 의해 정해진 옵션들은 점보 페이로드 옵션과 라우터 경고 옵션 등이 있다.
Pad1 옵션(옵션 타입 0)
가장 간단한 옵션이며 헤더 내에서 한 바이트의 패딩을 삽입하기 위해 사용된다.
PadN 옵션(옵션 타입 1)
두 바이트 내지는 그 이상의 패딩을 삽입하기 위하여 사용된다.
점보 페이로드(Jumbo Payload) 옵션(옵션 타입 194)
IP 기본헤더의 페이로드 길이 필드에 의해 패킷길이가 65,535 바이트로 제한됨에 따라 이 이상의 길이를 갖는 패킷을 보내기 위해 사용되는 옵션이다.
이 옵션은 32비트의 페이로드 길이 필드를 사용하여 최대 4,294,967,295 바이트까지의 패킷을 보낼 수 있게 한다. 65,535 바이트보다 큰 크기의 IPv6 패킷을 점보그램(Jumbogram)이라 한다.
라우터 경고(Router Alert) 옵션(옵션 타입 5)
패킷을 중계하는 라우터들에게 IP 데이터그램의 내용을 좀 더 자세히 검사하여 처리하도록 경고를 주는 옵션이다. 이 옵션은 데이터그램이 해당 경로상으로 전송되면서 어떠한 특정 프로세싱 기능이 필요한 경우 사용되는 기능이다. 예컨대 RSVP(Resource reSerVation Protocol)와 같은 프로토콜에 사용될 수 있다.

목적지 옵션 헤더(Destination Options Header)

패킷이 최종적으로 전달되는 목적지 노드에서만 검사하면 되는 선택적인 정보를 전달하는데 사용하는 옵션이다. 이전 헤더의 다음 헤더 필드 값이 60인 경우에 의해 식별되며, 헤더 형식은 그림 8-15의 홉-바이-홉 헤더 형식과 동일하다.

라우팅 헤더(Routing Header)

보통의 경우 송신 측에서 송신지 주소와 목적지 주소 값을 주어서 패킷을 전송하면, 중간의 라우팅 과정에 대해 관여하지 않는다. 그러나 IPv6에서는 송신측에서 라우팅 헤더의 확장 헤더를 이용하여 전송하는 패킷의 라우팅 경로에 대해 제어를 할 수 있다.
이 기능은 IPv4의 느슨한 소스 라우팅(Loose Source Routing) 기능과 비슷하다. 헤더 식별을 위한 다음 헤더 값은 43번이며, 형식은 그림 8-16과 같다.
라우팅 헤더의 맨 앞 두 바이트는 확장헤더에 필요한 일반 필드들이며, 세 번째 라우팅 타입 필드는 0인 경우 느슨한 라우팅(Loose Routing)을 나타낸다.
그 다음의 남은 세그먼트(Segment Left) 필드는 아래의 주소 리스트에서 앞으로 방문해야 할 주소가 얼마나 남았는지를 표시한다. 그 아래는 32비트의 예약된 필드가 있으며 전송 시 0으로 초기화된다.
주소필드는 1에서 n까지의 128비트 주소 값을 저장한다. 이 주소에는 멀티캐스트 주소가 포함되어서는 안 된다.

분할 헤더(Fragment Header)

분할 헤더는 전송 경로 MTU보다 크기가 큰 패킷을 목적지까지 전송할 떄 사용된다. IPv4의 패킷 분할 기능과 달리 IPv6에서는 발신 노드에서만 패킷에 대한 분할이 가능하고, 중간의 라우터들은 패킷 분할을 할 수 없기 때문에 새로운 헤더 형식이 필요하다.
분할 헤더의 형식은 그림 8-17과 같으며 헤더 식별을 위한 다음 헤더 값은 44이다.
분할 옵셋(Fragment Offset) 필드는 분할된 해당 패킷 데이터그램의 맨 첫 1바이트가 원래 데이터그램의 첫 번째 바이트와 얼마나 떨어져 있는가를 8바이트 단위로 나타낸다. 따라서 분할 옵셋 필드는 반드시 8의 정수배로 표현되어야 한다.
그 다음의 2비트 예약 필드는 0으로 초기화되며 아직 사용되지는 않는다.
다음 ‘M’(More Fragment Flag) 필드는 1비트의 길이를 가지며, ‘1’의 경우는 분할 헤더를 포함한 패킷이 더 존재한다는 의미이고, ‘0’일 경우는 분할 헤더를 포함한 패킷이 마지막 패킷이라는 의미이다. 따라서 맨 마지막 데이터그램을 제외하고는 모두 ‘1’로 세팅된다.
식별(Identification) 필드는 32비트로 구성되며, 해당 패킷이 원래 어느 패킷의 일부인지를 식별하기 위해 사용된다. 즉, 다른 분할된 패킷과 구별하기 위해 사용된다.

인증 헤더(Authentication Header)

인증 헤더는 송신측에서 전송된 패킷이 전송도중에 변경되거나 변조되지 않아는지 확인하여 확실한 데이터 수신 여부를 확인할 수 있게 한다. 인증 헤더는 IPv6에서 향상된 보안 특징 중 하나이며 RFC 2402, 2401에 정의되어 있다. 헤더 식별을 위한 다음 헤더 값은 51번이다.

IPv4/IPv6 전환

IPv6라는 새로운 규격이 나오게 되었지만, 현재 이용되고 있는 IPv4 네트워크를 한 순간에 IPv6로 바꾼다는 것은 불가능하다. 그러므로 한동안 IPv4와 IPv6 네트워크가 공존할 것이라는 것은 누구나 인지하고 있는 사실이다. 따라서 서로 다른 두 종류의 프로토콜을 사용하기 위한 연동 방법이 필요한데, 연동 방법으로는 다음과 같은 것들이 있다.
이중 스택(Dual Stack)
터널링(Tunneling)
IPv4/IPv6 변환

이중 스택(Dual Stack)

IPng로 전환되는 과정에서 새로이 구축될 IPv6 네트워크의 호스트나 라우터들은 IPv6전용이거나 IPv4와 IPv6 둘 다 사용할 수 있는 이중 스택 시스템일 것이다. 이중 스택 시스템이라는 것은 IP 계층에 두 가지의 프로토콜이 모두 탑재되어 있고 통신 상대방에 따라 해당 IP 스택을 선택하는 시스템이다.
이와 같이 양쪽의 프로토콜 스택 모두를 채택하는 방법을 이중 스택이라 한다. 그림 8-18에 이중 스택의 구조를 나타내었다.
이러한 이중 스택 시스템들은 IPv6 시스템들과 통신하기 위해서는 IPv6를 사용하고, 기존의 시스템들과 통신 하기 위해서는 IPv4를 사용할 수 있다.
이중 스택 시스템의 주소 설정
이중 스택 시스템은 IPv4/IPv6 두 가지 프로토콜을 모두 지원한다. 따라서 IPv4 주소나 IPv6 주소로 모두 설정이 가능하다. 예컨대 IPv4 주소의 경우는 DHCP 기술을 사용하여 얻을 수 있으며, IPv6 주소의 경우는 비상태형 주소 자동 설정(Stateless auto-configuration)을 사용하여 설정할 수 있다.
이중 스택 시스템의 DNS 이름 해석
IP 주소와 호스트 이름을 연결시켜주는 DNS는 IPv4와 IPv6에서 모두 사용된다. 따라서 이중 스택 시스템은 IPv6의 AAAA 리소스 레코드 유형과 IPv4의 A 레코드를 처리할 수 있어야 하는데, 이는 DNS 주소해석기 라이브러리(DNS Resolver Library)가 두 가지 유형을 모두 지원해주어야 한다.
즉 이중 스택 시스템의 DNS 주소해석기 라이브러리는 A와 AAAA 레코드를 모두 처리할 수 있어야만 한다.

터널링(Tunneling)

일반적으로 터널링이랑 어떤 프로토콜의 패킷을 다른 프로토콜의 패킷 안에 캡슐화하여 통신하는 것을 말한다. IPv4와 IPv6에서의 터널링은 IPv6 패킷을 IPv4의 패킷 안에 넣어서 IPv4 네트워크를 통하여 상대방의 IPv6 네트워크나 IPv6 장비로 패킷을 전송하는 것이다.
그림 8-19는 터널링 방식에 대한 구조를 나타내고 있다. 앞으로 IPv6 네트워크가 활성화되면 이와는 반대로 IPv4의 패킷을 IPv6의 패킷에 넣어서 전송하는 방식의 터널링도 사용이 될 것이다.
이러한 터널링은 크게 설정 터널링(Configured Tunneling) 방식과 자동 터널링(Automatic tunneling) 방식으로 구분하는데, 그림 8-20은 두 가지 터널링 방식의 차리를 표시하고 있다.
설정 터널링
이 방식은 출발지/목적지의 호스트가 IPv6 호환 주소를 인식하지 못할 때 사용된다. 패킷에 대한 캡슐화가 이루어지는 두 라우터 간(혹은 호스트)에 IPv4 주소를 기반으로 정적으로 터널을 설정하는 방식이다. 설정 터널링 방법은 6Bone에서 사용되고 있다.
자동 터널링
IPv4 시스템이 사용되는 영역을 거쳐 목적지에 도착해야 할 경우에 사용된다. 매뉴얼을 통한 설정 없이 IPv4 호환주소를 이용하는 방식이다. IPv4 네트워크를 통과할 때 패킷 주소부분에 나타나 있는 IPv6 호환 주소를 바탕으로 IPv4 주소를 자동적으로 생성하여 터널링 하는 방식이다.
최근에는 자동 터널링 방식을 개선한 6 to 4 터널링 방식이나 ISATAP(Intra-Site Automatic Tunnel Addressing Protocol) 방식이 사용되고 있다.

IPv4/IPv6 변환(Translation)

IPng 로의 변화 중에는 IPv6 전용으로만 동작하는 시스템들로 구성된 IPv6 전용 네트워크가 존재할 것이다. 또한 IPv6 네트워크 상의 시스템과 IPv4 네트워크 상의 시스템과 통신하는데 서로 다른 패킷의 형식을 변환할 수 있는 게이트웨이가 필요하게 된다.
그림 8-21은 게이트웨이를 사용하여 IPv6 호스트와 IPv4 호스트가 통신을 수행하는 구조를 나타내고 있다.
IPv4-IPv6 게이트웨이는 동작하는 계츠엥 따라 네트워크 레벨과 어플리케이션 레벨의 게이트웨이로 구분한다. 네트워크 계층에서 변환이 일어나는 경우 라우터와 같은 네트워킹 장비에서 변환 기능이 수행될 수 있지만, 시스템 구조에 의존하게 되기 때문에 다양한 종류의 변환 기능이 추가되어야 한다.
반면 어플리케이션 계층까지 변환기능이 제공되는 게이트웨이의 경우는 어플리케이션 레벨의 데이터까지 읽어 들여 변환이 이루어지므로 다양한 시스템에서 동작하는 것이 가능하게 된다.
하지만 IPv4와 IPv6의 변환을 위해서 상위 계층까지의 패킷 내용을 작성해야 하므로 네트워크 계층에서 동작하는 것에 비하여 처리 과정이나 시간에 더 많은 부하를 부여하게 된다.
NAT-PT(Network Address Translation-Protocol Translation)
NAT-PT는 인터넷 국제 표준화기구인 IETF 표준이며, IPv6/IPv4 변환 기능을 수행하여 IPv6 전용 노드와 IPv4 전용 노드 사이에서 상호 원활한 통신을 가능하게 한다. NAT-PT는 RFC 2766으로 제정된 상태이며, NAT-PT에 듸하여 순수 IPv6 네트워크 상의 호스트나 응용들은 IPv4 네트워크 상의 호스트나 응용들과 원할이 통신이 가능하다.
이 경우 호스트들은 각각 IPv6, IPv4 스택만을 갖추고 있으며, NAT-PT 시스템은 두 네트워크의 경계에 위치한다.
NAT-PT는 크게 두 가지 기능을 수행하는데 첫 번째는 세션이 초기화될 때마다 동적으로 IPv6 노드에 IPv4 주소를 할당하기 위한 주소 풀(Pool)을 가지고, 두 네트워크의 경계 라우터에 위치하여 주소변환을 수행하는 NAT 기능이다. 즉, IPv4와 IPv6 헤더내의 주소 영역을 변경해주는 기능이라 할 수 있다.
두 번째는 호스트에서의 프로토콜 변환 규칙을 정의한 RFC 2765 표준문서 SIIT(Stateless IP/ICMP Translation Algorithm)를 기반으로 헤더변환을 수행한다.
IPv4 및 ICMPv4 헤더는 IPv6와 유사하지만 몇 개의 필드가 없어지거나 다른 의미를 갖기 때문에 종단간 IPv4-IPv6 통신을 가능하게 하기 위해 모든 IPv4와 IPv6간 IP/ICMP 헤더를 상호 변환해야 한다.