VPC의CIDR블록의 사용이유와 설정방법

VPC를 처음 만들기 시작하면 CIDR block을 설정하시오 라는 칸이 있습니다. 처음 이부분에 막혀서 VPC를 생성하지 못하고 있으신 분이 있다면 이 글을 보면 도움이 될것이라고 생각합니다.
2020.05.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

VPC를 공부하면서 처음부터 막히게된 부분이 CIDR block 설정이라는 부분이였습니다. 그래서 이번 글에서는 CIDR block 를 설정하기전 왜 CIDR을 사용하는지 와 CIDR에 관한 설명과 함께 CIDR block을 설정해서 VPC를 만들어 보도록 하겠습니다.

CIDR이란

CIDR(Classless Inter-Domain Routing)는 클래스 없는 도메인 간 라우팅 기법으로 1993년 도입되기 시작한 최신의 IP주소 할당 방법입니다.

먼저 CIDR은 결국 IP주소 할당 방법입니다. 그럼 먼저 IP주소에 대해서 먼저 알아보겠습니다.

IP주소

IP Address(Internet Protocol address)는 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 특수한 번호 입니다.

여기서 IP가 어떻게 이루어져 있는지 확인해보겠습니다.

현재 IP는 IPv4,IPv6가 혼용되어 사용되고 있습니다. 하지만 이번 글에서는 IPv4에 초점을 맞춰서 이어가도록 하겠습니다.

IPv4 의 주소는 예를 들면 아래와 같은 형식으로 구성되어 있습니다.

172. 16. 0. 0
10101100. 00010000. 00000000. 00000000

하지만 표에서 보이는 십진수는 보기 편하도록 변형한 것이고 사실 각 10진수는 2진수 8자리로 구성되어있습니다.

각자리를 Octet이라고 부르며 "."으로 구별 합니다. 그러므로 IP주소는 4개의 Octet으로 이루어져있다고 할 수 있습니다.

총 2진수 32자리로 구성되어 있으며 총개수는 2^32로 표현할 수 있습니다.

이제 좀더 IP주소가 의미하는 것을 알아보도록 하겠습니다.

IP Address Class

원래 32비트 IPv4 주소는 호스트가 연결되어있는 특정 네트워크를 가리키는 8비트의 네트워크 영역과 해당 네트워크 내에서 호스트의 주소를 가리키는 나머지 영역으로 구분되어 있습니다.

하지만 점점 많아지는 IP Address의 요구를 충족하기 위해 IP Address Class 가 만들어졌다고 생각하시면 됩니다.

클래스는 총 5가지의(A,B,C,D,E)클래스로 나누어져 있습니다. 하지만 D,E클래스는 멀티캐스트 용 과 연구 또는 개발용 미래를 위한 예약IP이므로 보통사용되지 않습니다. 이번 클래스 설명에서는 A,B,C클래스만 설명하도록 하겠습니다.

먼저 클래스를 이해하기전 IP주소는 2가지의 부분으로 나누어져 있습니다.

간단하게

  • Network Address:그룹(네트워크 를 식별하기 위한)
  • Host Address: 개인(네트워크의 호스트 컴퓨터를 식별하기 위한 것)

으로 생각해주세요.

IP Address을 하나하나 관리하는 것은 힘듭니다. 그래서 IP Address는 Network Address라는 하나의 그룹에서 개인을 구별하는 번호인 Host Address를 지정한다고 생각하시면 됩니다.

그리고 각 클래스는 Network Address와 Host Address를 어떻게 나누냐에 따라서 나누어진다고 생각하시면 됩니다.

  • A Class
    0xxxxxxx. xxxxxxxx. xxxxxxxx. xxxxxxxx
    Network Address Host Address Host Address Host Address
  • B Class

    10xxxxxx. xxxxxxxx. xxxxxxxx. xxxxxxxx
    Network Address Network Address Host Address Host Address
  • C Class

    110xxxxx. xxxxxxxx. xxxxxxxx. xxxxxxxx
    Network Address Network Address Network Address Host Address

이렇게 이루어져 있습니다.

  • A Class
    • 0 ~ 127로 Network Address가 시작되며
    • Host Address는 (2^24)개를 가질 수 있습니다.
    • 0.0.0.0의 경우는 자체 네트워크를 의미 해서 빠지며
    • 127.0.0.0~127.255.255.255는 루프백 ip address(자기 자신을 가리키기 위한 목적으로 쓰기 위해 예약된 IP 주소입니다. 로컬호스트의 주소라고 생각하시면 됩니다.)로 사용하기때문에 사용하실수 없습니다.
  • B Class
    • 128.0~191.255로 Network Address가 시작되며
    • Host Address는 총 2^16개를 가질 수 있습니다.
  • C Class
    • 192.0.0~223.255.255로 Network Address가 시작되며
    • Host Address는 총 2^8개를 가질 수 있습니다.

