it-box

IPv4 서브넷 계산을 손으로 하는 법 (/24, /26, /30)

CIDR 표기에서 호스트 수, 네트워크와 브로드캐스트 주소를 계산하는 순서를 예제와 함께 정리하고, 사설 대역과 VPC 서브넷을 나눌 때 자주 틀리는 부분을 짚습니다.

VPC 서브넷을 나누다 생기는 충돌

클라우드에서 VPC를 새로 만들 때 10.0.0.0/16을 받아 서브넷을 여러 개로 나누는 일이 흔합니다. 이때 두 명이 각자 10.0.1.0/24를 만들거나, 한쪽은 /26으로 나누고 다른 쪽은 /24로 나누면 대역이 겹칩니다. 겹친 대역은 피어링이나 VPN을 연결하는 순간 라우팅 충돌로 드러나기 때문에, 계산 단계에서 잡는 편이 훨씬 싸게 듭니다.

서브넷 계산은 계산기로 한 번 확인하는 것이 가장 빠르지만, 계산 원리를 알고 있어야 입력 실수나 잘못된 결과를 알아챌 수 있습니다. 이 글은 CIDR 표기를 읽는 방법부터 시작해 손계산 예제, 사설 대역의 범위, 그리고 실무에서 자주 생기는 실수를 차례로 다룹니다.

CIDR 표기 읽기

10.20.30.64/26은 IPv4 주소 32비트 중 앞의 26비트가 네트워크 부분이고, 나머지 6비트가 호스트 부분이라는 뜻입니다. 슬래시 뒤의 숫자는 네트워크 비트 수입니다. 이 숫자가 작을수록 블록이 커집니다.

호스트 비트가 n개이면 주소의 개수는 2^n개입니다. 이 중 맨 앞 주소는 네트워크 주소, 맨 뒤 주소는 브로드캐스트 주소로 예약되므로 일반 호스트가 쓸 수 있는 주소는 2^n - 2개입니다.

CIDR 호스트 비트 전체 주소 사용 가능 주소
/24 8 256 254
/26 6 64 62
/30 2 4 2

이 표는 일반적인 계산 규칙이며, /31과 /32는 점대점 링크 등에 쓰는 예외 규칙이 있으므로 여기서는 다루지 않습니다.

손계산 예제: 10.20.30.100/26

IP 주소 10.20.30.100을 /26으로 계산하는 과정을 단계별로 적습니다.

  1. 마지막 옥텟 100을 2진수로 바꿉니다. 100은 01100100입니다.
  2. /26의 마스크는 마지막 옥텟에서 앞 두 비트만 1입니다. 즉 11000000(10진수 192)입니다.
  3. 두 값을 AND 연산하면 01100100 & 11000000 = 01000000이고, 10진수로 64입니다.
  4. 네트워크 주소는 10.20.30.64입니다. 블록 크기는 2^6 = 64이므로, 브로드캐스트 주소는 64 + 63 = 127입니다. 즉 10.20.30.127입니다.
  5. 사용 가능한 범위는 네트워크 다음 주소인 10.20.30.65부터 브로드캐스트 앞 주소인 10.20.30.126까지입니다. 호스트 수는 62개입니다.

입력한 주소 100은 네트워크 주소가 아니지만, 이 주소가 속한 블록은 10.20.30.64/26입니다. IPv4 서브넷 계산기에 10.20.30.100/26을 넣으면 같은 네트워크 주소, 브로드캐스트 주소, 첫 번째와 마지막 호스트 주소가 나옵니다. 계산기가 보여 주는 값을 이 손계산과 대조하면 입력 실수를 쉽게 찾을 수 있습니다.

작은 블록 예제: 192.168.1.8/30

/30은 점대점 연결처럼 호스트 두 개만 필요한 곳에서 씁니다. 192.168.1.8/30은 다음과 같이 계산됩니다.

네트워크 주소:   192.168.1.8
첫 번째 호스트:  192.168.1.9
마지막 호스트:   192.168.1.10
브로드캐스트:    192.168.1.11
전체 주소 수:    4
사용 가능 수:    2

블록 크기가 4이므로 네트워크 주소는 4의 배수 위치에 있어야 합니다. 192.168.1.10/30처럼 4의 배수가 아닌 주소를 네트워크 주소라고 적으면, 실제로는 192.168.1.8/30 블록에 속한 주소가 됩니다.

사설 대역의 범위

