Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

Subnet에 대해서

네트워크는 거대하다. 인터넷에 연결된 모든 컴퓨터가 통신을 해야 하니, 충분히 커야 할 수 밖에 없다. IPv4의 주소의 크기는 2^32는 이므로 단순히 계산하면 40억(4,294,967,296)의 컴퓨터에게(정확하게는 네트워크 인터페이스이지만 그냥 컴퓨터라고 하겠다.)유일한 IP 주소를 줄 수 있다.

매우 거대하기 때문에 국가, 회사, 학교는 이 네트워크를 작은 단위로 나누어서 사용한다. 이 작은 네트워크를 서브넷이라고 한다. 같은 서브넷에 있는 컴퓨터들은 같은 접두사를 가진다. 예를들어 192.16.0.xxx 와 같은 식이다. 이렇게 같은 서브넷에 있는 컴퓨터들은 단순한 스위치로 직접 통신 할 수 있다. 같은 서브넷에 있는 컴퓨터들은 물리적으로 다른 컴퓨터와 직접 이어져 있다고 보면 된다. 서브넷간의 통신은 라우터가 개입한다. A-서브넷에 있는 컴퓨터는 B-서브넷에 있는 컴퓨터와 물리적으로 떨어져 있기 때문에 직접 패킷을 라우팅 할 수 없기 때문이다.

IP 주소에 대해서

IP(Internet Protocol) Address는 ISO/OSI 모델의 3계층에 자리하고 있는 프로토콜이다. IP Address를 이용해서 인터넷에서 다른 컴퓨터와 통신을 할 수 있다. IP 주소는 매우 크기 때문에 관리를 편하게 하기 위해서 4자리의 10진수로 나눠서 표시한다. 우리가 흔히 보는 12.39.1.36 과 같은 식이다. 4자리로 나눴기 때문에 각 자리는 8bit(32/4 = 8)의 크기를 가진다. 따라서 IP 주소 범위는 0.0.0.0 ~ 255.255.255.255 가 된다. 이들 주소는 중복되면 안되기 때문에 IANA(Internet Assigned Number Authority)에서 관리한다.

IP 주소의 구성요소들

기본적으로 IP 주소는 network-identifying prefix(network-prefix)host address 두 개로 구성된다. network-identifying prefix는 말 그대로 (여러 개의 컴퓨터로 연결된)네트워크를 식별 하기 위해서 사용하며, host address는 해당 네트워크에 있는 노드를 식별하기 위해서 사용한다. 네트워크 엔지니어는 network-identifying prefix 와 host address 를 이용해서 네트워크를 여러 개의 서브넷으로 나눠서 사용 할 수 있다. 아래 그림을 보자.

 subnet 개념

joinc.com 회사에 52.122 주소가 할당됐다. 52.122(16bit)가 network prefix이므로, 나머지가 host address가 된다. host address 는 16bit 크기이므로 약 65536개의 컴퓨터에 IP를 할당 할 수 있다.

이 서브넷은 너무 크다. 브로드캐스트 영역도 넓어지고 관리하기도 힘들어진다. 예를들어 이 회사는 영업팀과 개발팀, 보안팀으로 구성이 될 건데, 이들을 하나의 네트워크로 묶어서는 제대로 관리를 할 수 없을 것이다. 회사의 네트워크 관리자는 아래와 같이 서브넷을 할 수 있다.

 Subnet 개념 - 1

이제 하나의 거대한 네트워크를 256개의 네트워크로 쪼갤 수 있게 됐다. 이 네트워크를 팀에게 할당하면, 팀은 256개까지의 컴퓨터를 사용 할 수 있다. 위의 경우 8bit 크기로 서브넷을 만들었지만 1bit, 2bit ... 비트단위로 쪼갤 수 있다. 예를 들어 2bit를 사용한다면 4개의 네트워크를 사용 할 수 있을 것이다. 문서 뒤에 subnet 계산기로 직접 연습해볼 것이다.

네트워크 아이디

서브넷의 첫번째 주소는 네트워크 아이디(Network ID)다. 이 주소는 서브넷을 식별하기 위해서 사용한다.

브로드캐스트 주소

서브넷의 마지막 주소는 브로드캐스트 주소다. 이 주소는 컴퓨터가 사용 할 수 없다. 이 주소로 데이터를 보내면, 서브넷의 모든 호스트로 전송된다. 예를들어 192.168.0.255 가 브로드캐스트 주소가 된다. 역시 subnet 계산기로 연습해 볼 것이다. 이정도에서 넘어가자.