0이면 A Class, 10이면 B Class, 110이면 C Class로 생각해주세요. 십진수로 바꾸어 보시면 왜 앞이 0,10,110인지 좀더 쉽게 이해 하실 수 있습니다.

클래스 A 0.0.0.0 = 00000000.00000000.00000000.00000000 127.255.255.255 = 01111111.11111111.11111111.11111111

클래스 B 128.0.0.0 = 10000000.00000000.00000000.00000000 191.255.255.255 = 10111111.11111111.11111111.11111111

클래스 C 192.0.0.0 = 11000000.00000000.00000000.00000000 223.255.255.255 = 11011111.11111111.11111111.11111111

Subnetting과Supernetting

CIDR을 보기전에 Subnetting과Supernetting의 개념을 아시면 왜 Network Address와 Host Address를 나누는지에 대해서 더욱 이해가 갈것같아 간단히 소개하겠습니다.

먼저 subnet과 subnetting, subnet mask 를 간단히 소개한 후 마지막으로 Superentting에 대해서 간단히 설명하겠습니다.

Subnet(부분망) 이란 하나의 IP 네트워크 주소를 네트워크 내부에서 적절히 분할하여 다수의 상호 연결된 하부 네트워크로 나누어 사용하는 방법입니다.

Network Address Host Address
Network ID Subnet Address|Host Address

기존 IP address를 더 잘게 쪼개 IP주소를 아끼고 관리하기 위한 방법이라고 생각하시면 됩니다.

  • Subnetting 자신의 조직에 할당된 네트워크 ID의 IP주소를 사용하여 내부적으로 여러 개의 서브넷을 구성하는 과정 입니다.
  • Subnetmask Network Address 와 Host Address를 구별하기 쉽게 만들어주는 방법이라고 생각하시면 됩니다.

방식은 각 클래스별로

  • A Class: 0.0.0.0 ~ 127.255.255.255 subnet mask 255.0.0.0
  • B Class: 128.0.0.0 ~ 191.255.255.255 subnet mask 255.255.0.0
  • C Class: 192.0.0.0 ~ 223.255.255.255 subnet mask 255.255.255.0
  • Supernetting Subnetting의 반대의 개념입니다. 나누는것이 아닌 할당 받은 IP Address를 합치는 것입니다.

예를 들면

198.168.32.0/24 198.168.32.0~198.168.32.255 = 256

198.168.33.0/24 198.168.33.0~198.168.33.255 = 256

198.168.34.0/24 198.168.34.0~198.168.34.255 = 256

198.168.35.0/24 198.168.35.0~198.168.35.255 = 256

198.168.32.0/22 198.168.32.0~198.168.35.255 = 1024(256*4)

와 같은 방식으로 256개를 할당 받은 4개를 하나로 합치는 것입니다. 뒤의 "/"부분은 Network Address를 나타내는 개수라고 생각하시면 됩니다.

Private IP Address

AWS에서는 Private IP Address의 사용을 추천하고 있습니다. 그래서 잠시 Private IP Address에 대해서 간단하게 설명하고 가겠습니다.

Private IP Address를 사용하는 이유는 Public IP Address의 개수가 한정되어 있기 때문에 더 많은 수의 디바이스를 연결하기 위해서입니다. 집에서 사용하시는 공유기에서 받는 IP Address가 Private Address입니다.

공유기를 사용중이시라면 cmd를 열고 ipconfig를 쳐보시면 IPv4 Address를 얻으실 수 있는데 이부분의 IP Address 가 private IP입니다.

screensh

만약 자신이 사용하는 Public IP를 확인하고 싶으시다면 아래에 사이트를 이용해보세요.

MyIP

간단히 나타내면 이런 모습입니다.

screensh

  • 공유기에 IPS(통신사라고 생각하시면 됩니다.)가 Public IP Address를 할당하고
  • 공유기가 각 디바이스에 Private IP Address를 할당한다고 생각하시면 됩니다.

CIDR(Classless Inter-Domain Routing)

이제 마지막으로 VPC를 만들어보면서 설명해 보겠습니다.

CIDR는 기존의 IP 주소 할당 방식이었던 네트워크 클래스를 방법을 대체한 방식입니다. CIDR는 IP Address의 영역을 나눌 때 기존방식보다 유연하게 자신이 원하는 Network Address와 Host Address를 나눌 수 있습니다.

CIDR란 결국 IP Address Class보다 더욱 많아진 IP Address의 요구를 충족시키기 위해서 나왔다고 생각하시면 됩니다.

  • 결국

CIDR block 이란 IP address들의 그룹이며,CIDR이란 IP address들의 그룹을 관리 하면서 기존 IP Address Class보다 유연하게 동작하는 방식으로 이해하시면 됩니다.

