포스트

IP 주소와 서브넷팅 — /24를 /26으로 쪼갠다는 게 비트 단위로 무슨 뜻인가

IPv4·IPv6 주소 체계, 서브넷 마스크와 CIDR(/24, /26) 표기, 서브넷팅 계산(네트워크·브로드캐스트·가용 호스트 수), 사설망 대역과 마스크 AND 연산을 비트 단위로 설명합니다.

IP 주소와 서브넷팅 — /24를 /26으로 쪼갠다는 게 비트 단위로 무슨 뜻인가

“10.0.1.0/24가 정확히 무슨 뜻이지?”

AWS VPC를 만들 때 10.0.0.0/16을 적고, 서브넷에 10.0.1.0/24를 적습니다. /16, /24가 “주소 범위”라는 건 어렴풋이 알지만, 왜 /24가 254개고, /24를 /26으로 쪼개면 왜 정확히 4개가 되며, 호스트가 보낸 패킷이 “같은 서브넷인지 아닌지”를 어떻게 즉석에서 판단하는지는 의외로 안 짚고 넘어갑니다.

이건 전부 비트 마스킹 하나로 설명됩니다. 앞 글에서 “브로드캐스트 도메인 = 하나의 서브넷”이라고 했는데, 이 글은 그 서브넷이 비트 단위로 무엇인지, 그리고 주소 공간을 어떻게 계층적으로 쪼개는지를 끝까지 따라갑니다. 이게 라우팅·ARP·VPC를 이해하는 토대입니다.

IPv4 주소: 32비트를 둘로 가른다

IPv4 주소는 32비트입니다. 사람이 읽기 쉽게 8비트씩 끊어 점10진(dotted decimal)으로 씁니다.

1
2
   192   .    168   .     1    .    10
11000000 . 10101000 . 00000001 . 00001010   (32비트)

핵심은 이 32비트가 네트워크부 + 호스트부로 나뉜다는 것입니다. 어디서 자르는지를 정하는 게 서브넷 마스크입니다.

  • 네트워크부: 어느 서브넷인지(같은 서브넷의 모든 호스트가 공유).
  • 호스트부: 그 서브넷 안에서 어느 장치인지.

CIDR: 마스크를 비트 개수로 — /n

옛날엔 클래스(A/B/C)로 자르는 위치가 고정이었지만, 너무 낭비라 폐기되고 CIDR(Classless Inter-Domain Routing, RFC 4632)이 표준이 됐습니다. CIDR은 “앞에서부터 몇 비트가 네트워크부인가“를 /n으로 표기합니다.

1
2
3
/24 → 앞 24비트가 네트워크부, 나머지 8비트가 호스트부
마스크: 11111111.11111111.11111111.00000000 = 255.255.255.0
호스트 비트 8개 → 2^8 = 256개 주소, 사용 가능 호스트는 256 − 2 = 254개

왜 −2 인가? 호스트부가 전부 0인 주소는 네트워크 주소(서브넷 그 자체를 가리킴), 전부 1인 주소는 브로드캐스트 주소(서브넷 전체에게)로 예약됩니다. 그래서 실제 장치에 줄 수 있는 건 (2^호스트비트 − 2)개입니다.

CIDR마스크호스트 비트총 주소사용 가능 호스트
/24255.255.255.08256254
/25255.255.255.1287128126
/26255.255.255.19266462
/27255.255.255.22453230
/30255.255.255.252242 (점대점 링크용)

같은 서브넷인가? — 마스크 AND 연산

호스트가 “목적지가 나와 같은 서브넷인가”를 판단하는 방법은 단순합니다. 내 IP와 목적지 IP에 각각 마스크를 AND 해서, 결과(네트워크 주소)가 같으면 같은 서브넷입니다. 같으면 ARP로 직접, 다르면 라우터(게이트웨이)로 보냅니다.

아래 애니메이션: IP 192.168.1.10에 마스크 /24(255.255.255.0)를 비트 AND 하면, 네트워크부(앞 24비트)는 그대로 남고 호스트부(뒤 8비트)는 전부 0으로 깎여 네트워크 주소 192.168.1.0이 추출됩니다.

IP 11000000.10101000.00000001. 00001010 192.168.1 (네트워크부 = 앞 24비트) .10 (호스트부) AND 마스크 /24 11111111.11111111.11111111. 00000000 = 네트워크 주소 11000000.10101000.00000001. 00001010 00000000 192.168.1.0 ← 호스트 비트가 전부 0으로 깎임