호스트 주소(Host Address)

네트워크 아이디와 브로드캐스트 주소를 제외한 나머지 주소는 호스트 주소다. 192.168.0.12/30주소로 호스트 주소를 계산해 보자. 이 서브넷은 4개의 주소를 가질 수 있지만 브로드캐스트 주소와 Network ID가 빠지므로 2개의 주소만 사용 할 수 있다.

IP Address Binary Address Type
192.168.0.12 11000000.10101000.00000000.000011 00 Network ID
192.168.0.13 11000000.10101000.00000000.000011 01 Host Address
192.168.0.14 11000000.10101000.00000000.000011 10 Host Address
192.168.0.15 11000000.10101000.00000000.000011 10 Broadcast Address
여기에서 "152.0.12/30"이라는 표현법이 나왔는데, 바로 살펴보도록 하겠다.

서브넷 마스크

IP 주소는 네트워크 부분과 호스트 부분으로 나뉜다고 했다. 서브넷 마스크를 이용해서 어떤 부분이 네트워크인지, 호스트인지를 알려준다. 라우터는 네트워크 부분을 이용해서 라우팅을하며, 호스트 영역은 서브넷 내에서만 사용된다. IPv4의 서브넷 마스크는 32비트로 구성되며 10진수로 표시한다. 서브넷 마스크의 예는 255.255.255.0 이다.

네트워크 클래스

IP 주소는 5개의 클래스를 가지고 있다. 규모와 목적에 따라서 네트워크를 할당하기 위해서 사용하고 있다.
Class significant bits address range mask CIDR mask 비고
A Class 0xxx 0-127.x.x.x 255.0.0.0 /8 일반 주소
B Class 10xx 128-191.x.x.x 255.255.0.0 /16 일반 주소
C Class 110x 192-223.x.x.x 255.255.255.0 /24 일반 주소
D Class 1110 224-239.x.x.x /24 멀티 캐스트
E Class 1111 240-255.x.x.x /24 예비
IP 주소의 가장 앞부분의 비트 값을 이용해서 클래스를 나누는 것을 알 수 있다. 클래스만 가지고 네트워크를 디자인하는 것은 비효율적이고 확장성이 떨어지기 때문에, VLSM과 CIDR을 이용하는 네트워크 설계가 개발되었다. 클래스를 사용하지 않는다고 해서 클래스리스 네트워크라고 한다.

CIDR

서브넷 마스크를 더 짧고 쉽게 사용하기 위해서 CIDR(Classless Inter-Domain Routing)표기를 사용한다. 슬래쉬(/)문자를 기준으로 앞부분에 IP를 쓰고 뒷 부분에 서브넷 마스크의 비트수를 표기한다. 서브넷 마스크가 255.255.255.240이고 IP주소가 192.168.100.25 라면 서브넷 마스크의 바이너리 값은 11111111.11111111.11111111.11110000이므로 CIDR 표현은 192.168.100.25/28이다.

CIDR은 "시아이디알" 혹은 "사이더"라고 부른다.

VLSM

VLSM(Variable Length Subnet Mask - 가변길이 서브넷 마스크)는 CIDR을 기반으로 한다. Class C 주소를 할당할 경우 256개 호스트 주소를 사용 할 수 있으나 이 보다 작은 수의 주소만이 필요할 때, 더 적은 주소를 할당하도록 해서 주소의 낭비를 막는다. 큰 규모의 조직이 여러 작은 조직과 프로젝트로 구성될 때, 유용하게 사용 할 수 있다. 예를 들어 /16 서브넷 마스크로 나눈 네트워크를 다시 /24로 나누고 이를 다시 /27 서브넷 마스크로 추가적으로 나눌 수 있다.

슈퍼넷

VLSM과 CIDR로 쪼개진 네트워크를 묶기 위해서(aggregation)사용한다. 이렇게 묶은 하나의 네트워크를 슈퍼넷이라고 한다. 192.168.0.0/24 와 152.12.1.0/24 두 개의 서브넷의 슈퍼넷은 152.12.0.0/23 이다.

서브넷 계산기

일반 예제

