The Internet Protocol (IPv4)

Contents

  • The Internet Protocol
  • Subnet Masks, Default Gateways, and Broadcast Addresses
  • Public IP
  • Private IP

The Internet Protocol

컴퓨터를 처음 만지기 시작한 나이부터 IP 주소의 존재는 알고 있었지만, 딱히 무슨 원리로 동작하는지에 대해선 관심이 없었다. 그저 인터넷만 잘 연결되면 살아가는데 있어 별 문제가 없었기 때문이다. 하지만 최근 이사를 오며 본격적으로 홈네트워크를 구축하기 위해서 공부를 하다보니 정말 네트워킹에 대한 지식이 전무하다는 것을 깨닫고 차근차근 공부를 시작했다. IP의 작동원리는 개인 GPU 서버의 운영과 (아직 계획은 없지만) 나스 설치 등 많은 네트워킹 시스템의 근간이 되기 때문에 알아두는것이 좋다고 판단했다.

Internet Protocol, 줄여서 IP 는 기계들의 통신을 담당하고, 다른 기계와 통신을 하고 싶은 기계는 IP주소가 필요하다. 많은 설명을 읽어봐도 제일 피부에 와닿는 설명은 전화번호다. 전화번호가 있어야만 다른 핸드폰으로 전화를 걸 수 있는 것 처럼, 컴퓨터는 IP주소가 있어야 인터넷에 접속할 수 있고 다른 컴퓨터와 통신을 할 수 있다. 윈도우머신의 터미널에 ipconfig 을 치면 간단하게 그 컴퓨터의 IP주소를 확인 할 수 있다.

IPv4 Address가 바로 컴퓨터의 IP주소다. IP주소를 처음 보면 그저 숫자의 나열로밖에 보이지 않지만, 자세히 살펴보면 1~3개의 수 뒤에 점(.)이 있고, 총 4개의 숫자와 3개의 점으로 구성되어 있다. (적어도 IPv4에선) 이 규칙은 변하지 않는다. 이 IP 주소로 컴퓨터는 인터넷에 접속할 수 있고, 다른 컴퓨터가 이 IP 주소를 통해 나와 통신을 할 수 있다.

IP주소의 모양이 4개의 숫자와 3개의 점의 규칙을 따르는 이유가 있다. 각 숫자는 0부터 255까지의 값을 가질 수 있는데, 이는 2의 8제곱에 해당되는 수다. 그리고 IP주소엔 총 4개의 숫자가 있으므로 IP주소가 가질 수 있는 값은 총 2의 32제곱 (약 43억)이 된다. 점(.) 으로 분리된 3자리 수는 octet 이라 한다.

Subnet Masks, Default Gateways, and Broadcast Addresses

위의 이미지를 보면, IP주소 밑에 Subnet Mask과 Default Gateway 라는 값들도 출력이 된다. Subnet Mask 는 쉽게 말하자면 IP주소의 유동성 을 관리해주는 값이다. 내 윈도우머신의 Subnet Mask 는 255.255.255.0 이란 값을 갖고, Subnet Mask 의 octet 중 255가 있으면 이는 내 IP주소의 해당 octet 이 변하지 않고 고정된다를 의미한다.

IP Octet Subnet Mask Octet Description
121 255 고정
138 255 고정
27 255 고정
66 0 유동적

즉, 내 윈도우머신의 IP주소의 앞 3개의 octet 은 변하지 않지만, 접속할때 마다 마지막 octet 은 변할 수 있다. 이 Subnet Mask 가 의미하는 것은 사실 해당 네트워크의 주소다. 네트워크는 간단하게 말해서 외부로 나가지 않고 내부에서 서로 통신할 수 있는 주소를 의미하는데, 만약 내 맥북이 121.138.27.xxx 라는 IP주소를 가지고 있다면 윈도우 컴퓨터와 내부망에서 통신을 할 수 있다.

Default Gateway 는 우리가 집에 하나씩 가지고 있는 공유기의 주소다. 공유기도 사실 기기이기 때문에 IP주소를 할당받는데, 보통 마지막 octet 의 값이 254다. 255.255.255.0의 Subnet Mask를 가지고 있는 하나의 네트워크를 예시로 들어보자. 앞 3개의 octet 은 고정이기 때문에 결국 해당 네트워크에 연결할 수 있는 호스트 (기기)의 수는 253개이다. 0부터 255까지 비어있으니 256개가 아닌 이유는, 할당 할 수 없는 3개의 default 주소가 있기 때문이다. 이 주소들은 앞서 살펴본 Default gateway, xxx.xxx.xxx.0 의 값을 갖는 network address, 그리고 xxx.xxx.xxx.255 의 값을 갖는 broadcast address 이다. 이번 장에선 설명하지 않겠지만, 간단히 생각해서 첫 호스트 주소, 마지막 호스트 주소, 그리고 공유기의 주소 빼고 하나의 네트워크에 253개의 호스트가 연결 할 수 있다.