이 단순한 AND 연산이 라우팅의 핵심 동작입니다. 라우터도 똑같이 목적지 IP에 각 경로의 마스크를 AND 해서 일치하는 경로를 찾고, 그중 가장 긴 마스크(가장 구체적인 경로)를 택합니다 — 라우팅 글의 Longest Prefix Match입니다.

서브넷팅: /24 하나를 /26 네 개로 쪼개기

큰 블록을 작은 서브넷들로 나누는 게 서브넷팅입니다. /24(256개)를 /26(64개씩)으로 쪼개면 호스트 비트를 2개 빌려와 2^2 = 4개의 서브넷이 됩니다. 아래 애니메이션에서 하나의 /24 막대가 네 개의 /26 블록으로 갈라집니다.

10.0.1.0/24 (256개 주소) 하나의 /24 → /26 네 개 (각 64개, 사용가능 62) .0/26 .64/26 .128/26 .192/26

네 서브넷의 경계는 호스트부 6비트가 만드는 64 간격입니다.

서브넷네트워크 주소사용 가능 범위브로드캐스트
110.0.1.0/26.1 ~ .62.63
210.0.1.64/26.65 ~ .126.127
310.0.1.128/26.129 ~ .190.191
410.0.1.192/26.193 ~ .254.255
1
2
3
ipcalc 10.0.1.0/26         # Network/Broadcast/HostMin/HostMax/호스트수 한 번에
ip addr show eth0          # inet 10.0.1.10/24 ← 내 IP와 prefix 길이
ip route get 8.8.8.8       # 이 목적지로 갈 때 어느 인터페이스/게이트웨이를 쓰는지

이 발상이 그대로 AWS VPC입니다: 10.0.0.0/16 VPC를 만들고, AZ별로 /24 서브넷을 잘라 퍼블릭/프라이빗으로 나눕니다 — 자세한 건 VPC 글에서.

사설 IP와 특수 대역 (RFC 1918)

공인 IPv4는 유한해서, 내부망은 사설 대역(RFC 1918)을 쓰고 인터넷으로 나갈 때 NAT로 공인 IP로 바꿉니다.

대역범위크기
10.0.0.0/810.0.0.0 ~ 10.255.255.2551670만 (대규모·클라우드 VPC)
172.16.0.0/12172.16.0.0 ~ 172.31.255.255104만
192.168.0.0/16192.168.0.0 ~ 192.168.255.2556.5만 (가정용 공유기)
127.0.0.0/8루프백 (localhost)—
169.254.0.0/16링크-로컬(APIPA). 클라우드 메타데이터(169.254.169.254)도 여기—

IPv6: 32비트가 부족해서 128비트로

IPv4 주소(약 43억 개)는 이미 고갈됐습니다(IANA 2011년 소진). 근본 해법이 IPv6입니다 — 32비트 → 128비트(약 3.4×10^38개, 지구 모래알보다 많음).

1
2
2001:0db8:0000:0000:0000:ff00:0042:8329
→ 2001:db8::ff00:42:8329   (앞 0 생략, 연속 0 블록은 :: 한 번)
  • 표기: 16비트씩 8그룹, 콜론 구분. 각 그룹 앞 0 생략, 연속 0 그룹은 ::로 한 번 압축.
  • 앞 64비트 = 네트워크 프리픽스, 뒤 64비트 = 인터페이스 ID(보통 /64가 한 서브넷). 서브넷 하나에 2^64개 — 사실상 무한.
  • 브로드캐스트가 없고 멀티캐스트/애니캐스트로 대체. NAT 없이 모든 장치가 공인 주소를 가질 수 있어 end-to-end 연결성이 복원됩니다.
  • 전환기에는 IPv4/IPv6 듀얼 스택으로 공존.
1
2
ip -6 addr show            # IPv6 주소 확인 (fe80::/10 = 링크-로컬)
ping6 2001:4860:4860::8888 # 구글 공개 IPv6 DNS

프로덕션 함정

  • 서브넷 겹침(overlap): 두 네트워크가 같은 CIDR을 쓰면(예: 양쪽 다 192.168.1.0/24) VPN/피어링 시 라우팅이 충돌합니다. VPC 설계 시 대역을 미리 겹치지 않게 할당해야 합니다.
  • 너무 작게 자른 서브넷: /28(14개)로 쪼갰다가 오토스케일로 IP가 모자라는 경우. 클라우드는 게이트웨이·예약 IP까지 빼가므로 여유를 둬야 합니다(AWS는 서브넷당 5개를 예약).
  • off-by-one 계산 실수: 네트워크/브로드캐스트 주소를 호스트에 할당하는 실수. ipcalc로 항상 검산하세요.

