[AWS] IP, 그리고 VPC와 서브넷에 대해 알아보자

Loopy·2023년 3월 22일
0
post-thumbnail

1️⃣ IP에 대해 파헤쳐보자

☁️ IP 개념

IP컴퓨터 고유의 주소(Public IP) 이며, 인터넷은 바로 컴퓨터 간의 네트워크 통신을 의미한다.

🔖 Public IP 주소 대역
옥텟이란 2진수로 표현된 8자리 수를 의미하며, IP는 바로 이러한 네개의 옥텟으로 이루어져 있다. 따라서 00000000000000.00000000.00000000.00000000 부터11111111.11111111.11111111.11111111 까지의 경우의 수를
이걸 10진수로 표현하면 범위는 0.0.0.0 ~ 255.255.255.255 가 된다.

IP 주소의 구성

IP 주소는 네트워크 영역 + 호스트 영역으로 구분되어 있다. 데이터가 들어올 때 가장 먼저 컴퓨터가 속한 네트워크 영역에 들어와야 하므로 이를 찾기 위한 구분자로 맨 앞에 네트워크 주소를 표시해놓고, 특정 컴퓨터를 구분하기 위해 호스트 번호를 뒤에 위치시킨 것이다.

따라서 예시로 192.168.123.132 라는 주소가 있다 치면은 네트워크 주소는 192.168.123.0 가 되고 호스트 주소는 132 가 된다.

네트워크 주소와 브로드캐스트 주소

하지만 네크워크 주소의 맨 앞(192.168.123.0)과 맨 뒤 주소(192.168.123.255)는 사용할 수 없다. 첫 번째는 네트워크 그 자체의 주소, 두 번째는 브로드캐스트 주소이기 때문이다.

  1. 네트워크 자체 주소 : 특정 네트워크 대역을 칭하는 주소이다.
  2. 브로드캐스트 주소 : 특정 네트워크 대역에 있는 모든 호스트에게 패킷을 전달해야 할 때 사용하도록 약속되어 있는 주소이다.

네트워크와 호스트 구분점을 지정하지 않은 이유?

사실, IP 주소는 네트워크와 호스트 영역을 나누는 경계점이 고정이 되어 있지 않다. (192.168 / 123.155로 나눠질 수 있다)

IPV4 의 주소 개수는 한정적이기 때문에 호스트 주소 범위를 고정하게 되면 어떤 네트워크 대역은 주소가 부족할 수도 있고, 어떤 네트워크 대역은 주소가 남아서 낭비가 되는 상황이 발생하기 때문이다. 따라서 유연성을 위해 클래스라는 개념이 도입되었다.

클래스

클래스는 하나의 IP 주소에서 네트워크 부분과 호스트 부분을 나누는 개념이자 약속이며, 옥텟 기준으로 잘라서 구분한다.

하지만 이 역시도 클래스가 세개 밖에 없다 보니 각 클래스별로 할당할 수 있는 호스트 범위가 너무 차이가 많이 나서 사용하지 않게 된다.

  1. A 클래스 : 첫 번째 옥텟 범위가 0 ~ 127 범위
  2. B 클래스 : 첫 번째 옥텟 범위가 128 ~ 191 범위
  3. C 클래스 : 첫 번쨰 옥텟 범위가 192 ~ 223 범위

☁️ 클래스에서 CIDR로의 변화

CIDR(Classless Inter Domain Routing) 이란, 클래스가 없어도 IP 주소를 할당할 수 있는 새로운 방식이다. 선택지가 적어 필요한 호스트 주소 개수에 맞게 할당받을 수 없다는 단점을 극복하여, CIDR 에서는 네트워크와 호스트 간의 구분점을 1비트로 세분화하였다.

예를 들어, 만약에 1000 개의 호스트 주소가 필요하다면 대략 2^10=1024, 즉 뒤에서부터 10 비트까지만 호스트 영역으로 할당하면 되는 것이다.

하지만 정확한 구분 표시가 없으므로, 우리는 어떻게 네트워크와 호스트 영역을 구분할 수 있을까? 바로 서브넷 마스크를 활용하면 된다.

서브넷 마스크

서브넷 마스크란, 네트워크와 호스트 부분을 구분해주는 역할을 한다.
아래 그림처럼 서브넷 마스크는 클래스 기반에서도 존재하긴 했지만, 클래스 기반은 IP주소만 보고도 어디까지가 네트워크 영역인지 구분이 가능했기 때문에 CIDR 에서 더 중요하게 작용한다.

