2-1. 리소스 위치와 트래픽 라우팅: IPv6

독수리박박·2024년 3월 16일
0

이 글은 go언어를 활용한 네트워크 프로그래밍을 기반으로 작성되었습니다


IPv6

앞서 설명한 IPv4의 주소 부족 문제를 해결하기 위한 또하나의 방법으로 IPv6(IP의 차세대 버전)을 사용하는 것이 있다. IPv6의 주소는 콜론으로 구분된 8개의 16비트(핵스텟) 그룹으로 배열된 128비트 숫자이다. 따라서 IPv6의 주소 개수는 2**128로 굉장히 많다.

IPv6 주소 쓰기

IPv6 주소는 이진으로 표현하기에는 터무니없이 길기 때문에 가독성과 축약성 부분을 고려해 IPv6 주소는 소문자의 16진수 값으로 사용한다.(대소문자를 구분하지는 않지만 소문자 값으로 쓰기를 권장하고 있다.)

IPv6 주소에서 16진수(헥스) 값은 4비트, 혹은 니블(nibble)로 표현한다.
예를 들어, 두 개의 니블값 1111 1111을 16진수 표현인 ff로 표현한다. 아래 그림에서 잘 확인할 수 있다.

그림처럼 16진수로 간략화하면 상당히 간단해지지만 더욱 간결하게 표현할 수 있는 방법이 존재한다.


IPv6 주소 간략화하기

예를 들어 fd00:4700:0010:0000:0000:0000:6814:d103라는 주소가 존재한다고 하자.
사실 이렇게 간략화한 주소도 상당히 길기 때문에 사용하기에 불편함이 존재한다. 따라서 아래의 규칙들을 적용해 보면서 더욱 간단하게 만들 수 있다.

  1. 각각의 헷스텟에서 연속적인 0을 모두 제거한다. 주소 값을 변경하지 않고도 더욱 간단히 할 수 있다. 위의 주소를 해당 규칙으로 간단하게 만든다면 fd00:4700:10:0:0:0:6814:d103이다. 하지만 여전히 길다.

  2. 좌측으로부터 0의 값을 갖는 연속적인 헥스텟 그룹들을 지우고 이중 콜론으로 대체한다.
    fd00:4700:10::6814:d103 이 된다.

  3. IPv6 주소 내에 0의 값을 갖는 연속적인 헥스텟 그룹들이 하나보다 더 많이 존재한다면, 제일 좌측에 위치한 연속적인 헥스텟 그룹만 지울 수 있다. 그러지 않는다면 라우터가 어느 곳에 0을 넣어야할지, 압축된 형태의 주소로부터 원래 주소를 복구하는 것이 불가능해지게 된다.


IPv6 네트워크와 호스트 주소

IPv4 주소처럼 IPv6도 마찬가지로 네트워크 주소와 호스트 주소를 가지고 있다. IPv6의 호스트 주소는 일반적으로 인터페이스 ID라고 한다. 네트워크 주소와 호스트 아이디는 모두 64비트이다. 네트워크 주소의 첫 48비트를 글로벌 라우팅 접두사(GRP)라고 하며 마지막 16비트는 서브넷 ID라고 한다. 48비트의 GRP는 주소 공간을 전역적으로 세분화하고 세분화된 그룹 간에 트래픽을 라우팅하는데 사용된다. 서브넷 ID는 GRP가 고유하게 식별하는 네트워크를 특정 지역에 해당하는 네트워크로 세분화하는 데 사용된다.

GRP의 첫 번째 헥스텟은 대륙별 인터넷 레지스티리에 할당한다. 대륙별 인터넷 레지스트리는 GRP의 두 번째 헥스텟을 ISP에 할당한다. ISP가 IPv6 주소의 48비트 서브넷을 사용자에게 할당하기 전에 마지막으로 GRP의 세 번째 헥스텟을 할당한다.

