IP 주소

CIDR 원리

인터넷 프로토콜 주소(Internet Protocol Address)은 인터넷 프로토콜에서 사용되는 논리적 주소를 말한다.

1 개요[편집]

일반적으로 IP라고 하면 IP 주소를 말하는 경우가 대부분이다. IP 주소는 IP에서 목적지까지 패킷을 전달하기 위해 사용하는 주소 집합이다.

IP 주소만을 가지고 호스트의 위치를 특정할 수 있느냐 없느냐하는 경우가 많은데(이른바 IP 추적), IP 서브네팅 구성상 물리적으로 국사 단위가 하나의 서브넷을 구성하는 경우가 많아서 WHOIS로 어느 정도 특정은 할 수 있다. 다만, 완벽한 것은 아니고 이러한 점을 ISP도 잘 알고 있기 때문에 일정 주기를 채우면 할당된 서브넷을 바꿔버리는 경우도 많다.

일반적으로 사용되는 단어에는 유동 IP과 고정 IP도 있다. 유동은 변하는 IP란 뜻인데, 사실 이는 IP를 받아오는 DHCP에 의해 주소가 바뀔 수 있기 때문에 일어나는 현상이다. 아니면 위에 말했듯이 ISP가 주기적으로 해당 네트워크 주소를 바꿈으로써 발생하는 현상일 수도 있다.

다만 이들 명칭은 정식 명칭은 아니며, 밑에서 그 원리를 찾아보길 바란다.

2 버전 4[편집]

버전 4의 주소 체계는 4바이트(32비트) 정수형을 사용한다. 이 주소 공간에는 이론적으로 4,294,967,296개(42억 개)의 주소를 할당할 수 있다. 이 주소 공간은 버전 4가 제정될 당시의 컴퓨터가 충분히 처리를 가능할 수 있던 공간이면서도, 당시에 생각했던 네트워크 구성을 어느 정도 달성할 수 있다고 여겨졌기 때문에 이 정도로도 충분하다고 인식했던 것이다. 현재의 버전 4 주소 체계는 주소 공간 등의 부족으로 인해 많이 뒤틀려 있다.

주소의 표현 방식은 각각 1바이트씩 끊어서, 각 바이트는 10진수로, 각 바이트 사이에 온점 "."을 넣는 것이 일반적이다. v4의 IP 주소 체계는 크게 두 부분으로 나뉜다.

  • 네트워크 주소: 네트워크 식별자로, "네트워크 ID"라고 하기도 한다. 앞의 몇 자리(가변)이 네트워크 주소이다.
  • 호스트 주소: 네트워크 주소를 제외한 나머지 부분. 해당 네트워크 주소(네트워크) 안에서 장비를 구분하기 위한 주소이다.

각 주소 체계에서 네트워크 주소 부분만 남기고, 나머지 호스트 주소의 비트를 전부 0으로 채우는 경우를 네트워크 주소라 부르고, 반대로 호스트 주소의 비트를 전부 1로 채우는 경우를 브로드캐스트 주소라 부른다. 브로드캐스트 주소는 네트워크에 연결된 모든 호스트들에 자료를 전송하기 위한 주소이며, 주로 호출 용도로 사용한다. 이들 주소는 호스트에 할당할 수 없는 주소다.

2.1 Classful Addressing[편집]

초창기의 구성에 사용된, 가장 먼저 출발한 것이 Classful Addressing이다. 이 방식은 IP 주소 체계의 앞 부분 몇 비트만을 보고, 해당 네트워크의 규모를 자동으로 설정하는 방식이었다. 목적지 주소가 내부 네트워크 주소 대역을 벗어나는 경우 호스트는 자동으로 라우터로 패킷을 보낸다.

클래스 IP 주소
접두 비트
속하는 IP 주소 범위 서브넷 마스크[1] 네트워크 주소 크기 호스트 주소 크기
클래스 A 0___ ____ ... 0.0.0.0 ~ 127.255.255.255 255.0.0.0 8 비트
(256개 네트워크)
24 비트
(16,777,216개 호스트)
클래스 B 10__ ____ ... 128.0.0.0 ~ 191.255.255.255 255.255.0.0 16 비트
(65,536개 네트워크)
16 비트
(65,536개 호스트)
클래스 C 110_ ____ ... 192.0.0.0 ~ 223.255.255.255 255.255.255.0 24 비트
(16,777,216개 네트워크)
8 비트
(256개 호스트)
클래스 D 1110 ____ ... 224.0.0.0 ~ 239.255.255.255 지정되지 않음 멀티캐스트용 주소
클래스 E 1111 ____ ... 240.0.0.0 ~ 255.255.255.255 지정되지 않음 예약됨, 장래 사용 용도

