주요 내용으로 건너뛰기

AWS를 위한 네트워크 용어 정리

CIDR와 서브넷

들어가며


AWS를 사용하다보면 수많은 기본 용어를 이해해야한다.

그 중에서도 처음 AWS를 이용하는 사람에게 가장 부담스러운 것은 네트워크 관련 용어가 아닐까한다.

어디선가 들어는 봤지만 그 용어가 실제로 무엇을 의미하는지 모르기 때문에 잘은 모르지만 어떻게(?) 따라하다보니 작동하는 경우도 많다.

문제는 언제 어디서 오류가 발생할 지 알 수 없다는 것.

또 그런 문제가 발생했을 때 빠르게 대처할 수 있으려면 기본 용어와 개념에 대한 숙지가 필수적이라는 것.

오늘은 AWS의 여러 서비스들 중에서도 VPC 즉 Virtual Private Cloud와 관련된 네트워크 용어들을 정리해볼까 한다.


VPC 생성하기 창을 누를 때부터 고난은 시작된다.

CIDR 블락을 지정해달라는 말이 나오는데, 나는 CIDR 블락이 무엇인지 몰랐다.

그래서 그냥 튜토리얼에 나온대로 10.0.0.0/16을 집어넣었다.

어떻게 생성이 됐다.

나중에 서브넷이 필요하다고 해서

적당히 IP 주소를 적어넣었다. 음?.. 해당 주소는 이미 사용 중인 주소 범위라는 말이 뜬다!

그래서 가능한 조합들을 모두 시도해본다.

...

1시간이 지나고 구글링을 시작한다. 근데 읽어봐도 무슨 소리인지 이해가 잘 안 된다. 

CIDR 계산기를 사용하면 서브넷 범위를 돌려준단다.

근데 계산기를 어떻게 사용해야할지도 잘 모르겠다.

이런 좌절을 경험한 적이 있다면 이 글은 당신을 위한 글입니다.


적절한 배경지식


CIDR가 무언인지 이야기하기 전에 IP 주소 얘기를 조금 하자.

IP 주소는 "네트워크를 이용하는 여러 기기(컴퓨터, 스마트폰, 태블릿 등)들 간에 서로를 구별하기 위해 부여되는 식별자-아이디"라고 할 수 있다.

즉 우리가 일상적으로 사용하는 거주지 주소와 비슷한 역할을 한다.

택배 물건이 우리 집으로 도착하려면 제대로 된 주소를 적어넣어야한다. (제대로 안 적으면 반품된다..)

마찬가지로 인터넷 상에서 수많은 기기들 간에 데이터를 주고 받으려면 정확한 IP 주소를 알아야한다.


그러면 여기서 내가 연결된 IP 주소는 어떻게 될까하는 의문이 들 수 있다.

IP 주소를 확인하는 방법에는 여러가지가 있지만 여기서는 터미널을 이용한 방법을 알아보자.

터미널에 다음과 같이 입력해보자.

세 개의 점(.)으로 구분된 네 개의 숫자가 나왔다.

이 주소를 여러분의 퍼블릭 IP (Public IP) 라고 한다.

퍼블릭 IP란 KT와 같은 인터넷 공급자(ISP)로부터 부여받는 IP 주소이다. 

물론 프라이빗 IP도 존재한다. 

프라이빗 IP는 퍼블릭 IP를 여러 기기가 동시에 사용할 경우 개별 기기를 구분하기 위해 사용하는데, 예를 들어 어떤 와이파이 네트워크에 세 대의 기기가 연결되어 있다면 세 기기의 퍼블릭 IP는 동일하지만 프라이빗 IP는 다르다. 


CIDR과 서브넷


최소한의 배경 지식을 살펴봤으니 이제 본론으로 넘어갈 차례다.

CIDR은 위키백과의 설명에 따르면 "클래스 없는 도메인 간 라우팅 기법으로 1993년 도입되기 시작한, 최신의 IP 주소 할당 방법"이다.

음?.. 좀 복잡하긴하지만 그냥 "IP 주소 할당 방법" 이 부분만 살펴보면 된다.

그 전까지의 설명은 마치 "옛날에는 지번 주소가 있었구요~ 요즘은 도로명 주소를 써요"와 같은 얘기라고 할 수 있다.

그리고 CIDR 블락이란 여러 IP가 모인 그룹이라고 할 수 있다. 

이렇게 거대한 블락을 여러 개의 네트워크로 나누는 것을 "서브네팅(subnetting)"이라고 하는데,

CIDR 블락이라는 거대한 그룹의 IP 주소를 개별 서비스가 이용할만큼 작은 블락으로 나누어 할당하는 작업이다.


예시를 보자.

121.168.190.197/24

음? 아까 보지 못했던 /24가 추가됐다.

아까 CIDR 블락은 여러 IP 주소의 그룹이라고 했다.

그러면 각 IP 주소는 그룹에서 어떻게 구분될까?

