CIDR 표기법을 사용하여 IP 주소의 범위를 지정하는 CIDR 블록을 VPC에 할당하고 VPC가 할당받은 IP 주소의 범위를 더 작은 범위로 쪼개어 Subnet이라는 작은 네트워크를 만들고 주소를 할당하는 원리다.
IP와 IP 주소란?
IP(Internet Protocol)이란 네트워크 환경에서 데이터를 전송하기 위한 Network Layer에 속하는 프로토콜이다. 이때, 데이터를 전송하기 위해서는 목적지와 출발지 주소가 필요한데 이때, 사용되는 개념이 IP 주소이다. 우리가 흔히 우편물을 보낼 때, 어디서 보내는지(출발지 주소)와 어디로 보내는지(목적지 주소)를 작성하는 것과 동일한 원리라고 생각하면 된다. IP 주소는 네트워크 환경에서 Host(컴퓨터, 서버)와 Router 등 네트워크를 구성하는 장비를 식별하는 주소이다. IP 주소는 네트워크를 식별하는 부분과 호스트를 식별하는 부분으로 구성되어있다. 아래 그림에서 각각의 파란 영역이 하나의 네트워크이고 각각의 네트워크가 Router라는 장치를 통해 연결된 것을 확인할 수 있다. 이때, 좌측 네트워크에서 각각의 장비에 부여된 IP 주소를 보면 223.1.1.x 형태로 주소가 부여된 것을 확인할 수 있다. 이때 223.1.1까지가 네트워크를 식별하는 네트워크 영역이고 x에 해당하는 영역이 해당 네트워크에서 장치(Host)를 식별하는 영역이다.
실생활의 예를 들어보자. 네트워크에서 장비를 건물의 방(호)라고 가정하면,
서울특별시 동대문구 서울시립대로 163 정보기술관 301호
위와 같은 주소가 있을 때 "서울특별시 동대문구 서울시립대로 163 정보기술관"까지의 범위가 네트워크를 식별하는 부분이고 301호가 호스트를 식별하는 부분이다. 정보기술관이라는 건물이 위 그림에서 하나의 파란색 영역에 해당하고 정보기술관이라는 건물(네트워크)에 여러 개의 방 즉, 호스트가 존재하기 때문이다.
IP 주소 표기법에는 IPv4와 IPv6가 있는데 IPv6 같은 경우, 인터넷이 발달함에 따라 필요한 주소의 개수의 요구가 증가하였고 기존에 사용하였던 IPv4 주소 표기법으로 표현할 수 있는 주소의 한계를 극복하고자 도입한 IP 주소 표기법이다.
IP주소는 32비트로 구성되어 있다. 8비트씩 묶어 0~255까지의 수로 표현하고 각각의 수를 옥텟이라고 부르고 이를 구분하는 . 이 존재한다.
IP 주소 클래스
하나의 IP 주소를 나누는 방법에 따라 여러 클래스가 존재한다. A,B,C,D,E 클래스가 존재하는데 A,B,C 클래스는 각각 대규모, 중규모, 소규모 네트워크에 사용된다. 그리고 D,E 클래스 같은 경우 멀티케스팅과 연구용으로 사용되고 잘 사용되지 않는다.
A 클래스
A 클래스는 하나의 네트워크에 가장 많은 호스트를 할당할 수 있어 대규모 네트워크 환경에서 사용되는 클래스이다. 첫 번째 옥텟을 10진수 기준으로 표현하였을 때 0~127이면 A 클래스에 속한다. IP 주소를 이진수로 나타낼 때 첫 옥텟의 최상위 비트가 0이면 A 클래스이다.
0xxx xxxx . xxxx xxxx . xxxx xxxx . xxxx xxxx
이때, x의 값은 0 또는 1이다.
가능한 IP 주소의 범위를 이진수로 나타내면,
0000 0000. 0000 0000. 0000 0000. 0000 0000 ~ 0111 1111. 1111 1111. 1111 1111. 1111 1111
가능한 IP 주소의 범위를 십진수로 나타내면,
0.0.0.0~127.255.255.255
첫 옥텟이 네트워크 식별 영역을 나타내고 나머지 영역(24비트)은 호스트를 식별하는 영역이다. 따라서 A 클래스에서 하나의 네트워크에서 가질 수 있는 호스트 IP 주소의 가짓수는 (2^24)-2이다. 이때 -2를 하는 이유는 아래와 같다.
- 시작 주소는 항상 네트워크 주소로 사용됨으로 호스트 IP 주소로 사용이 불가능하다. 예를 들어 13.0.0.0은 네트워크 주소를 의미한다.
- 마지막 주소는 항상 브로케스트(Broadcast) 주소로 사용된다. 예를 들어 13.255.255.255는 브로케스트 주소를 의미한다.
B 클래스
B 클래스는 첫 옥텟을 10진수 기준으로 표현하였을 때 128~191이면 B 클래스에 속한다. IP 주소를 이진수로 나타낼 때 첫 옥텟의 상위 비트가 10으로 시작하면 B 클래스이다.
10xx xxxx. xxxx xxxx. xxxx xxxx. xxxx xxxx
가능한 IP 주소의 범위를 이진수로 나타내면,
1000 0000. 0000 0000. 0000 0000. 0000 0000 ~ 1011 1111. 1111 1111. 1111 1111. 1111 1111
가능한 IP 주소의 범위를 십진수로 나타내면,
128.0.0.0 ~ 191.255.255.255
B 클래스는 첫 번째와 두 번째 옥텟이 네트워크 식별 영역을 의미하고 나머지 2개의 옥텟은 호스트 식별 영역을 의미한다. 따라서 B 클래스에서 하나의 네트워크에서 가질 수 있는 호스트 IP 주소의 가짓수는 (2^16)-2이다. -2를 하는 이유는 A 클래스에서와 동일한 이유이다.
C 클래스
C 클래스는 첫 옥텟을 10진수 기준으로 표현하였을 때 192~223이면 C 클래스에 속한다. IP 주소를 이진수로 나타낼 때 첫 옥텟의 상위 비트가 110으로 시작하면 C 클래스이다.
110x xxxx. xxxx xxxx. xxxx xxxx. xxxx xxxx
가능한 IP 주소의 범위를 이진수로 나타내면,
1100 0000. 0000 0000. 0000 0000. 0000 0000 ~ 1101 1111. 1111 1111. 1111 1111. 1111 1111
가능한 IP 주소의 범위를 십진수로 나타내면,
192.0.0.0 ~ 223.255.255.255
C 클래스는 마지막 옥텟을 제외한 3개의 옥텟은 네트워크 식별 영역을 의미하고 하나의 옥텟만이 호스트 식별 영역을 의미한다. 따라서 C 클래스에서 하나의 네트워크에서 가질 수 있는 호스트 IP 주소의 가짓수는 (2^8)-2이다. -2를 하는 이유는 A 클래스에서와 동일한 이유이다.
IP 주소 클래스의 한계점
IP 주소 클래스를 이용하여 IP 주소의 네트워크 영역과 호스트 영역을 나누는 것에는 자원의 낭비가 심해 한계점이 존재한다. 예시로 1000개의 호스트를 가진 A 기관에 IP 주소를 할당한다고 가정해보자. 이때 A 클래스를 할당 받을 경우 약 1677만 개의 호스트 IP 주소가 할당 가능한데 1000개만 할당하면 나머지 주소는 잉여 자원으로 낭비이다. 또한 B 클래스를 할당 받을 경우, 약 6만 5천 개의 호스트 IP 주소가 할당 가능한데 1000개를 제외한 약 6만 4천 개의 IP 주소는 잉여 자원으로 낭비이다. 따라서 적절하게 IP 주소 영역을 나누는 기술이 필요하였다.
서브넷
IP 주소 클래스 할당의 한계점을 극복하기 위해 등장한 것이 바로 서브넷(Subnet)이다. 서브넷이란 네트워크 영역을 분할하여 더 작은 크기의 네트워크 영역으로 쪼갠 네트워크이다. 서브넷팅(Subnetting)이란 네트워크를 분할하는 것을 의미한다. 이것은 서브넷 마스크(Subnet Mask)를 통해서 가능하다.
서브넷은 Router와 같은 중개 장치를 거치지 않고 도달할 수 있는 장비들의 네트워크이다. 즉, 하나의 고립된 네트워크를 서브넷이라고 부른다. 위 그림에서는 3개의 서브넷이 존재한다고 말할 수 있다.
서브넷은 서브넷 마스크를 통해서 만들어진다. 서브넷 마스크는 IP 주소와 마찬가지로 32비트의 크기이며 각각의 비트는 0 또는 1이다. IP 주소와 서브넷 마스크를 AND 연산하면 해당 IP 주소의 네트워크 ID가 도출된다. 서브넷 마스크에서 1로 표현된 비트들은 네트워크 식별 영역을 의미하고 0으로 표현된 비트들은 호스트 식별 영역을 의미한다.
1111 1111. 0000 0000. 0000 0000. 0000 0000
만약 서브넷 마스크가 위와 같다면 상위 8비트(첫 옥텟)은 네트워크 식별 영역으로 사용되고 나머지 비트는 호스트 식별 영역으로 사용됨을 의미한다. A 클래스 네트워크에 해당하는 IP 주소들의 서브넷 마스크는 위와 같을 것이다.
이러한 서브넷은 CIDR 표기법으로 나타낼 수 있다. CIDR 표기법이란 IP 주소 클래스를 할당하는 방법 대신 네트워크 영역을 세밀하게 나누어 표기하는 방법이다. CIDR 표기법에 서브넷 마스크가 사용되는데
12.123.255.255/9
라는 IP 주소가 있다고 가정해보자. 이때, /9는 무엇을 의미할까? 바로 서브넷 마스크를 의미한다. 9라는 숫자는 서브넷 마스크에서 1비트의 갯수를 의미한다. 즉 12.123.255.255의 IP 주소에서 어디까지가 네트워크 영역인지를 나타내는 것이다. 9임으로 IP 주소를 이진수로 나타냈을 때 왼쪽부터 9개의 비트가 네트워크 식별 영역을 의미하고 나머지 비트는 호스트 식별 영역을 의미한다.
193.8.8.8/24
위와 같은 CIDR 표기법으로 표기된 IP 주소를 가정해 보자. 해당 네트워크에서 표현 가능한 호스트 IP 주소는 (2^8)-2개이다. 이때,
193.8.8.8/25
위와 같이 서브넷 마스크를 한 비트 증가시키면 네트워크 영역을 나타내는 비트 수가 한 자리 많아졌음으로 기존 네트워크에서 할당 가능한 네트워크(서브넷)는 2개가 된다. 또한 호스트 영역을 나타내는 비트 수는 한 자리가 줄어들었음으로 할당 가능한 호스트는 (2^7)-2개이다.
글의 처음 위치에 있었던 그림을 다시 살펴보자. 해당 VPC(Aws에서 사용되는 가상의 네트워크이다. 본 글에서는 그냥 단순히 하나의 네트워크라고 생각하자.)에 할당된 네트워크 주소는 172.31.0.0/16이다. /16임으로 16비트가 네트워크 식별 영역 비트이고 나머지 16비트가 호스트 IP 식별 영역이다. 따라서 할당 가능한 주소는 (2^16) 개인 65,536이고 할당 가능한 호스트 IP 주소는 -2인 65,534개이다.
172.31.0.0를 이진수로 표현해 보면 아래와 같다. 이때 굵은 글씨는 네트워크 영역을 식별하는 비트들이다.
1010 1100. 0001 1111. 0000 0000. 0000 0000
이떄, 서브넷 마스크를 /16에서 /20으로 증가시키고 기존 네트워크를 분할하여 IP 주소를 서브넷에 할당하면 네트워크 영역의 비트 수는 4 비트 증가하고 호스트 식별 영역의 비트 수는 4 비트 감소한다. 기존 네트워크(VPC)을 분할한 16개의 네트워크(서브넷)이 생성되는데 그림에서는 4개만 표현하였다. 각각의 네트워크(서브넷)의 주소는 아래와 같다. 이때 굵은 글씨는 네트워크 영역을 식별하는 비트들이다.
1010 1100. 0001 1111. 0000 0000. 0000 0000(좌측상단)
1010 1100. 0001 1111. 0001 0000. 0000 0000(좌측하단)
1010 1100. 0001 1111. 0010 0000. 0000 0000(우측상단)
1010 1100. 0001 1111. 0011 0000. 0000 0000(우측하단)
각각의 서브넷에서 할당 가능한 주소의 갯수는 (2^12)임으로 4096개이고 할당 가능한 호스트 IP 주소는 -2인 4094개이다.
'CS > 네트워크' 카테고리의 다른 글
소켓 시스템 - 네트워크 프로그래밍 (0) | 2024.09.30 |
---|---|
데이터 링크 계층 (1) - 프로토콜의 기초 (0) | 2024.09.30 |
ATM (Asynchronous Transfer Mode) (0) | 2024.09.23 |
NAT와 NAPT의 개념과 원리 (0) | 2024.09.23 |
JWT (Json Web Token) (0) | 2024.09.23 |