RFC 1918에 정의된 사설 IPv4 대역은 세 개입니다. 이 대역은 인터넷에서 라우팅되지 않으므로 내부망과 VPC에서 주로 씁니다.

  • 10.0.0.0/8: 10.0.0.0부터 10.255.255.255까지입니다.
  • 172.16.0.0/12: 172.16.0.0부터 172.31.255.255까지입니다. 두 번째 옥텟이 16에서 31 사이인 주소만 해당합니다. 172.32.0.1은 이 대역이 아닙니다.
  • 192.168.0.0/16: 192.168.0.0부터 192.168.255.255까지입니다.

같은 계산 로직으로 확인한 결과는 다음과 같습니다.

10.0.0.0/8       brd 10.255.255.255   first 10.0.0.1     last 10.255.255.254
172.16.0.0/12    brd 172.31.255.255   first 172.16.0.1   last 172.31.255.254
192.168.0.0/16   brd 192.168.255.255  first 192.168.0.1  last 192.168.255.254

범위 확장기로 시작과 끝 주소 다루기

가끔은 CIDR이 아니라 시작 주소와 끝 주소로 범위가 주어집니다. IPv4 범위 확장기는 두 주소를 넣으면 그 범위를 덮는 CIDR 블록을 계산하고, 입력 범위의 주소 수와 블록의 주소 수를 함께 보여 줍니다.

예를 들어 192.168.1.9부터 192.168.1.10까지는 주소가 2개입니다. 그러나 이 범위를 CIDR 하나로 표현하면 192.168.1.8/30이 되고, 블록의 주소는 4개입니다. 즉 정렬되지 않은 범위는 CIDR 하나로 정확히 표현할 수 없고, 더 큰 블록으로 넓어집니다. 방화벽 규칙에 이 값을 그대로 넣으면 원래 허용하지 않은 주소까지 열리므로, 범위 확장 결과와 원래 범위를 반드시 비교해야 합니다.

주소 표기 변환

IPv4 주소를 10진수, 16진수, 2진수로 바꾸어야 하는 경우도 있습니다. 예를 들어 192.168.10.1은 IPv4 주소 변환기에서 다음과 같이 나옵니다.

Decimal:        3232238081
Hexadecimal:    C0A80A01
Binary:         11000000101010000000101000000001
Ipv6:           0000:0000:0000:0000:0000:ffff:c0a8:0a01
Ipv6 (short):   ::ffff:c0a8:0a01

10진수 3232238081은 네 옥텟을 256 진법으로 합친 값입니다. 계산하면 192 × 256³ + 168 × 256² + 10 × 256 + 1이며, 16진수 C0A80A01은 각 옥텟을 두 자리 16진수로 이어 붙인 값입니다. 로그나 방화벽 규칙에 정수 형태로 저장된 주소를 볼 때 이 변환이 필요합니다.

흔한 실수

  • 호스트 수와 사용 가능 수를 혼동합니다. /24는 256개 주소가 있지만 일반 호스트는 254개를 씁니다.
  • AWS 같은 클라우드는 서브넷마다 일부 주소를 예약합니다. AWS 문서에 따르면 각 서브넷의 처음 네 개 주소와 마지막 한 개 주소는 사용할 수 없습니다. 따라서 /24는 251개, /28은 11개만 쓸 수 있습니다. 이 값은 계산기의 호스트 수보다 적습니다.
  • 주소 경계를 맞추지 않고 나눕니다. 10.0.1.100/26은 블록 경계에 맞지 않으므로 실제 네트워크 주소는 10.0.1.64/26입니다. 설계 문서에 적힌 대역과 실제 설정이 다르게 보이는 원인이 됩니다.
  • 사설 대역끼리 충돌을 확인하지 않습니다. 기존 VPC와 사무실 망이 같은 10.0.0.0/16을 쓰면 연결 후에 라우팅이 깨집니다.
  • 서브넷을 너무 작게 잡습니다. 컨테이너나 노드가 늘어나는 환경에서는 /28이나 /27로 나누면 금방 주소가 모자랍니다.

점검 목록

  • CIDR의 네트워크 비트 수와 호스트 수를 먼저 계산합니다.
  • 입력한 주소가 블록의 네트워크 주소인지, 아니면 그 블록 안의 주소인지 확인합니다.
  • 브로드캐스트 주소와 첫 번째, 마지막 사용 가능 주소를 계산기와 대조합니다.
  • 클라우드 서브넷이라면 예약 주소를 뺀 실제 사용 가능 수를 계산합니다.
  • 기존 VPC, 사무실 망, VPN 대상과 대역이 겹치지 않는지 확인합니다.
  • 시작과 끝 주소로 받은 범위를 CIDR로 바꿀 때 넓어지는 부분이 없는지 확인합니다.
  • 방화벽이나 라우팅 규칙에는 계산된 네트워크 주소를 적고, 원래 입력 주소를 그대로 쓰지 않습니다.

관련 도구