예제는 우분투 리눅스 운영체제를 기준으로 한다. 서브넷 계산기를 이용해서 네트워크를 설계해 보자. sipcalc와 ipcalc를 설치한다.
# apt-get install sipcalc
# apt-get install ipcalc
앞서 예재로 다루었던 192.168.0.12/30주소를 ipcalc로 분석해보자.
# ipcalc 192.168.0.12/30
Address:   192.168.0.12         11000000.10101000.00000000.000011 00
Netmask:   255.255.255.252 = 30 11111111.11111111.11111111.111111 00
Wildcard:  0.0.0.3              00000000.00000000.00000000.000000 11
=>
Network:   192.168.0.12/30      11000000.10101000.00000000.000011 00
HostMin:   192.168.0.13         11000000.10101000.00000000.000011 01
HostMax:   192.168.0.14         11000000.10101000.00000000.000011 10
Broadcast: 192.168.0.15         11000000.10101000.00000000.000011 11
Hosts/Net: 2                     Class C, Private Internet
  • NetMask : /30은 네트워크 30비트가 1이라는 의미다. 해서 11111111.11111111.11111111.11111100 이된다. 이 값은 255.255.255.252 다.
  • 호스트 주소로 2개 비트를 사용 할 수 있으므로 192.168.0.12, .13, .14, .154개의 주소를 사용 할 수 있다. 여기에서 네트워크 ID와 브로드캐스트 주소를 빼고나면 13, 14 2개 주소를 사용 할 수 있다.
같은 주소를 sipcalc로 분석해보자.
# sipcalc 52.122.0.12/30
-[ipv4 : 52.122.0.12/30] - 0

[CIDR]
Host address		- 52.122.0.12
Host address (decimal)	- 880410636
Host address (hex)	- 347A000C
Network address		- 52.122.0.12
Network mask		- 255.255.255.252
Network mask (bits)	- 30
Network mask (hex)	- FFFFFFFC
Broadcast address	- 52.122.0.15
Cisco wildcard		- 0.0.0.3
Addresses in network	- 4
Network range		- 52.122.0.12 - 52.122.0.15
Usable range		- 52.122.0.13 - 52.122.0.14

슈퍼넷 예제

10.100.0.0/16 네트워크를 관리하고 있다. 개발-A 팀에 4개의 /27 크기의 서브넷을 할당해보자.
  • 호스트 주소의 크기는 5bit로 32개의 주소를 할당 할 수 있다.
  • Network ID는 0, 32, 64, 96, 128 ... 이 될 것이다. 128 부터 할당하기로 했다.
    sipcalc  10.100.0.128/27
    
    -[ipv4 : 10.100.0.128/27] - 0
    
    [CIDR]
    Host address		- 10.100.0.128
    Host address (decimal)	- 174325888
    Host address (hex)	- A640080
    Network address		- 10.100.0.128
    Network mask		- 255.255.255.224
    Network mask (bits)	- 27
    Network mask (hex)	- FFFFFFE0
    Broadcast address	- 10.100.0.159
    Cisco wildcard		- 0.0.0.31
    Addresses in network	- 32
    Network range		- 10.100.0.128 - 10.100.0.159
    Usable range		- 10.100.0.129 - 10.100.0.158
  • 따라서 개발-A팀에는 아래 4개의 서브넷이 할당 될 것이다.
    • 10.100.0.128/27
    • 10.100.0.160/27
    • 10.100.0.192/27
    • 10.100.0.224/27
관리를 위해서 4개의 서브넷을 슈퍼넷으로 묶기로 했다. 4개의 서브넷은 2개의 비트로 묶을 수 있으므로 10.100.0.128/25가 될 것이다.
# sipcalc  10.100.0.128/25

-[ipv4 : 10.100.0.128/25] - 0

[CIDR]
Host address		- 10.100.0.128
Host address (decimal)	- 174325888
Host address (hex)	- A640080
Network address		- 10.100.0.128
Network mask		- 255.255.255.128
Network mask (bits)	- 25
Network mask (hex)	- FFFFFF80
Broadcast address	- 10.100.0.255
Cisco wildcard		- 0.0.0.127
Addresses in network	- 128
Network range		- 10.100.0.128 - 10.100.0.255
Usable range		- 10.100.0.129 - 10.100.0.254
잘 묶인 것 같다. AWS에 이 네트워크를 구성하기로 했다. 아래와 같은 그림이 될 것이다.

 VPC Supernet

좀 더 복잡스러운 네트워크

하나의 큰 팀과 두 개의 작은 팀으로 구성된 팀을 위해서 100.100.0.0/24 네트워크를 할당한다. 아래와 같이 서브넷 계획을 수립했다.
  • /25 크기의 네트워크 두개로 나눈다.
  • 하나는 큰 팀에 할당하고
  • 다른 하나는 두개로 나눠서 다른 두 팀에 할당한다.
