본문 바로가기

[네트워크] Region, AZ, Subnet, CIDR 이해하기

들어가며

아키텍처를 설계하면서, 견고한 아키텍처를 설계하려면 어떻게 해야 할까 늘 고민하고 있습니다. 아키텍처의 네트워크 환경을 잘 구축하려면 어떻게 해야 할까 고민하던 중, VPC 개념에 대해 알 수 있었습니다. 이번 기회에 VPC를 적용해서 더 나은 서버구조를 설계하고 싶었습니다. 이 글에서는 Region, AZ, 서브넷에 대해 알아보겠습니다. 

 

 

 

 

 


 

 

 

 

 

 

Region과 AZ(Availability Zone)

Region은 단어 뜻 그대로, 지역이라는 뜻입니다. AWS의 모든 서비스가 존재하는 물리적인 위치를 뜻합니다. 만약 대한민국에서 AWS 서비스를 사용한다면, 많은 분들이 ap-northeast-2 리전에서 서비스를 사용할 것입니다. 

 

 

 

 

 

 

 

 

 

AWS는 다양한 리전에서 서비스를 제공하고, 이런 리전 안에는 여러 개의 가용 영역(AZ)이 존재합니다. AZ는 리전을 이루는 데이터 센터의 모음을 뜻합니다.

 

 

 

 

 

 

 

 

 

대한민국에는 4개의 AZ가 존재합니다. 하나의 AZ만 존재해도 괜찮을 텐데, 왜 4개씩이나 필요한가요 질문을 주실 수 있습니다.

 

 

 

 

 

 

2022년에 데이터 센터에서 화재가 발생해서 서비스가 오랜 시간 먹통이었던 순간이 있었습니다. 이처럼 천재지변으로 특정 데이터 센터에서 큰 피해를 입을 경우 운영하는 서비스가 모두 장애가 발생할 수 있습니다. 이러한 문제를 방지하기 위해 특정 AZ에서 피해가 발생하더라도 다른 가용 영역에서 서비스를 하기 위해 AZ가 여러 곳에 존재합니다. AZ를 잘 활용한다면 무중단 서비스를 운영할 수 있습니다. 이를 통해 고가용성(HA, 사람이 개입하지 않아도 시스템이 항상 작동하고 자동으로 오류를 복구해 가동 중지를 최소화하도록 보장하는 것)을 제공합니다. 

 

이런 서울 Region의 AZ에 VPC의 하위 단위인 서브넷을 추가할 수 있습니다. 

 

 

 

 

 

 


 

 

 

 

 

 

Subnet

서브넷이란 VPC의 하위 단위이며, VPC에 할당된 IP를 더 작은 단위로 분할한 개념입니다. VPC의 IP 주소 범위라고도 이야기합니다. 서브넷은 하나의 AZ에만 생성할 수 있고, 다른 AZ로는 확장할 수 없습니다. 여러 개의 AZ에 동일한 서브넷을 위치시킬 수 없습니다. 하나의 AZ에는 여러 개의 서브넷이 존재할 수 있습니다. 

 

서브넷은 인터넷에 접근할 수 있는 public 서브넷과 인터넷에 직접 접근할 수 없는 private 서브넷으로 나뉩니다. public 서브넷은 인터넷 게이트웨이를 통해 외부의 인터넷과 연결되어 있습니다. public 서브넷에 존재하는 인스턴스에는 public ip를 부여할 수 있습니다. public 서브넷에는 웹서버, 애플리케이션 서버 등 유저에게 노출되어야 하는 인프라를 구성하곤 합니다. 반면에 private 서브넷은 외부 인터넷으로의 경로가 없고, public ip를 부여할 수 없습니다. private 서브넷에는 데이터베이스, 로직 서버 등 외부에 노출될 필요가 없는 인프라를 구성하곤 합니다. 

 

서브넷에서는 CIDR block 범위 설정을 통해 IP 주소를 지정합니다. 그럼 여기서 간단히 CIDR block에 대해 알아보겠습니다.

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

CIDR

CIDR에 대해 본격적으로 알기 전, ip와 사설망에 대해 간단히 이해하고 넘어가겠습니다.

 

IPv4

현재 IP는 IPv4, IPv6가 혼용되어 사용되고 있습니다. 하지만 여기서는 IPv4에 초점을 맞춰서 글을 정리하겠습니다.

 