하지만 보다시피, 클래스 A의 경우에는 네트워크 수가 고작 256개 밖에 되지 않지만 그 안에 1600만개가 넘는 호스트를 단일 네트워크로 구성해야 하는 일이 벌어진다. 특히 인터넷 초창기에 MIT, IBM 등이 이 주소를 가져갔는데 상식적으로 그 안에서 이 만큼의 호스트를 물리적으로 단일 네트워크로 구성하는 것은 말이 안 되기 대문에 비효율적이라는 논란이 일었다. 클래스 B의 경우에도 65,536개면 그다지 크지는 않아 보이지만, 이 역시 물리적으로 6만개가 넘는 호스트를 하나로 묶어야 하기 때문에 상당한 부담이 발생한다.

물리적으로 그 만큼의 호스트를 하나의 네트워크로 묶을 수 있다고 해도, 그 안에서 발생하는 브로드캐스트의 홍수로 인해 네트워크가 항상 과부하 상태일 것이다. 다른 방향으로는 블럭 크기가 3단계로만 구분되다 보니 적당한 크기의 블럭을 지정하기 힘들다는 문제가 있었다. 효율적인 네트워크를 구축하기 위해서는 다운사이징이 필수불가결했고, 그래서 나온 개념이 바로 밑에서 서술하는 CIDR이다.

2.2 CIDR[편집]

  • Classless Inter-Domain Routing

기존의 Classful 주소 체계가 IP 주소 앞 자리만 보고 IP 주소의 네트워크 주소 범위와 호스트 주소 범위를 별도로 설정했던 것과는 달리, 가변 길이 서브넷 마스크(VLSM) 개념을 도입해 네트워크 주소를 구분한다. 임의의 주소에 서브넷 마스크를 비트로 AND 연산하면 나오는 결과를 네트워크 주소로 인식해, 서브넷 마스크에 0으로 채워진 부분을 호스트 주소로 사용하겠다고 하는 것이다.

예를 들어 우리가 일반적으로 아는 사설 주소 중 하나인 192.168.17.235을 예로 들어보자. 이 주소는 클래스 C 대역이므로 서브넷 마스크 255.255.255.0이 자동으로 설정된다.

종류 10진수 표현 바이너리 표현
원본 주소 192.168.17.235
11000000.10101000.00010001.11101011
  AND (&)
서브넷 마스크 255.255.255.0
11111111.11111111.11111111.00000000
  =
네트워크 주소 192.168.17.0
11000000.10101000.00010001.00000000
호스트 주소 0.0.0.235
00000000.00000000.00000000.11101011

이를 통해 네트워크 규모를 마음대로 정할 수 있게 되었다. 네트워크를 쪼개는 것은 서브네팅, 네트워크를 합치는 것은 슈퍼네팅이다. B클래스 대역의 주소 6만 5천개를 쪼개어 3만 여개의 주소 대역으로 만드는 것을 서브네팅, 이웃한 대역과 합쳐 12만 여개의 주소 대역으로 만드는 것을 슈퍼네팅이라고 할 수 있다. 대개는 서브네팅 개념만 활용되고, 슈퍼네팅은 물리적인 네트워크를 구현하기 보다는 라우팅 프로토콜에서 편의상 사용된다.

서브넷 마스크는 IP와 같은 길이로 비트로 쪼개면 32개이며, 여기서 1의 갯수를 세서 "서브넷 프리픽스"라는 이름으로 표현하기도 한다. "192.168.25.228/16"이라는 표현은 해당 호스트의 IP 주소를 뜻하면서, 해당 호스트가 192.168.0.0 네트워크 ID와 255.255.0.0 서브넷 마스크를 가지는 네트워크에 속함을 동시에 표현한 것이다. 서브넷 마스크는 앞부터 1을 채워가므로 규칙적으로 표현된다.

