📚 네트워크 · 패킷 분석 › 01. TCP/IP 구조 이해 — 12편
이전 글: 11. Unicast, Broadcast, Multicast · 다음 글: 13. Network Address와 Host Address
서브넷 마스크(Subnet Mask) 는 IP 주소 32비트 중 어디까지가 네트워크 부분이고 어디부터가 호스트 부분인지 표시하는 32비트 값입니다.
11111111.11111111.11111111.00000000)/24처럼 표기합니다| 서브넷 마스크 | 프리픽스 | 네트워크 비트 | 호스트 비트 | 사용 가능한 호스트 수 |
|---|---|---|---|---|
255.0.0.0 | /8 | 8 | 24 | 16,777,214 |
255.255.0.0 | /16 | 16 | 16 | 65,534 |
255.255.255.0 | /24 | 24 | 8 | 254 |
255.255.255.128 | /25 | 25 | 7 | 126 |
255.255.255.192 | /26 | 26 | 6 | 62 |
255.255.255.224 | /27 | 27 | 5 | 30 |
255.255.255.240 | /28 | 28 | 4 | 14 |
255.255.255.252 | /30 | 30 | 2 | 2 |
255.255.255.255 | /32 | 32 | 0 | 단일 호스트 지정 |
사용 가능한 호스트 수는 2^(호스트 비트) − 2입니다. 2를 빼는 이유(네트워크 주소·브로드캐스트 주소)는 13. Network Address와 Host Address에서 다룹니다. /31은 점대점 링크에서 두 주소를 모두 쓰는 예외(RFC 3021)입니다. /24 같은 표기법 자체의 규칙은 14. IPv4 주소와 서브넷(CIDR) — 같은 네트워크인지 판단하는 법에서 다룹니다.
호스트는 패킷을 보내기 전에 "목적지가 나와 같은 네트워크인가?" 를 판단합니다. 방법은 IP 주소와 마스크의 비트 단위 AND 연산입니다(둘 다 1일 때만 1).
내 주소 192.168.10.25 = 11000000.10101000.00001010.00011001
마스크 255.255.255.0 = 11111111.11111111.11111111.00000000
─────────────── AND ───────────────
내 네트워크 = 11000000.10101000.00001010.00000000 = 192.168.10.0
목적지 A 192.168.10.80 AND 마스크 = 192.168.10.0 → 같음 → LAN에서 직접 전달 (ARP로 A의 MAC)
목적지 B 192.168.20.5 AND 마스크 = 192.168.20.0 → 다름 → 기본 게이트웨이로 전달 (ARP로 게이트웨이 MAC)
즉 서브넷 마스크는 "직접 보낼지, 게이트웨이에 맡길지"를 결정하는 기준입니다. 게이트웨이로 넘긴 이후 과정은 16. Default Gateway에서 다룹니다.
① 마스크는 주소가 아니라 해석 규칙입니다. 같은 192.168.10.25라도 /24와 /26에서는 속한 네트워크가 달라집니다.
② 표기 방식이 장비·용도마다 다릅니다.
| 표기 | 예 | 주로 쓰는 곳 |
|---|---|---|
| 점 10진 마스크 | 255.255.255.0 | Windows ipconfig, 구형 설정 파일 |
| 프리픽스 길이 | /24 | Linux ip, 방화벽·클라우드 정책, IDS 설정 |
| 와일드카드 마스크(반전) | 0.0.0.255 | Cisco ACL·OSPF 설정 (0 = 일치해야 하는 비트) |
와일드카드 마스크는 서브넷 마스크의 비트를 뒤집은 값이므로, 방화벽·라우터 설정을 검토할 때 둘을 혼동하지 않아야 합니다.
③ 양쪽 마스크가 다르면 통신이 비대칭이 됩니다. 한 호스트는 상대를 같은 네트워크로, 상대는 다른 네트워크로 판단하면 한 방향은 직접, 다른 방향은 게이트웨이로 가는 등 간헐적인 장애가 생깁니다.
실습 예시 — 마스크 확인 (Rocky Linux / Ubuntu 공통)
ip -4 addr show ens33
# 출력 형식 예시(값은 환경마다 다름)
inet 192.168.10.25/24 brd 192.168.10.255 scope global dynamic ens33
Linux는 /24 형태로, Windows ipconfig는 서브넷 마스크 . . . : 255.255.255.0 형태로 보여 줍니다.
마스크 계산은 ipcalc로도 할 수 있지만, Rocky(RHEL 계열 ipcalc)와 Ubuntu(apt install ipcalc로 설치하는 별도 구현)의 옵션·출력 형식이 다릅니다. 배포판과 무관하게 같은 결과를 보려면 Python을 쓰는 방법이 있습니다.
# 예시(값은 환경마다 다름)
python3 - <<'EOF'
import ipaddress
for s in ["192.168.10.25/24", "192.168.10.25/26"]:
n = ipaddress.ip_interface(s).network
print(s, "→ 마스크", n.netmask, "/ 와일드카드", n.hostmask, "/ 네트워크", n)
EOF
# 출력 예시
192.168.10.25/24 → 마스크 255.255.255.0 / 와일드카드 0.0.0.255 / 네트워크 192.168.10.0/24
192.168.10.25/26 → 마스크 255.255.255.192 / 와일드카드 0.0.0.63 / 네트워크 192.168.10.0/26
/32(단일 호스트) 대신 /16을 쓰면, 의도한 한 대가 아니라 65,536개 주소가 허용됩니다. 규칙 검토 시 프리픽스 길이는 가장 먼저 확인할 항목입니다.관제 업무에서 마스크(프리픽스)는 주소 묶음을 해석하는 단위로 자주 등장합니다.
HOME_NET, 허용 대역, 차단 목록은 대부분 프리픽스로 작성됩니다./24, 사용자망 /22 등)를 알면 IP만 보고 어느 구역인지 판별할 수 있습니다./24 단위로 묶으면 "한 대역 전체를 훑었는가"를 빠르게 볼 수 있습니다.관제자가 확인할 질문은 다음과 같습니다.
HOME_NET) 정의가 실제 자산 대역과 맞는가?⚠️ 오탐 주의: IDS의 HOME_NET이 실제보다 좁게 정의되어 있으면 내부 호스트가 "외부"로 취급되어 방향 기반 룰이 잘못 동작합니다. 알림의 방향(내부→외부/외부→내부)이 이상하게 보이면 대역 정의부터 확인해야 합니다(06 영역 288. Snort Rule 기초에서 다룸).