screensh

이제 VPC의 설정창을 다시보시면 위와 같은 CIDR block 설정을 보실 수 있습니다.

잠시 Private IP의 설명에서 AWS에서는 private IP의 사용을 추천하고 있다고 했습니다.

만약 VPC를 인터넷에 연결 한다고 가정해봅시다. 인터넷에서 사용되고 있는 IP Address (xxxx.xxxx.xxxx.xxxx/16)로 지정하게 되면 그 범위의 IP Address는 VPC 내부에서 움직이게 되고 VPC에서 사용하고 있는 IP Address범위에 속한 인터넷 IP Address에 접속하는 것이 불가능 합니다.

예를들면 87.32.0.0/16 으로 설정한다고 생각해봅시다. 이 범위는 VPC내에서만 움직이게 됩니다. 그럼 인터넷의 어느 사이트가 87.32.1.0 의 IP Address를 사용하고 있다면 이 곳에 접속을 할 수 없게 됩니다. 왜냐하면 VPC내부에서 IP Address를 찾게 되기 때문입니다.

그렇기때문에 Private IP 사용하는 것이 권장됩니다.

Private IP 대역입니다.

  • A Class 10.0.0.0/8
  • B Class 172.16.0.0/12
  • C Class 192.168.0.0/16

를 사용하는 것을 추천합니다.

다시 VPC의 설정으로 가보겠습니다.

저는 C class 의 192.168.0.0/16으로 만들어보도록 하겠습니다.

단 VPC설정시 알고 가시면 좋은 내용을 2가지 설명하고 가겠습니다.

  • block설정은 /16~/28입니다.

screensh

보시는 것과 같이 /16~/28 이 외를 선택하면 에러를 보실 수 있습니다.

  • 각 Subnet CIDR block에서 첫 4개의 IP 주소와 마지막 IP 주소는 사용자가 사용할 수 없으므로 인스턴스에 할당할 수 없습니다.

예를들면 10.0.0.0/24 CIDR 블록의 서브넷에서는 다음 5개 IP 주소가 예약되어 있습니다.

  • 10.0.0.0:네트워크 주소입니다.
  • 10.0.0.1:AWS에서 VPC 라우터용으로 예약한 주소입니다.
  • 10.0.0.2:AWS에서 예약한 주소 DNS 서버의 IP 주소입니다.
  • 10.0.0.3:AWS에서 앞으로 사용하려고 예약한 주소입니다.
  • 10.0.0.255:네트워크 브로드캐스트 주소입니다. VPC에서는 브로드캐스트를 지원하지 않고 이 주소를 예약합니다.

다시 192.168.0.0/16으로 VPC를 만들어 보겠습니다.

screensh

여기서 /16의 의미를 아시겠나요? Network Address를 나타내는 부분이라고 Supernetting때 설명해 드렸습니다. 조금더 자세히 보겠습니다.

이진수로 나타내면

192.168.0.0
11000000.10101000.00000000.00000000

입니다.

여기서 앞의 16자리를

Network Address Host Address
11000000.10101000. 00000000.00000000

Network Address로 사용하겠다는 뜻으로 이해하시면 됩니다. 그러면 나머지 부분은 Host Address로 사용하며

총 65,536의 호스트를 가지게됩니다.(하지만 앞에서 설명했듯이 AWS에서 미리 정해져 있는 IP Address가 있기때문에 모든 IP Address를 사용 하실 수 있는것은 아닙니다.)

screensh

생성 결과입니다.

screensh

CIDR계산기

위의 이미지는 CIDR계산기를 사용해서 나온 결과입니다.

마지막으로 CIDR계산기의 몇개의 항목을 살펴보고 끝내도록 하겠습니다.

  • CIDR Range:말그대로 CIDR의 범위를 의미합니다.
  • Netmask:Subnet을 할때 subnet mask를 기억하시나요? 그것과 같습니다. 네트워크를 구분하기 위해서 사용하는 특수한 bit입니다. Network Address와 Host Address를 구별하기 위해서 사용하는 방법이라고 생각하시면 됩니다.
  • First IP:첫번째로 받을 수 있는 IP Address입니다.
  • Last IP:마지막으로 받을 수 있는 IP Address입니다.
  • Total Host:만들수 있는 총 Host의 계수입니다.

정리가 잘되었는지 잘모르겠습니다. 최대한 적은 양으로 쓰고싶었지만 글이 길어지고 말아 아쉽습니다. 초보적인 내용이라 많은 도움은 되지 않을 거라고 생각하지만 도움이 되었으면 좋겠습니다.

추천사이트

CIDR계산기

CIDR.xyz

IPv4 Tutorial

MyIP