IPv4의 주소는 예를 들어 아래처럼 구성되어 있습니다. 

 

 

 

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

 

 

 

표에서 보이는 10진수는 보기 편하도록 변형한 것이고, 사실 각 10진수는 2진수 8자리로 구성되어 있습니다. 각 자리를 옥텟이라 부르며 '.'으로 구별합니다. 그러므로 IP주소는 4개의 옥텟으로 이루어져 있다고 할 수 있습니다. 그럼 총 2진수 32자리로 구성되어 있어 IPv4의 경우 총 32비트의 숫자로 구성되어 있다고 말할 수 있습니다.

 

32비트를 계산해 보면, 그럼 우리가 IPv4로 활용할 수 있는 ip의 개수는 4,294,967,296개입니다. 그중, 588,514,304개는 특정한 목적으로 선점되어 있기 때문에, 가용가능한 IP는 4,294,967,296 - 588,514,304 = 3,706,452,992개입니다. 

 

전 세계 인구 한 명당 하나의 ip만 사용해도 약 80억 개의 ip가 필요할 텐데, 37억의 ip는 충분하지 않을 수 있습니다. 심지어 요즘은 스마트폰, IoT 기기들이 많아짐에 따라 기기별로 ip를 각각 사용한다면, 가용가능한 ip의 숫자는 더더욱 없어질 것입니다.

 

ip가 고갈되기 시작했을 때 고안한 게 바로 private network 즉 사설망입니다. 

 

 

 

Private Network

사설망은 하나의 Public IP를 여러 기기가 공유할 수 있는 방법입니다. 하나의 망에는 private ip를 부여받은 기기들과 gateway로 구성됩니다. 각 기기는 인터넷과 통신 시 Gateway를 통해 통신합니다. Private ip는 지정된 대역의 아이피만 사용이 가능합니다. 작은 망을 구축해서 아이피를 최대한 많이 써보자가 사설망의 핵심입니다.

 

만약 집에서 인터넷 공유기(공유기도 일종의 게이트웨이)를 사용한다면, 공유기를 통해 기기들이 통신합니다. 컴퓨터, 휴대폰 같은 것들이 와이파이를 통해 통신하는데, 기기들은 공유기를 통해 통신합니다.

 

 

출처: https://youtube.com/watch?v=kYiQGpPVnyI&feature=shares

 

 

 

사설망은 위와 같이 생겼습니다. 가운데 게이트웨이가 있고, 퍼블릭 아이피를 부여받았습니다. 만약 사설망을 구축했다면, 사설망에 있는 컴퓨터들은 각각 private ip를 부여받습니다. 망 안에서는 유니크한 ip입니다. 

 

사설망에 있는 ip들은 다른 사설망에서의 아이피와 동일할 수 있습니다. VPC 1의 192.168.0.2와 VPC 2의 192.168.0.2는 ip 주소는 동일할 수 있지만, 망이 다르기 때문에, 다르게 취급됩니다. 

 

그럼 이런 사설망에서 인터넷 통신은 어떻게 할까요? 이는 게이트웨이가 대표로 해서 전달합니다. 이에 대해 알아보겠습니다.

 

 

 

출처: https://youtube.com/watch?v=kYiQGpPVnyI&feature=shares

 

 

 

 

사설망이 외부와 소통할 때는 사설망 안에 있는 컴퓨터가 게이트웨이에 요청을 전달하고, 게이트웨이가 대신 다른 외부의 컴퓨터와 소통하는 방식으로 통신을 주고받습니다. 이때 테이블을 하나 활용해서 통신합니다.

 

예를 들어 192.168.0.2가 61.123.44.1과 통신하고 싶다면, gateway한테 요청합니다. 그럼 게이트웨이는 192.168.0.2가 5000 포트를 통해서 61.123.44.1과 통신하려 한다는 것을 파악해서 181.227.3.33이라는 이름으로 61.123.44.1과 통신합니다.

 

그런데 만약 192.168.0.5에서 61.123.44.1한테 요청을 보내는데, 포트는 192.168.0.2와 동일한 포트를 사용한다면, 포트를 살짝 바꿔서 전달합니다. 예를 들어 5000번을 사용한다면 5000번 대신 50002번으로 변경해서 전달합니다. 

 