따라서 서브넷 마스크와 IP주소를 AND 연산했을 때 나오는 주소가 바로 네트워크 ID가 된다. 쉽게 말하면 서브넷 마스크에서의 연속된 1 까지의 부분이 네트워크 영역이고, 0 의 부분은 호스트 영역이 되는 것이다.

참고로, CIDR 표기법에서는 편리하게 보기 위하여 연속된 1의 개수/ 뒤에 표기함으로써 IP 주소와 서브넷 마스크를 한번에 내포하고 있다.

🔖 서브넷 마스크 표기 방법
IP주소와 마찬가지로 255.255.255.0 32비트로 표현한다. ( 11111111.11111111.11111111.00000000 )

2️⃣ 그래서 서브넷이 뭐야?

☁️ 사설 IP와 서브넷팅

공인 IP와 사설 IP

컴퓨터의 발달에 따라 공식적인 IP 주소가 부족하게 되면서, 사설 IP의 개념이 생겨났다. 사설 IP는 내부 통신에서만 사용하고 인터넷 통신에서는 사용하지 않는 주소를 의미한다. 즉, IP 하나의 네트워크에서 자기들끼리만 알아들을 수 있는 주소를 사용하게 된 것이다.

더불어, 공인 IP와 사설 IP를 명확하게 분리하기 위해서 특정 대역을 할당하였다.

🔖 사설 IP 주소 대역
1. 10.0.0.0 ~ 10.255.255.255 ( = 10.0.0.0/8 )
2. 172.16.0.0 ~ 172.31.255.255 ( = 172.16.0.0/12 )
3. 192.168.0.0 ~ 192.168.255.255 ( = 192.168.0.0/16 )

사설 IP 주소로는 기본적으로는 인터넷 통신을 하지 못하며, NAT 라는 문을 통한다면 공인 IP를 빌려서 인터넷 통신이 가능하게 된다. 따라서 사설 -> 외부 통신은 가능하지만, 외부 -> 사설 통신은 원칙적으로 불가능하다.

🔖 NAT(Network Address Translation)
네트워크 주소 변환을 의미한다. IPV4 주소 부족의 문제로 고안되었으며 사설 IP를 사용하는 망에서 외부의 공인망을 접속 가능하도록 네트워크의 주소를 변환하는 것을 말한다. 또한, 공개된 인터넷과 사설망 사이에 방화벽을 설치해 통신망을 보호하는 수단으로도 사용 될 수 있다.

☁️ Subnet

가정이 아닌 기업과 같이 큰 네트워크에서는 사설 IP 주소를 어떻게 분배할지, 어느 정도 범위를 할당 할지 정해야 한다. 가장 작은 사설 대역인 192.168.0.0/16만 하더라도 약 65,000개의 사설 IP 주소가 배정되기 때문에 너무 규모가 커지기 때문이다.

따라서 나온 개념이 서브넷인데, 바로 더 작은 단위의 하위 네트워크라는 의미로 사설 IP의 낭비를 막기 위해 생겨났다.

서브넷팅

서브넷팅은 이러한 큰 네트워크 대역을 작은 네트워크로 나누는 작업을 의미한다. 즉, 네트워크 성능 개선을 위해 네트워크 관리자가 효율적으로 자원을 분배하는 작업인 것이다. 위에서 말한 클래스 방식, CIDR 방식도 결국 네트워크를 쪼개는 것이므로 서브넷팅의 과정이였다고 볼 수 있다.

그리고 서브넷팅은 언급했던 서브넷 마스크를 활용하여 이루어진다. IP 주소 체계의 네트워크 ID와 호스트 ID를 분리시켜 주기 때문이다.

192.168.32.0/24

서브넷 마스크 개념을 다시 생각해보면, 자연스럽게 주어진 서브넷에 할당되는 사설 IP 수는 2^(32−서브넷마스크) 개이다. 만약 192.168.32.0/24 주소에서 서브넷팅을 통해 서브넷 마스크의 비트 수를 1 증가시켰다고 가정해보자.

기존에 한개의 서브 네트워크와 254개의 호스트 수만 할당 가능했다면, 한비트가 0/1 2가지 경우의 수가 있으므로 두개의 서브 네트워크와 126개의 호스트 수가 할당이 가능해진다.