프리픽스 서브넷 마스크 바이너리 표현 호스트 개수 비고
/0 0.0.0.0 00000000.00000000.00000000.00000000 4,294,967,296개 기본 라우팅
/1 128.0.0.0 10000000.00000000.00000000.00000000 2,147,483,648개
/2 192.0.0.0 11000000.00000000.00000000.00000000 1,073,741,824개
/3 224.0.0.0 11100000.00000000.00000000.00000000 536,870,912개
/4 240.0.0.0 11110000.00000000.00000000.00000000 268,435,456개
/5 248.0.0.0 11111000.00000000.00000000.00000000 134,217,728개
/6 252.0.0.0 11111100.00000000.00000000.00000000 67,108,864개
/7 254.0.0.0 11111110.00000000.00000000.00000000 33,554,432개
/8 255.0.0.0 11111111.00000000.00000000.00000000 16,777,216개 A클래스
/9 255.128.0.0 11111111.10000000.00000000.00000000 8,388,608개
/10 255.192.0.0 11111111.11000000.00000000.00000000 4,194,304개
/11 255.224.0.0 11111111.11100000.00000000.00000000 2,097,152개
/12 255.240.0.0 11111111.11110000.00000000.00000000 1,048,576개
/13 255.248.0.0 11111111.11111000.00000000.00000000 524,288개
/14 255.252.0.0 11111111.11111100.00000000.00000000 262,144개
/15 255.254.0.0 11111111.11111110.00000000.00000000 131,072개
/16 255.255.0.0 11111111.11111111.00000000.00000000 65,536개 B클래스
/17 255.255.128.0 11111111.11111111.10000000.00000000 32,768개
/18 255.255.192.0 11111111.11111111.11000000.00000000 16,384개
/19 255.255.224.0 11111111.11111111.11100000.00000000 8192개
/20 255.255.240.0 11111111.11111111.11110000.00000000 4096개
/21 255.255.248.0 11111111.11111111.11111000.00000000 2048개
/22 255.255.252.0 11111111.11111111.11111100.00000000 1024개
/23 255.255.254.0 11111111.11111111.11111110.00000000 512개
/24 255.255.255.0 11111111.11111111.11111111.00000000 256개 C클래스
/25 255.255.255.128 11111111.11111111.11111111.10000000 128개
/26 255.255.255.192 11111111.11111111.11111111.11000000 64개
/27 255.255.255.224 11111111.11111111.11111111.11100000 32개
/28 255.255.255.240 11111111.11111111.11111111.11110000 16개
/29 255.255.255.248 11111111.11111111.11111111.11111000 8개
/30 255.255.255.252 11111111.11111111.11111111.11111100 4개
/31 255.255.255.254 11111111.11111111.11111111.11111110 2개 사용 불가
/32 255.255.255.255 11111111.11111111.11111111.11111111 1개 사용 불가

서브넷 마스크의 숫자가 커질수록 할당 가능한 호스트 개수는 감소한다. 위에서 언급했듯이 네트워크 ID와 브로드캐스트 주소는 실제 호스트에 할당할 수 없다고 했다. 이 2개 주소는 자연스럽게 네트워크 첫 주소와 마지막 주소를 가져간다. 그래서 통신에 필요한 최소 호스트 갯수인 2개 호스트에 IP주소를 주려면 최소 4개의 IP주소가 필요하다. 그러므로 4개 미만의 주소가 할당되는 /31과 /32는 이론상으로만 존재하고 실제로는 사용할 수 없다.

오래된 라우터를 굴리는 곳에서는 기존 Classful Addressing 기반과 충돌하지 않도록 각 클래스의 네트워크 ID, 브로드캐스트 주소를 담고 있는 서브넷(All-zero 서브넷, All-one 서브넷)을 사용하지 않는 것이 좋다.

2.3 예약된 주소[편집]

예약된 주소는 통신망 운용의 효율성, 연구·개발, 자가진단 등의 목적으로 미리 제껴둔 주소들을 말한다. 이 주소들은 호스트에 할당될 수 없으며 입력하려고 하면 오류를 뱉는다.