그럼 61.123.44.1 입장에서는 요청과 응답을 받고 보낼 때, 사설망에 있는 ip는 알 수 없고, 퍼블릭 아이피만 알 수 있습니다. 

 

그럼 private ip에 대해 알아봤으니, 본격적으로 CIDR에 대해 알아보겠습니다.

 

 

 

 

 

CIDR 

CIDR란 Classless Inter Domain Routing의 약자로, IP 주소의 영역을 여러 네트워크 영역으로 나누기 위해 IP를 묶는 방식을 뜻합니다. 만약 사설망을 구축했다면, 사설망 안에 여러 가지 사설망을 나누기 위해 아이피 대역을 분산하는 방식입니다.

 

위에서 IPv4 주소는 4개의 옥텟으로 이루어져 있고, 총 2진수 32자리로 구성되어 있다고 했는데요. IP Address는 특정 네트워크를 가리키는 8비트의 네트워크 영역과 해당 네트워크 내에서 호스트의 주소를 가리키는 나머지 영역으로 구분되어 있습니다. 하지만 점점 많아지는 IP Address를 모두 개별적으로 관리하는 것이 힘들기 때문에, 요구를 충족하기 위해 IP Address Class가 만들어졌습니다. 이런 IP Address Class는 네트워크 영역과 호스트 주소를 어떻게 나누냐에 따라 나뉜다고 생각할 수 있습니다. 

 

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

 

 

A Class
 

0xxxxxxx. xxxxxxxx. xxxxxxxx. xxxxxxxx
Network Address Host Address Host Address Host Address

 

 

 

B Class

10xxxxxxx. xxxxxxxx. xxxxxxxx. xxxxxxxx
Network Address Network Address Host Address Host Address

 

 

C Class

 

110xxxxxxx. xxxxxxxx. xxxxxxxx. xxxxxxxx
Network Address Network Address Network Address Host Address

 

 

 

 

 

위처럼 A, B, C class가 이루어져 있는데요. A, B, C Class에 대해 정리해 보겠습니다.

 

 

  • 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

 

 

 

 

그럼 왜 Network Address와 Host Address를 나누는 것일까요? 이를 더 자세히 알려면 Subnetting과 Supernetting의 개념을 알면 좋습니다. 위에서 서브넷은 VPC의 하위 단위이며, VPC에 할당된 IP를 더 작은 단위로 분할한 개념이라고 정의했습니다. VPC의 IP 주소 범위라고도 이야기했습니다. 즉,  서브넷은 기존 IP address를 더 잘게 쪼개 IP주소를 아끼고 관리하기 위한 방법이며, Subnetting은 결국 자신의 조직에 할당된 네트워크 ID의 IP주소를 사용하여 내부적으로 여러 개의 서브넷을 구성하는 과정입니다. 

 

 

방식은 각 클래스별로

  • 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를 나타내는 개수라고 생각하시면 됩니다.

 

 

여기까지 정리했을 때, IP Address Class로 관리하면 되는데, 어떤 이유로 CIDR가 나왔을까 생각해 보면, CIDR란 결국 IP Address Class보다 더욱 많아진 IP Address의 요구를 충족시키기 위해 나왔다고 생각할 수 있습니다.

 

 

CIDR에 대해 자세히 살펴보겠습니다.

 

 

 

 

 

출처: https://rileyko.tistory.com/m/46

 

CIDR block을 기반으로 IP 주소의 범위를 지정하게 되는데, 이때 IP 범위는 Private IP와 Public IP 범위로 구별됩니다.

 

출처: https://youtube.com/watch?v=kYiQGpPVnyI&feature=shares

 

 

 

위의 그림에 10.88.135.144/28와 같이 "/28"이라고 나와있는 것을 볼 수 있는데, 이것이 사이더 표기법입니다. 만약 10.88.135.144/24라고 나와있다면, 앞에서부터 24비트 이후에 오는 4번째 옥텟을 전부 사용할 수 있다는 표현입니다. 위에서는 /28로 되어 있으니, 4번째 옥텟 중 4개의 비트를 사용할 수 있다는 뜻입니다. 그럼 10.88.135.144/28은 2의 4승만큼 추가되니까, 10.88.135.144 ~ 10.88.135.159가 될 것입니다. 그럼 다음 대역은 10.88.135.160 ~ 10.88.135.175 정도가 될 것입니다.

 

 