즉 서브넷 마스크 비트를 1씩 증가시킬 수록 네트워크 수는 늘어나고, 호스트 수는 줄어들게 되는 방식으로 작은 네트워크 단위로 쪼갤 수 있다.

2️⃣ AWS에서 VPC와 서브넷

☁️ VPC 개념

VPC란, 퍼블릭 클라우드 서비스 내부에 존재하는 사용자 전용 가상 네트워크이다.

서로 다른 VPC 간에는 가는 길을 모르고, VPC 내부에는 있는 서브넷끼리는 가는 길을 알아 통신이 가능하다. VPC를 생성할 때 기본으로 라우팅 테이블이 생성되기 때문이다. (참고로 만일 VPC 간에 통신을 원한다면 VPC 피어링(peering) 서비스를 이용하면 된다.)

☁️ VPC 라우팅 테이블

우선, 라우팅은 경로를 설정하고 찾아가는 과정을 의미한다. 따라서 가장 중요한 것은 내가 "어떠한 목적지로 가기 위해 어느 길로 가야 하느냐"의 정보가 된다. 그리고 바로 이러한 라우팅 정보들을 모아놓은 곳을 라우팅 테이블(RTB)이라 한다.

예를 들어, 목적지가 라우팅 테이블에 명시되지 않은 트래픽들을 한꺼번에 라우팅 시키고 싶을 때는 0.0.0.0/0 라는 주소를 통해 전달시킬 수 있다.

라우팅 테이블

라우팅 테이블이 처음 생성되면, 해당 VPC 대역 → local 이라는 라우팅 규칙이 자동으로 생성된다. 목적지가 해당 라우팅 테이블이 속한 VPC CIDR 주소라면 내부에서 통신이 가능하다는 뜻이기 때문에 특별한 설정을 해주지 않아도 VPC 내부에서 서브넷 간의 통신이 가능하게 되는 것이다.

VPC와 인터넷 게이트웨이

인터넷 통신을 하기 위해서는, VPC가 인터넷으로 가기 위한 인터넷 게이트웨이(문)가 필요하다.

다만 주의할 점은 인터넷 게이트웨이를 생성해서 해당 VPC 에 속하게 붙여주는 것에서 끝나는 것이 아니라, 반드시 라우팅 테이블에 인터넷 게이트웨이로 가는 길을 명시해줘야 한다는 것이다.

NAT(Network Address Translation)

NAT란, IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소를 재기록하면서 라우터를 통해 네트워크 패킷을 주고 받는 기술을 의미한다. 말 그대로 주소를 변환해준다 생각하면 쉽다.

주로 사설 네트워크에 속한 호스트가, 공인 IP 주소를 이용하여 인터넷에 접속할 때 사용한다. 공유기를 지나 외부 인터넷으로 나아갈 때에는 공유기의 공인 IP를 가지고 원하는 Destination Address로 향하면 되기 때문이다.

예를 들어보자.

# Private Host 에서 출발
1. 출발지 IP 주소 : 10.0.0.1
2. 도착지 IP 주소 : 200.100.10.1
# 기본 게이트웨이에서 다시 출발
1. 출발지 IP 주소 : 10.0.0.1 -> 150.150.0.1 // 재기록 하면서 변경
2. 도착지 IP 주소 : 200.100.10.1

공유기와 같은 기본 게이트웨이에서는 외부로 나가는 패킷을 발견하면 자신의 공인 IP 로 출발지의 IP 주소를 변경해준다. 반대로 돌아올 때에는, 도착지의 IP 주소가 공인 -> 사설 IP 주소로 변하면서 적절하게 호스트에게 응답을 전달해 줄 수 있게 되는 것이다.

참고 자료
프로그래밍/Amazon AWS VPC 기본 개념 정리 - VPC를 구성하는 기본 원리
AWS-라우팅테이블Route-Table-생성-및-라우팅
아마존 공식 문서
모든 VPC 관련 자료
그림으로 쉽게 보는 IP 주소 (하)
[네트워크] 서브넷, 서브넷마스크, 서브넷팅이란? | 서브넷팅 예제
aws 가장 쉽게 vpc 개념 잡기
NAT 이란 무엇인가?

profile
개인용으로 공부하는 공간입니다. 잘못된 부분은 피드백 부탁드립니다!

0개의 댓글