Public IP

IP주소의 표기방식을 보면 2의 32제곱의 경우의 수를 갖기 때문에 약 43억개의 고유 IP주소가 생성된다. 그리고 이 IP주소는 처음 설계되었을때 5개의 클라스로 분류되었다.

Class Range Subnet Mask
A 1.0.0.0 ~ 126.255.255.255 255.0.0.0
B 128.0.0.0 ~ 191.255.0.0 255.255.0.0
C 192.0.0.0 ~ 223.255.255.0 255.255.255.0
D 224.0.0.0 ~ 239.255.255.255  
E 240.0.0.0 ~ 255.255.255.255  

Class A, B, C 는 각자 다른 Subnet Mask 를 갖는다. 이 Subnet Mask 를 보면 해당 Class 의 IP주소의 capacity 를 어림짐작 할 수 있다. Class A 는 첫번째 octet 만 고정이기 때문에 126개의 네트워크밖에 없지만, 각 네트워크엔 2의 24제곱 (약 1천 6백만)개 의 호스트가 연결 할 수 있다. 반면에 Class C 는 약 1천 6백만개의 네트워크가 있으며, 각 네트워크엔 256개의 호스트만 연결 할 수 있다. Class 위로 올라갈 수록 네트워크의 수는 많아지며, 각 네트워크에 연결할 수 있는 호스트는 적어진다를 의미한다.

이렇게 Class 로 IP 를 할당하는 방식의 문제는 무엇일까? IANA (Internet Assigned Numbers Authority) 가 처음 IP주소를 관리하기 시작했을 때 Class A 네트워크를 대기업에게 무분별하게 나눠줬다. 예시로 9.0.0.0는 IBM이 독점적으로 소유하고 있으며, 이론상 IBM에게 할당된 IP주소의 수는 1천6백억개다. 처음 IP주소를 나누기 시작했을 때 절대 부족하지 않을거라 생각을 했지만, 이미 2015년엔 IP 주소가 고갈되었다. 심지어 Class D, E 는 각자 특수한 케이스로 사용되기 때문에 일반 사용자는 접근조차 못한다. 이런 상황을 타계하기 위해 등장한 것이 바로 Private IP와 Subnetting 이다.

Private IP

위 사진은 나의 실제 IP주소이다. 하지만 공개해도 위험하지 않는 이유는 바로 사설 IP 주소이기 때문이다. 앞서 말한 것 처럼 공인 IP가 고갈되었기 때문에, 고갈되기 전 IANA가 몇개의 주소를 사설 IP 로 사용하도록 떼어냈다.

Class Range Subnet Mask
A 10.0.0.0 ~ 10.255.255.255 255.0.0.0
B 172.16.0.0 ~ 172.31.255.255 255.255.0.0
C 192.168.0.0 ~ 192.168.255.255 255.255.255.0

위 표는 사설 IP 주소들이다. 사설 IP 는 공인 IP 와 다르게 중복해서 사용할 수 있지만, 직접 인터넷과 연결 할 수 없다. 공유기가 NAT (Network Address Translation) 이란 작업을 수행해야만 사설 IP 를 가진 호스트들이 인터넷과 통신을 할 수 있다.

기본적으로 ISP (Internet Service Provider, KT 같은 통신사) 가 공유기로 공인 IP를 할당한다. 그리고 공유기의 네트워크에 연결되어 있는 호스트들에게 사설 IP를 부여한다. 공유기의 네트워크에 연결되어 있기 때문에 IP주소 앞 3개의 octet 이 같다. 만약 윈도우머신이 인터넷으로 접속하고 싶다면, 공유기는 윈도우의 사설 IP 를 NAT 라는 작업을 통해 ISP 가 제공해준 공인 IP 로 바꿔준다 (request). 인터넷에서 response 를 받는다면 공유기가 이걸 호스트에게 전달해주는 방식이다.

사설 IP의 등장으로 주소고갈 문제는 어느정도 해결을 할 수 있었지만, 근본적인 해결책은 아니기에 subnetting 과 IPv6 의 도입을 반길 수밖에 없다.