핵심 인사이트 (3줄 요약)

  1. 본질: 서브네팅(Subnetting)은 통신사로부터 통째로 받아온 커다란 하나의 네트워크(IP 대역)를, 회사의 부서별(영업, 인사, 개발)로 브로드캐스트 도메인을 분리하고 보안을 강화하기 위해 여러 개의 '작은 네트워크(Sub-network)'로 쪼개는 기술이다.
  2. 비트 빌려오기 (Borrowing Bits): IP 주소의 구조 [네트워크 ID + 호스트 ID]에서, 스위치가 호스트 ID(집 번호) 부분의 앞쪽 비트 몇 개를 뺏어와(Borrow) 서브넷 ID(소동네 번호)로 써버림으로써 큰 덩어리를 2토막, 4토막, 8토막으로 칼질한다.
  3. AND 연산의 마법: 컴퓨터나 라우터는 복잡한 계산 없이 자기 IP 주소와 서브넷 마스크를 이진수로 나란히 두고 논리곱(AND) 연산만 한 번 때리면, 자기가 속한 동네의 대표 번호(Network Address)가 무엇인지 0.001초 만에 기계적으로 찾아낸다.

Ⅰ. 개요 및 필요성 (Context & Necessity)

  • 개념: IP 주소 공간을 더 작은 논리적 네트워크 단위(서브넷)로 분할하는 과정. 호스트 비트의 일부를 네트워크 비트로 편입시키는 작업이다.

  • 필요성: 내가 192.168.1.0/24 (256대 연결 가능) 대역을 하나 받았다. 근데 영업부 100대, 인사부 100대를 그냥 큰 덩어리에 다 꽂아버리면? 영업부 PC가 날리는 쓸데없는 ARP 방송(브로드캐스트)을 인사부 PC까지 다 받아서 처리하느라 전체 CPU가 버벅대고 통신이 마비(Broadcast Storm)된다. 또한 영업부와 인사부 사이에 방화벽(보안)을 칠 수도 없다. 이를 막으려면 라우터를 하나 두고 양쪽을 아예 남남(다른 네트워크)으로 찢어놔야 한다.

  • 💡 비유: 서브네팅은 256명이 밥을 먹는 **"거대한 통짜 연회장"**을 리모델링하는 것과 같습니다. 벽(라우터)을 하나 세워서 연회장을 **"두 개의 128인용 룸"**으로 쪼개면(서브네팅), A룸에서 소리(브로드캐스트)를 질러도 B룸은 조용히 밥을 먹을 수 있고, 문에 경호원(방화벽)을 세워 서로 맘대로 오가지 못하게 막을 수도 있습니다.

📢 섹션 요약 비유: 서브네팅은 커다란 피자 한 판을 그냥 들고 먹지 않고, 칼(서브넷 마스크 비트)을 가져와 2조각, 4조각, 8조각으로 정확히 등분하여 나누어주는(분할) 완벽한 칼질 기술입니다.


Ⅱ. 서브네팅의 수학적 연산과 호스트 개수 산출 (Deep Dive)

1. 비트 뺏어오기와 서브넷 생성

기본 C 클래스 192.168.1.0/24 (서브넷 마스크 255.255.255.0)를 2개의 부서로 쪼개고 싶다.

  • 호스트에게 주어진 8비트(00000000) 중 맨 앞 1비트를 뺏어와서 네트워크 몫으로 넘긴다.
  • 이제 서브넷 마스크의 '1'은 24개에서 25개로 늘었다 (/25). 마스크 값은 255.255.255.128이 된다.
  • 뺏어온 1비트는 01 두 가지 경우의 수를 가지므로, 정확히 2개의 서브넷이 탄생한다.
    • 서브넷 1 (0번 방): 192.168.1.0 ~ 127
    • 서브넷 2 (1번 방): 192.168.1.128 ~ 255

2. 가용 호스트(Usable Host) 계산 공식: $2^n - 2$

방 하나(서브넷)를 만들었으면, 그 방에 컴퓨터(호스트)를 몇 대 꽂을 수 있는지 계산해야 한다. 호스트에 남은 비트가 7비트라면 $2^7 = 128$개의 IP가 생긴다. 하지만 여기서 반드시 2개를 빼야 한다(-2).

  • 네트워크 주소: 맨 앞 번호 (모든 호스트 비트가 0인 것) ──▶ 그 동네 자체를 의미하는 대표 이름이라 PC에 부여 불가.
  • 브로드캐스트 주소: 맨 뒷 번호 (모든 호스트 비트가 1인 것) ──▶ 동네 전체에 방송 때릴 때 쓰는 주소라 PC에 부여 불가.
  • 결과: 한 부서에 $128 - 2 =$ 126대의 PC를 세팅할 수 있다.

3. 기계의 판단: AND 연산의 마법

내 PC의 IP가 192.168.1.130이고, 마스크가 255.255.255.128이다. PC는 자기가 어느 동네 소속인지 어떻게 알까? 두 숫자를 이진수로 바꾸어 위아래로 나란히 두고 AND (둘 다 1일 때만 1) 연산을 곱해버린다.

 ┌─────────────────────────────────────────────────────────────┐
 │                네트워크 주소를 찾는 이진수 AND 연산              │
 ├─────────────────────────────────────────────────────────────┤
 │                                                             │
 │   IP 주소     : 11000000 . 10101000 . 00000001 . 10000010   │
 │   서브넷 마스크 : 11111111 . 11111111 . 11111111 . 10000000   │
 │   --------------------------------------------------------- │
 │   [ AND 결과 ]  11000000 . 10101000 . 00000001 . 10000000   │
 │                                                             │
 │   ▶ 십진수 변환: 192 . 168 . 1 . 128                           │
 │   ▶ 내 PC 왈: "아! 나는 192.168.1.128 번지 동네(서브넷) 소속이구나!" │
 └─────────────────────────────────────────────────────────────┘

이 AND 연산의 강력함은 CPU 내부 논리 게이트에서 1클럭 만에 끝나는 초고속 하드웨어 연산이기 때문에, 라우터가 수십만 개의 패킷을 지연 없이 포워딩할 수 있게 해 준다.

📢 섹션 요약 비유: 서브네팅에서 호스트 비트 수를 빌려오는 공식($2^n$)은 **"종이를 반으로 계속 접는 것"**과 같습니다. 1번 접으면 2칸이 생기고, 2번 접으면 4칸, 3번 접으면 8칸이 생깁니다. 접을 때마다 방의 개수(서브넷)는 늘어나지만, 그 방 안에 들어가는 공간 크기(호스트 수)는 정확히 반 토막이 납니다.