주소의 첫번째 헥스텟을 보면 어디에 사용하는지 알 수 있다. 2000::/3 접두사로 시작한다면 전역적으로 사용된다는 의미이며 fc00::/7 접두사로 시작한다면 주소는 IPv4 주소의 127.0.0.0/8 서브넷과 같이 고유한 로컬 주소에 사용된다.

만약 ISP에서 2600:fe56:7891::/48이라는 넷블록을 할당했다고 한다면 16비트의 서브넷 ID를 사용해서 할당받은 넷블록을 최대 216개까지의 서브넷으로 분할 할 수 있다. 각각의 서브넷을은 264개의 호스트를 가질 수 있다. 만약 넷블록에서 서브넷을 계속 할당한다면 2600:fe56:7891:1::/64, 2600:fe56:7891:2::/64, 2600:fe56:7891:3::/64와 같이 서브넷들이 계속 할당될 것이다.


IPv6 주소 범주

IPv6 주소는 애니캐스트, 멀티캐스트와 유니캐스트의 세 가지 범주로 나뉜다. IPv4에서 존재했던 브로드캐스트는 없다. 애니캐스트와 멀티캐스트를 사용하여 브로드캐스트 역할을 대체한다.

유니캐스트 주소

유니캐스트는 노드를 고유하게 식별한다. 출발지 노드에서 유니캐스트 주소로 메시지를 보낸다면 오직 고류한 하나의 노드만 메시지를 수신한다.

멀티캐스트 주소

멀티캐스트는 주소는 노드의 그룹을 나타낸다. IPv4의 브로드캐스트 주소는 메시지를 네트워크상의 모든 주소로 전파하는 반면 멀티캐스는 지정된 그룹에만 메시지를 전파하게 된다.

멀태캐스트 주소는 접두사로 ff00::/8을 사용한다.

애니캐스트 주소

IPv6에서는 여러 노드에서 같은 네트워크 주소를 사용하는 기능을 제공한다. 애니캐스트는 같은 주소로부터 통신을 대기 중인 노드의 그룹을 나타낸다. 애니캐스트 주소로 전송된 메시지는 통신을 대기 중인 가장 가까운 노드로 전송된다.

그림에서 같은 주소에서 통신을 대기 중인 노드를 나타내고 있고, 송신자로 부터 가장 가까운 노드가 메시지를 수신한다. 송신자는 점선으로 표시된 노드 아무에게나 전송할 수 있지만 가장 가까운 노드에게 전송한다.

여기서 가장 가까운 노드는 반드시 물리적으로 가장 가까운 노드를 의미하는 것이 아니며 레이턴시가 가장 짧은 노드가 메시지를 수신하게 된다. 이치럼 애니캐스트는 레이턴시를 줄이는 것 이외에도 가용성을 향상시키며, 지오로케이션 서비스에도 사용할 수 있다.

예를 들어 넷플릭스는 전세계 곳곳에 서버를 두고 가장 사용자가 가장 가까운 서버로부터 데이터를 받을 수 있도록 하고 있다.


IPv4 대비 IPv6의 장점

굉장히 큰 주소 공간 이외에도 많은 장점들이 존재한다.

  • 효율적인 라우팅을 위한 단순한 헤더 포맷
    - 어떤 필드가 사용되지 않는다면 그 필드는 포함하지 않아도 된다.
  • 무상태 주소 자동구성
    - IPv4는 관리자가 수동으로 네트워크 상의 각 노드에 할당하거나 동적으로 주소를 할당해주는 서비스에 의존하지만 IPv6를 사용하는 노드는 무상태 주소 자동구성을 통해 별도의 관리 포인트 없이 자동으로 IPv6 주소를 얻어 오거나 할당할 수 있다.
  • IPsec 네이티브 지원
    - IPv6는 여러 노드가 서로 동적으로 보안 연결을 만들어 트래픽이 암호화되도록 하는 기술은 IPsec을 기본적으로 지원한다.

0개의 댓글