네트워크 접두어(Network Prefix)와 호스트 구분자(Host Identifier)를 통해 각 주소를 구분한다.

이때 24라는 숫자는 위의 4 숫자들을 이진법으로 나타냈을 때 어느 정도의 비트를 네트워크 접두어에 할당할 것인가를 나타낸다.

어렵다..

예시를 들어보자. (각 숫자들은 8비트로 변환한다.)

01111001.10101000.10111110 .11000101 -> 121.168.190.197 주소

여기서 네트워크 접두어는 왼쪽부터 24개의 비트인 01111001.10101000.10111110이 되고,

호스트 구별자는 00000001부터 11111110 까지의 254개가 된다. (00000000과 11111111는 사용하지 않는다.)

다시 10진법 세상으로 돌아오면

121.168.190.197/24 -> 네트워크 접두어

121.168.190.197/24 -> 호스트 구별자

가 된다.


좀 감이 오는 것 같기도 하다.

한 번 더 해보자.

130.211.0.0/16

10000010.11010011 .00000000.00000000 -> 130.211.0.0 주소

그러면 네트워크 접두어는 10000010.11010011, 호스트 구별자는 00000000.00000001부터 11111111.11111110이 된다.

그러므로 가능한 호스트의 갯수는 65534개!


이제 서브넷을 계산해보자.

서브넷을 계산할 때는 넷마스크라는 것을 이용하는데 넷마스크란 /뒤에 오는 숫자만큼 왼쪽에서부터 1을 채우고 나머지는 0으로 채운 값이다.

즉 130.211.0.0/16의 넷마스크는 11111111.11111111 .00000000.00000000 혹은 255.255.0.0이 된다.

서브넷 계산은 이 넷마스크의 비트를 변경함으로써 이뤄지는데,

방금 전 두개의 예시를 통해 어느 정도 감을 잡은 사람도 있겠지만 /뒤에 오는 숫자의 크기에 따라 가능한 호스트의 갯수가 달라진다. (숫자가 커지면 가능한 호스트의 갯수가 작아지고, 숫자가 작을 수록 커진다.)


예를 들어 

130.211.0.0/16의 CIDR 블락을 네 개로 나누려면 130.211.0.0/18으로 조정해야된다.

과정은 

1. 넷마스크 11111111.11111111 .00000000.00000000 가 /뒤의 숫자가 늘어남으로서 두 개의 비트를 더 사용하게 된다.

두 개의 비트에서 나올 수 있는 조합은 4개 (00, 01, 10, 11) 이므로 가능한 서브넷의 넷마스크는 

11111111.11111111 .00000000.00000000

11111111.11111111 .01000000.00000000

11111111.11111111 .10000000.00000000

11111111.11111111 .11000000.00000000

이 된다.


2. 각 경우 가능한 호스트의 수는 000000.00000001에서 111111.11111110 즉 16382 개가 된다.


3. 16382 * 4 = 65528 (네트워크 주소와 브로드캐스트 주소에 할당되는 주소를 제외하면 균등하게 4개로 나눠졌다.)

참고) https://networkengineering.stackexchange.com/questions/30476/why-are-number-of-hosts-on-a-subnet-less-than-the-number-of-combinations-we-can


이제 VPC의 서브넷 얘기를 조금 해보자.

일반적으로 VPC 내부에서 서브넷을 나눌 때는 너무 많이 할당하거나 너무 조금 할당해서는 안 된다. 또 어떤 자원에는 많이 어떤 자원에는 적게 할당하는 것도 바람직하지 않다.


그러므로 일반적으로 4개의 서브넷을 생성해놓고 그 서브넷을 퍼블릭/프라이빗 등으로 나누는 식으로 사용한다. 

즉,

과 같이 할 수 있다.


물론 더 세부적으로 쪼개는 것도 가능하다. 아까 두 개의 비트를 옮겨서 4개의 서브넷을 만들엇으니 2개의 서브넷만 필요하다면? 1개만 옮기면 된다.


읽을거리)

위키백과 (부분망):https://ko.wikipedia.org/wiki/%EB%B6%80%EB%B6%84%EB%A7%9D

RIVATE SUBNET 으로 서비스 구성하기: http://linux.systemv.pe.kr/aws-private-subnet-%EC%9C%BC%EB%A1%9C-%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0/

IP Calculator: http://jodies.de/ipcalc

What is IP?: https://www.lifewire.com/what-is-an-ip-address-2625920

VPC를 사용하는 이유(장점): https://stackoverflow.com/questions/11961353/should-i-use-amazons-aws-virtual-private-cloud-vpc

**추천** Practical VPC Design: https://medium.com/aws-activate-startup-blog/practical-vpc-design-8412e1a18dcc


설명이 필요한 부분이나 다음 시리즈로 원하는 주제가 있으시면 댓글 달아주세요. 감사합니다 ^^

이준형 님의 창작활동을 응원하고 싶으세요?

댓글

SNS 계정으로 간편하게 로그인하고 댓글을 남겨주세요.