이런 CIDR Block에도 특징이 있습니다. 먼저, 모든 게 0이거나 혹은 모든 게 1일 때 두 가지는 미리 예약된 IP입니다. 예를 들어 192.168.0.0/16이라 한다면, 네트워크 주소가 8비트, 8 비트 해서 192.168이며, 호스트 주소는 0.0입니다. 그래서 192.168.0.0 ~ 192.168.255.255까지 허용됩니다. 이때 두 개는 미리 예약되어 있습니다. 192.168.0.0은 네트워크 주소라고 해서 네트워크 자체를 가리키고, 192.168.255.255는 브로드캐스트 ip로 활용되기에 사용이 불가능합니다. 

 

CIDR Block에서 사용할 수 없는 주소 두 개는 제외해야 합니다. 그럼 10.0.0.0/28에서 가용할 수 있는 주소는 몇 개일까요? 10.0.0.0 ~ 10.0.0.15일 텐데, 그럼 16개가 아닌가 생각할 수 있습니다. 하지만 앞에서 말했듯, 2개를 빼야 하니, 14개입니다. 

 

하지만 AWS에서는 2개가 아닌, 5개의 ip를 미리 선점한다는 특징이 있습니다. 예를 들어 192.168.0.0/24에서 총 가능한 ip 개수는 몇 개인지 살펴본다면, 192.168.0.0 ~ 192.168.0.255이니 256개라고 한다면 틀립니다. 여기서는 5개를 제외해서 251개라고 말해야 합니다.

 

AWS의 사용 가능한 IP 숫자는 5개를 제외하고 계산합니다. 만약 10.0.0.0/24라면,

 

  • 10.0.0.0: 네트워크 어드레스
  • 10.0.0.1: VPC Router
  • 10.0.0.2: DNS Server
  • 10.0.0.3: 미래에 사용을 위해 남겨 둠
  • 10.0.0.255(마지막 번호): 네트워크 브로드캐스트 어드레스(단 브로드캐스트는 지원하지 않음)

 

5개의 IP를 미리 선점해서 활용하고 있기에, 5개를 제외한 251개의 IP를 우리는 활용할 수 있습니다. 

 

 

결국 CIDR block이란 IP address들의 그룹이며, CIDR란 IP address들의 그룹을 관리하면서 기존 IP Address Class보다 유연하게 동작하는 방식이라고 이해할 수 있습니다. 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

마치며

네트워크에 대해 조금씩이라도 지식을 쌓아가고 싶습니다. 기본을 꾸준히 쌓을 수 있는 개발자가 되겠습니다. 

 

 

 

 

 

 

 

 


 

 

 

 

 

출처

 

VPC는 Sims같아요. (AWS 강의실 - VPC 개념)

Sims 해보셨나요? 심즈는 땅과 건물을 사서 그 안에 개인 캐릭터를 키우는 게임입니다. 건물 내에 벽을 설치해서 공간을 나눌 수도 있습니다. 또한, 가구 등을 주문해서 인테리어를 할 수도 있습

rileyko.tistory.com

 

[ AWS ] Subnet 생성 및 라우팅

※ 개인 공부를 위한 공간입니다. 틀린 부분 지적해주시면 감사하겠습니다 (_ _) 서브넷이란? [AWS설명] VPC를 생선한 후, 각 가용영역(AZ)에 하나 이상의 서브넷을 둘 수 있다. 서브넷은 VPC내에 IP 주

martinkim1954.tistory.com

 

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

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

dev.classmethod.jp

 

[네트워크] CIDR이란?(사이더 란?)

오늘은 CIDR에 대해서 설명해보도록 하겠습니다. 네트워크 설계를 하면서 가장 많이 접하게 될 개념이 CIDR입니다. 사이더라고 부릅니다. CIDR의 full name은 Classless Inter-Domain Routing 으로 클래스 없는

kim-dragon.tistory.com

 

[네트워크] CIDR 범위 쉽게 계산하는 방법

Intro 오래전에 네트워크 공부를 하면서 CIDR계산이 너무어려웠던 기억이 있습니다. 책이나 구글링을 해봐도 이해하기 쉽게 설명되어 있지 않기도 했고 예시가 다양해서 매번 막혔던것 같습니다.

kim-dragon.tistory.com