대역 시작 주소 끝 주소 목적
0.0.0.0/8 0.0.0.0 0.255.255.255.255 미상의 주소(아직 IP가 할당되지 않은 상태)
10.0.0.0/8 10.0.0.0 10.255.255.255 사설 주소(클래스A 대역)
127.0.0.0/8 127.0.0.0 127.255.255.255 루프백 주소(자가진단용)
169.254.0.0/16 169.254.0.0 169.254.255.255 사설 주소(APIPA)
172.16.0.0/12 172.16.0.0 172.31.255.255 사설 주소(클래스B 대역)
192.168.0.0/16 192.168.0.0 192.168.255.255 사설 주소(클래스C 대역)
224.0.0.0/4 224.0.0.0 239.255.255.255 멀티캐스트(클래스D)
240.0.0.0/4 240.0.0.0 255.255.255.255 예약 주소(클래스E)
CIDR 내 첫 주소 네트워크 ID
CIDR 내 마지막 주소 IP 브로드캐스팅 주소
255.255.255.255 로컬 브로드캐스팅 주소

3 버전 6[편집]

IPv6에서는 128비트 길이의 주소를 사용한다. 128비트로 표현할 수 있는 주소의 개수는 340,282,366,920,938,463,463,374,607,431,768,211,456개(3.4×1038, 340간 개)로 거의 무한하다고 여겨진다.

IPv4처럼 8바이트씩 끊어 표현하면 10진수를 16개 필드나 써야 하므로 다루기 쉽게 16진수로 2바이트씩 8개 필드로 쪼개어 취급한다. IPv4에서는 "0"을 생략할 수 없으나, IPv6에서는 의미없는 0의 생략이 가능하다.

IPv4와 비슷하게 2개 부분으로 구분하여 사용하나, 명칭이 약간 틀리다.

  • 서브넷 프리픽스: IPv4에서 "네트워크 주소"로 지칭되었던 부분이다. 앞쪽의 64비트 부분을 사용한다.
  • 인터페이스 ID: IPv4에서 "호스트 주소"로 지칭되었던 부분이다. 뒤쪽의 64비트 부분을 사용한다.

초기 v4의 Classful Addressing처럼 주소를 2개 부분으로 칼같이 쪼개서 사용하고 있지만, 각 부분마다 18,446,744,073,709,551,616개(1.8해 개)의 표현이 가능하므로 이미 v4의 전체 주소 개수를 아득히 뛰어넘는다.

3.1 주소 구분[편집]

  • 전역 유니캐스트 주소
    첫 비트가 "001…:"(2___:)로 시작하는 주소로, 공인IP에 대응하는 대역이다. 애니캐스트를 통해 2개 이상의 호스트에 가상으로 할당해줄 수 있다.
  • 지역 유니캐스트 주소
    첫 비트가 "1111 1101 …:"(FC__:)로 시작하는 주소로, 사설IP에 대응하는 대역이다. NAT 밑에서 사용되며, 혹시나 상위 네트워크로 흘러나가 충돌을 발생할 것을 우려해 9비트 부터 40개 비트는 임의로 랜덤하게 채워 최대한 유일성을 부여한다.
  • 멀티캐스트 주소
    첫 비트가 "1111 1111 …:"(FF__:)로 시작하는 주소로, 다수 컴퓨터의 동시 통신을 위해 사용하는 대역이다. v4와 달리 브로드캐스트/멀티캐스트의 구분이 없으며, 브로드캐스트는 "임시 멀티캐스트"(FF3_:)에 대응된다.

3.2 예약된 주소[편집]

  • IP미상
    IP미상인 상태에서 임의로 사용할 수 있는 주소는 모두 0으로 채운 주소(::/128)이다. IPv4는 할당되었으나 v6가 미할당된 경우 앞의 96비트를 모두 0으로 채우고 뒤쪽의 32비트만 사용한다.(::____:____/96)
  • 루프백
    첫 8비트가 모두 0이고, 마지막 비트가 01로 끝나면 무조건 루프백 주소로 사용된다.(::1/128)
  • 링크로컬(APIPA)
    첫 10비트가 "1111 1110 10"(FE8_:)으로 시작하면 링크로컬 주소에 해당한다.

4 각주

  1. 사실 서브넷 마스크는 Classful 주소 체계의 공간에 한계가 있어, 서브네팅이란 개념이 고안되면서 생겨난 것이다. 참고용으로만 기입해둔다.