IP 주소

Unter (토론 | 기여)님의 2015년 9월 11일 (금) 01:02 판

Internet Protocol

인터넷에 사용되는 통신 규약이다. 현재 버전 4와 버전 6이 사용되고 있다.

대중적으로 사용되는 명칭

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

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

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

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

원리와 목적

IP는 패킷 스위칭 기법, 즉 선로를 예약하는 방식이 아니라, 신호를 툭 던지며 여러 신호를 한 선로에 다닐 수 있게 한 방식에서 출발했다. 때문에 한 사용자가 다른 사용자에게 전화를 걸면 그 선로는 그 두 사람간의 통신에 전부 사용되는(dedicate) 방식이 아니고, 선로를 여러 사람이 동시에 사용할 수 있도록 한 방식이다.

IP 자체의 목적은 출발지에서 도착지를 찾아가기 위한 것이다. 그래서 도착지를 찾기 위한 단서로 도착지 주소를 가지고 있으며, 그걸 IP 주소라고 부르는 것이다.

버전 4

버전 4는 1981년 9월에 RFC 791을 통해 발표된, 상당히 역사 깊고, 현재 이 페이지를 보고 있는 대부분의 사용자 컴퓨터가 사용 중인 프로토콜이다. 버전 4의 주소 체계는 4바이트(32비트) 정수형을 사용한다. 이 주소 공간에는 이론적으로는 42억개의 주소를 할당할 수 있다. 이 주소 공간은 버전 4가 제정될 당시의 컴퓨터가 충분히 처리를 가능할 수 있던 공간이면서도, 당시에 생각했던 네트워크 구성을 어느 정도 달성할 수 있다고 여겨졌기 때문에 이 정도로도 충분하다고 인식했던 것이다.

주소의 표현 방식은 각각 1바이트씩 끊어서, 각 바이트는 10진수로, 각 바이트 사이에 온점 "."을 넣는 것이 일반적이다. 다음은 IP 주소의 예시이다.

  • 10.27.18.193
  • 127.0.155.7
  • 169.254.0.1
  • 192.168.133.1

주소 체계

현재의 버전 4 주소 체계는 주소 공간 등의 부족으로 인해 많이 뒤틀려 있다.

IP 주소 체계는 크게 두 부분으로 나뉜다.

  • 네트워크 주소: 같은 네트워크에 붙여지는 주소. 다른 네트워크인지 구분하기 위해서 붙여져 있다. 앞의 몇 자리(가변)이 네트워크 주소이다.
  • 호스트 주소: 네트워크 주소를 제외한 나머지 부분. 해당 네트워크 주소(네트워크) 안에서 구분하기 위한 주소이다.

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

Classful Addressing

초창기의 구성에 사용된, 가장 먼저 출발한 것이 Classful Addressing이다. 이 방식은 IP 주소 체계의 앞 부분 몇 비트만을 보고, 해당 네트워크의 규모를 자동으로 설정하는 방식이었다.

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

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

서브네팅

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

예를 들어 우리가 일반적으로 아는 사설 주소 중 하나인 192.168.17.235을 예로 들어보자.

종류 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

이를 통해 큰 범위의 네트워크를 쪼갤 수 있게 되었다.

버전 6

  1. 사실 서브넷 마스크는 Classful 주소 체계의 공간에 한계가 있어, 서브네팅이란 개념이 고안되면서 생겨난 것이다. 참고용으로만 기입해둔다.
  2. 실제로는 몇몇 예약된 주소들 때문에 전부 사용 가능하지는 않다.
  3. 실질적으로는 네트워크 주소와 브로드캐스트 주소를 제외하기 때문에 2개를 빼야한다