
IP 주소의 구조
IPv4 주소는 32 비트이다.
192 . 168 . 1 . 65
11000000 10101000 00000001 01000001
← 8비트 → ← 8비트 → ← 8비트 → ← 8비트 →
이 32 비트는 네트워크부 + 호스트부 두 영역으로 나뉜다.
- 네트워크부: "어느 네트워크인가" → 라우터가 패킷을 어디로 보낼지 결정하는 데에 쓴다.
- 호스트부: "그 네트워크 안에서 어느 장치인가"
서브넷 마스크 (subnet mask)
서브넷 마스크도 32 비트이다.
- 앞에서부터 연속된 1 → 네트워크부
- 나머지 0 → 호스트부
255 . 255 . 255 . 0
11111111 11111111 11111111 00000000
← 네트워크부 24비트 → ← 호스트부 8비트 →
서브넷 마스크는 네트워크부와 호스트부의 경계를 알려준다. (네트워크 주소 찾기)
서브넷 마스크를 씌운다는 건 이 서브넷 마스크를 IP 주소와 AND 연산 한다는 뜻이다.
192.168.1.65 → 11000000.10101000.00000001.01000001
AND
255.255.255.0 → 11111111.11111111.11111111.00000000
= 192.168.1.0 → 11000000.10101000.00000001.00000000
호스트부가 전부 0 으로 마스킹되기 때문에 결과는 네트워크 주소다.
← 무슨 말이냐면 네트워크 주소의 역할은 이 서브넷 전체를 하나의 이름으로 부르는 것이다. 라우터는 개별 호스트를 일일이 알 필요 없이 "192.168.1.0/24로 가는 패킷은 저쪽으로"처럼 서브넷 단위로 경로를 관리한다.
클래스풀(Classful) 주소 체계
| 클래스 | 시작 비트 (2진수) | 첫 번째 옥텟 범위 (10진수) | 기본 서브넷 마스크 | 용도 |
| A 클래스 | 0....... | 0 ~ 127 | 255.0.0.0 (/8) | 대규모 국가/대기업 |
| B 클래스 | 10...... | 128 ~ 191 | 255.255.0.0 (/16) | 중규모 학교/기업 |
| C 클래스 | 110..... | 192 ~ 223 | 255.255.255.0 (/24) | 소규모 가정/소규모 회사 |
클래스 이렇게 나누는 이유
A 클래스: "덩치가 큰 네트워크"
- 구조: [네트워크(8비트)][호스트(24비트)]
- 특징: 네트워크 수는 128개뿐이지만, 한 네트워크 안에 1,600만 개 이상의 IP를 넣을 수 있다.
- 비유: '서울시'라는 네트워크 하나에 '천만 시민'이 사는 것
B 클래스: "중간 규모 네트워크"
- 구조: [네트워크(16비트)][호스트(16비트)]
- 특징: 네트워크 수도 적당하고, 한 네트워크당 약 65,000개의 IP를 가진다.
C 클래스: "작고 많은 네트워크"
- 구조: [네트워크(24비트)][호스트(8비트)]
- 특징: 네트워크는 수백만 개 만들 수 있지만, 정작 한 네트워크 안에는 254개의 단말기만 연결 가능하다. 공유기 대역
클래스 체계의 한계 요즘에는 이러한 클래스 구분을 엄격하게 지키지 않는다. 낭비 때문이다. 만약 IP 주소가 300개 필요한 회사가 있다면, C 클래스 (/24, 254 개) 는 모자라고 B 클래스 (/16, 65,534 개) 는 너무 많이 남는다. 그래서 등장한게 서브넷팅과 CIDR 이다. 클래스와 상관 없이 필요한 만큼 비트를 잘라서 쓰는 것이다.
Tip: 시험에서 클래스 맞추는 문제 나왔을 때
IP 주소의 맨 앞 숫자(첫 번째 옥텟)을 확인한다.
- 10.x.x.x → A 클래스 (기본 마스크 /8)
- 172.x.x.x → B 클래스 (기본 마스크 /16)
- 192.x.x.x → C 클래스 (기본 마스크 /24)
서브넷 마스크 외우기
| 1의 개수 | 이진수 형태 | 십진수 값 | 자주 쓰이는 프리픽스 (C클래스 기준) |
| 1개 | 10000000 | 128 | /25 |
| 2개 | 11000000 | 192 | /26 |
| 3개 | 11100000 | 224 | /27 |
| 4개 | 11110000 | 240 | /28 |
| 5개 | 11111000 | 248 | /29 |
| 6개 | 11111100 | 252 | /30 (P2P 링크용) |
프리픽스 표기
255.255.255.0 (서브넷 마스크) 라고 매번 쓰는 건 번거롭다. 어차피 1 이 앞에서 몇 개 연속인지만 알면 서브넷 마스크의 크기가 결정되기 때문에 그 숫자만 슬래시 뒤에 붙인 게 프리픽스(CIDR) 표기이다.
192.168.1.65/24 ← 앞에서 24비트가 네트워크부
| 프리픽스 | 서브넷 마스크 | 호스트부 판단 부분 | 호스트부 비트 |
| /8 | 255.0.0.0 | 24비트 | |
| /16 | 255.255.0.0 | 16비트 | |
| /24 | 255.255.255.0 | 8비트 | |
| /26 | 255.255.255.192 | 11111111 11000000 | 6비트 |
| /30 | 255.255.255.252 | 11111111 11111100 | 2비트 |
네트워크 주소
호스트부 전부 0 이고 해당 서브넷의 첫 주소이다.
192.168.1.0/24 를 기준으로 보면 호스트부 비트를 전부 0으로 하는 것 → 192.168.1.0
브로드캐스트 주소
호스트부 전부 1 이고 해당 서브넷의 마지막 주소이다.
192.168.1.0/24 를 기준으로 보면 호스트부 비트를 전부 1로 하는 것 → 192.168.1.255
유효 호스트 수
2ʰ − 2 (h = 호스트부 비트 수, -2는 네트워크·브로드캐스트 제외)
192.168.1.0/24 를 기준으로 보면 실제 사용 가능한 호스트는 네트워크 주소와 브로드캐스트 주소 그 사이
→ 192.168.1.1 ~ 192.168.1.254
IPv4 클래스 별 기본 프리픽스 & 범위
| 클래스 | 시작 비트 | 범위 | 기본 프리픽스 | 호스트 수 |
| A | 0 | 0 - 127 | /8 | 16,777,214 |
| B | 10 | 128 - 191 | /16 | 65,534 |
| C | 110 | 192 - 223 | /24 | 254 |
| D | 1110 | 224 - 239 | 멀티캐스트 | - |
| E | 1111 | 240 - 255 | 예약 | - |
클래스 구분하는 문제가 나왔을 때를 위해 각 클래스의 범위 (경계값) 을 외워두면 좋다.
서브넷팅
호스트부의 앞쪽 비트 일부를 떼어내서 서브넷 구분에 사용한다. → 프리픽스를 늘리는 행위
클래스 체계에서는 네트워크/호스트 경계가 고정되어 있다. A 는 /8, B 는 /16, C 는 /24. 하지만 이렇게 사용하면 낭비가 심할 수 있다. 클랫 C 를 받았는데 호스트가 30 개만 필요하다면 254 개 중 224 개를 버리는 셈이다.
기존 /24: [네트워크 24비트][호스트 8비트]
서브넷팅 후 /26: [네트워크 24비트][서브넷 2비트][호스트 6비트]
클래스 C (/24) 에서 2비트를 빌려 /26으로 만들면
- 서브넷 수: 2² = 4개
- 서브넷당 호스트 수: 2⁶ − 2 = 62개
| 서브넷 | 네트워크 주소 | 브로드캐스트 | 사용 범위 |
| 1번 | 192.168.1.0 | 192.168.1.63 | .1 ~ .62 |
| 2번 | 192.168.1.64 | 192.168.1.127 | .65 ~ .126 |
| 3번 | 192.168.1.128 | 192.168.1.191 | .129 ~ .190 |
| 4번 | 192.168.1.192 | 192.168.1.255 | .193 ~ .254 |
서브넷 주소가 64씩 점프하는 이유는 /26 에서 호스트부가 6비트(=64) 이기 때문이다.
포인트
- 호스트 수 공식: 2ʰ − 2
- 서브넷 수: 클래스 C 에서 /24 -> /26 으로 빌린 비트 수 = 2 → 2² = 4개 서브넷
- AND 연산으로 네트워크 주소: IP 주소 AND 서브넷 마스크 = 네트워크 주소
- /30 -> 호스트 2개 (P2P 링크에 자주 사용)
- B 클래스 판단: 첫 옥텟 128 ~ 191 -> 기본 /16
- 게이트웨이 주소: 일반적으로 해당 서브넷의 사용 가능한 첫 번째 주소(.1)나 마지막 주소(.254)를 관례적으로 할당
- /32 주소: 호스트 비트가 0 이다. 딱 하나의 특정 단말기(호스트) 자체를 지칭할 때 사용
핵심 흐름
프리픽스 (CIDR 표기 /24) 는 32 비트 IP 주소에서 앞에서 몇 비트가 네트워크 부분인지 나타낸다.
서브넷팅은 클래스로 고정된 네트워크부를 더 잘게 쪼개기 위해 호스트부 비트 일부를 서브넷 부분으로 빌리는 것이다.
자주 나오는 계산 패턴
클래스 C 주소에서 /26으로 서브넷팅하면, /24에서 2비트를 추가로 빌린 것이므로 서브넷 수는 2² = 4개, 호스트 수는 2⁶ − 2 = 62개가 된다. 네트워크 주소를 구할 때는 IP주소와 서브넷 마스크를 AND 연산하면 된다. 예를 들어 192.168.1.65 AND 255.255.255.192 = 192.168.1.64가 네트워크 주소이다.
'Computer Science' 카테고리의 다른 글
| [소프트웨어공학] 응집도와 결합도 (1) | 2026.04.16 |
|---|---|
| [자료구조] map, hashmap, set 의 차이 (0) | 2025.09.23 |