면접/리뷰 단골 질문

  • Q. /26은 호스트가 몇 개? → 호스트 비트 6개 → 64주소 − 2(네트워크·브로드캐스트) = 62개.
  • Q. 호스트가 같은 서브넷인지 어떻게 판단하나? → 내 IP와 목적지 IP에 마스크를 각각 AND 해 네트워크 주소가 같은지 본다. 같으면 직접(ARP), 다르면 게이트웨이로.
  • Q. /24를 /26으로 쪼개면 몇 개? → 호스트 비트 2개를 빌리니 2^2 = 4개 서브넷.
  • Q. IPv6가 필요한 이유는? → IPv4 32비트(43억)는 고갈. 128비트로 사실상 무한 + NAT 없는 end-to-end 복원.
  • Q. 네트워크 주소와 브로드캐스트 주소는? → 호스트부가 전부 0이면 네트워크 주소, 전부 1이면 브로드캐스트 주소. 둘 다 호스트에 할당 불가.

정리

  • IPv4 32비트 = 네트워크부 + 호스트부, 자르는 위치를 CIDR /n(= 서브넷 마스크)이 정한다.
  • 사용 가능 호스트 = 2^호스트비트 − 2(네트워크·브로드캐스트 예약).
  • “같은 서브넷인가”는 마스크 AND 한 줄로 판단 — 라우팅의 Longest Prefix Match와 같은 원리.
  • 서브넷팅 = 호스트 비트를 빌려 큰 블록을 작은 서브넷들로 쪼개기. AWS VPC 설계가 곧 이것.
  • 사설 대역(RFC 1918) + NAT로 IPv4를 버티고, 근본 해법은 IPv6 128비트.

다음 글: 다른 서브넷으로 나간 패킷이 전 세계 라우터를 어떻게 건너가는지 — 라우팅과 BGP. 그리고 같은 서브넷 안에서 IP를 MAC으로 바꾸는 ARP가 이어집니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

시리즈 · 네트워크 A-Z (20편)

  1. 네트워크란 무엇인가 — 회선 교환 vs 패킷 교환, 왜 인터넷은 패킷을 선택했나
  2. OSI 7계층과 TCP/IP — 왜 네트워크를 굳이 층으로 쪼갰나
  3. 이더넷·MAC·스위치 — 스위치는 어떻게 "어느 포트로 보낼지" 스스로 배우나
  4. IP 주소와 서브넷팅 — /24를 /26으로 쪼갠다는 게 비트 단위로 무슨 뜻인가 지금 보는 글
  5. 라우팅은 어떻게 길을 찾나 — 라우팅 테이블, Longest Prefix Match, 그리고 BGP
  6. ARP와 L2/L3 경계 — IP는 아는데 왜 MAC을 또 묻나
  7. TCP는 어떻게 신뢰를 만드나 — 3-way handshake, 상태 머신, 그리고 TIME_WAIT
  8. TCP는 얼마나 빨리 보낼까 — 흐름 제어 vs 혼잡 제어, 그리고 톱니파의 비밀
  9. UDP와 QUIC — TCP를 버려야 더 빨라지는 순간
  10. DNS는 어떻게 이름을 주소로 바꾸나 — 루트부터 권한 서버까지, 그리고 캐시의 마법
  11. HTTP의 진화 — 1.1의 줄 서기에서 HTTP/2 멀티플렉싱, HTTP/3까지
  12. TLS/HTTPS는 어떻게 도청 불가능한 채널을 만드나 — 핸드셰이크부터 인증서 체인까지
  13. NAT와 사설망 — 주소 하나로 수백 대가 인터넷을 쓰는 법, 그리고 P2P가 막히는 이유
  14. 로드 밸런싱 — L4와 L7은 무엇이 다르며, 왜 헬스체크가 서비스를 살리고 죽이나
  15. 프록시·리버스 프록시·CDN — 콘텐츠를 사용자 코앞으로 옮기는 기술
  16. 방화벽·보안그룹·네트워크 ACL — stateful과 stateless가 가르는 모든 것
  17. VPC & 클라우드 네트워킹 — 라우팅 테이블 한 줄이 퍼블릭과 프라이빗을 가른다
  18. 소켓과 커널 네트워크 스택 — accept 한 줄 뒤에서 벌어지는 일
  19. 네트워크 성능 — 대역폭은 왜 빠름이 아닌가 (RTT·BDP·처리량의 진실)
  20. 현대 네트워킹 — 사이드카, eBPF, 그리고 경계가 사라진 신뢰