sipcalc로 계산해보자.
# sipcalc 10.100.0.0/25
-[ipv4 : 10.100.0.0/25] - 0

[CIDR]
Host address		- 10.100.0.0
Host address (decimal)	- 174325760
Host address (hex)	- A640000
Network address		- 10.100.0.0
Network mask		- 255.255.255.128
Network mask (bits)	- 25
Network mask (hex)	- FFFFFF80
Broadcast address	- 10.100.0.127
Cisco wildcard		- 0.0.0.127
Addresses in network	- 128
Network range		- 10.100.0.0 - 10.100.0.127
Usable range		- 10.100.0.1 - 10.100.0.126

10.100.0.0/25 네트워크의 범위는 10.100.0.0 - 10.100.0.127 이다. 따라서 다른 네트워크는 10.100.0.128/25가 될 것이다.
# sipcalc 10.100.0.128/25
..... 생략
Network range		- 10.100.0.128 - 10.100.0.255
Usable range		- 10.100.0.129 - 10.100.0.254

128/25 네트워크는 다시 2개로 나누기로 했다. /26으로 하면 될 것이다.
# sipcalc 10.100.0.128/26

... 생략
Cisco wildcard		- 0.0.0.63
Addresses in network	- 64
Network range		- 10.100.0.128 - 10.100.0.191
Usable range		- 10.100.0.129 - 10.100.0.190

#  sipcalc 10.100.0.192/26

.... 생략
Cisco wildcard		- 0.0.0.63
Addresses in network	- 64
Network range		- 10.100.0.192 - 10.100.0.255
Usable range		- 10.100.0.193 - 10.100.0.254

이 네트워크는 아래와 같을 것이다.

 네트워크 구성

팀에 할당된 각 네트워크는 필요에 따라 서브넷으로 나눠서 관리하면 된다. 10.100.0.0/25를 4개의 서브넷으로 나누자. 4개의 비트는 /2로 표현되므로 4개의 /27 서브넷으로 나눌 수 있다.
CIDR 네트워크 범위
10.100.0.0/27 10.100.0.0 - 10.100.0.31
10.100.0.32/27 10.100.0.32 - 10.100.0.63
10.100.0.64/27 10.100.0.64 - 10.100.0.95
10.100.0.96/27 10.100.0.96 - 10.100.0.127
다른 팀들은 할당된 /26 네트워크를 두개의 서브넷으로 나눠서 사용하기로 했다. /1 네트워크로 표현할 수 있으므로 /27 서브넷으로 나누면 될 것이다. 팀-A(10.100.0.128/26) 팀-B(10.100.0.192/26)이라고 하면

CIDR 네트워크 범위
10.100.0.128/27 10.100.0.128 - 10.100.0.159
10.100.0.160/27 10.100.0.160 - 10.100.0.191
CIDR 네트워크 범위
10.100.0.192/27 10.100.0.192 - 10.100.0.223
10.100.0.224/27 10.100.0.224 - 10.100.0.255
가 될 것이다.

CIDR을 이용한 서브넷 작업은 그냥 "바이너리 연산"이라고 생각하면 된다.

VPC ADD

아래와 같은 시나리오를 생각해보자.
  • 팀-B는 10.100.0.192/27, 10.100.0.224/27 두 개의 서브넷을 가진 VPC로 작업을 하고 있다.
  • 그런데 서브넷이 추가로 필요해서 네트워크 관리자에게 요청했다.
  • 네트워크 관리자는 사용 할 수 있는 네트워크가 없어서 10.100.1.0/27, 10.100.1.32.0/27 두 개의 네트워크를 추가로 할당하기로 했다.
Edit CIDR을 이용해서 CIDR을 추가(ADD)할 수 있다.

 Edit CIDRs

작업을 할 VPC를 선택하고 Edit CIDRs를 클릭한다.

10.110.1.0/26 CIDR을 추가했다. 이제 10.100.1.0/27, 10.100.1.32/27 서브넷을 추가 할 수 있을 것이다.

VPC CIDRs에 10.100.1.0/26이 보인다. 10.100.1.0/27을 추가하면 된다.

정리

  • CIDR은 별 거 없다. 그냥 비트 연산이다.
  • 별 거 없는데, 헷갈리는 녀석이다.