서브넷팅이 필요한 이유
하나의 큰 네트워크에 모든 장비를 몰아넣으면 여러 문제가 한꺼번에 발생합니다. 우선 브로드캐스트 트래픽이 네트워크 전체로 퍼져 불필요한 부하를 만듭니다. 한 장비가 모두에게 보내는 신호를 모든 장비가 받아 처리해야 하므로, 규모가 커질수록 이 낭비가 눈덩이처럼 불어납니다. 또한 모든 장비가 같은 공간에 있으면 보안 경계가 사라져, 한 곳이 뚫리면 전체가 노출됩니다.
서브넷팅은 하나의 IP 대역을 더 작은 논리적 네트워크로 쪼개 이 문제를 푸는 기법입니다. 트래픽을 구역별로 격리하고, 주소를 용도에 맞게 효율적으로 배분하며, 구역 사이에 통제 지점을 둘 수 있게 됩니다. 핵심은 단 하나의 질문으로 요약됩니다. “이 IP 주소에서 어디까지가 네트워크를 가리키고, 어디부터가 개별 장비를 가리키는가.” 이 경계를 어디에 긋느냐가 서브넷팅의 전부라고 해도 지나치지 않습니다.
IP 주소와 서브넷 마스크의 구조
IPv4 주소는 32비트로 이루어지며, 보통 8비트씩 네 덩이로 끊어 192.168.1.10처럼 표기합니다. 이 주소만으로는 어디까지가 네트워크 부분인지 알 수 없어, 서브넷 마스크가 그 경계를 알려줍니다. 마스크는 네트워크에 해당하는 비트를 1로, 장비에 해당하는 비트를 0으로 표시합니다.
비트로 보는 마스크
마스크 255.255.255.0을 2진수로 펼치면 앞 24비트가 1이고 뒤 8비트가 0입니다. 즉 앞 24비트가 네트워크를 가리키고, 뒤 8비트가 그 안의 개별 장비를 가리킵니다. 호스트 비트가 8개면 2의 8제곱인 256개의 주소가 나오는데, 여기서 두 개를 뺀 254개만 실제 장비에 할당할 수 있습니다. 맨 앞 주소는 네트워크 자체를 가리키는 네트워크 주소로, 맨 뒤 주소는 구역 전체에 한꺼번에 보내는 브로드캐스트 주소로 예약돼 있기 때문입니다.
CIDR 표기
마스크를 255.255.255.0처럼 길게 쓰는 대신, 네트워크 비트가 몇 개인지만 적는 방식이 CIDR입니다. /24는 네트워크 비트 24개를 뜻하므로 앞의 마스크와 같은 의미입니다. 비트가 하나 늘 때마다 네트워크는 두 배로 잘게 쪼개지고 구역당 장비 수는 절반으로 줄어듭니다. /24는 254개, /25는 126개, /26은 62개 식입니다. 이 규칙만 외워두면 필요한 크기를 빠르게 가늠할 수 있습니다.
실제로 쪼개보기
192.168.1.0/24를 두 개로 나누는 상황을 생각해봅니다. 네트워크 비트를 하나 늘려 /25로 만들면 구역이 둘로 갈라집니다. 앞쪽은 192.168.1.0/25로 1번부터 126번까지를, 뒤쪽은 192.168.1.128/25로 129번부터 254번까지를 담습니다. 각 구역은 자기만의 네트워크 주소와 브로드캐스트 주소를 따로 갖습니다.
이렇게 부서별이나 역할별로 나누면 한 구역의 브로드캐스트가 다른 구역으로 넘어가지 않아 트래픽 간섭이 줄고, 구역 사이에 통제 지점을 둘 수 있어 보안도 강해집니다. 예를 들어 사무용 단말과 서버를 다른 서브넷에 두면, 단말에서 서버로 향하는 통신만 골라 허용하거나 차단할 수 있습니다. 이렇게 나뉜 세그먼트 사이의 통신을 거르는 것이 방화벽과 IDS/IPS의 역할입니다.
사설 IP 대역
내부망에는 인터넷에서 라우팅되는 공인 IP가 아니라, 외부로 나가지 않는 사설 IP를 씁니다. 같은 사설 주소를 전 세계 수많은 내부망이 동시에 써도 충돌하지 않는데, 인터넷 경계에서 공인 주소로 변환되기 때문입니다. 사설 대역은 IETF RFC 1918에 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 세 묶음으로 정의돼 있습니다. 규모에 따라 골라 쓰되, 나중에 다른 네트워크와 연결할 가능성을 생각해 대역이 겹치지 않게 배정하는 것이 중요합니다.
크기가 다른 구역 나누기
현실의 네트워크는 구역마다 필요한 장비 수가 제각각입니다. 서버 구역은 10대면 충분한데 사무 구역은 200대가 필요할 수 있습니다. 이때 모든 구역을 같은 크기로 자르면 작은 구역에서는 주소가 대량으로 남고 큰 구역에서는 모자랍니다. 그래서 구역마다 다른 크기의 마스크를 적용하는 가변 길이 서브넷 마스킹(VLSM)을 씁니다.
방법은 큰 구역부터 먼저 떼어내는 것입니다. 200대가 필요한 구역에는 254개를 담는 /24를 주고, 그다음 남은 공간에서 60대짜리 구역에 /26을, 10대짜리 구역에 /28을 차례로 배정합니다. 큰 덩어리를 먼저 자르고 남은 자투리를 잘게 쪼개는 순서를 지켜야 주소가 겹치거나 어중간하게 조각나지 않습니다. 이 방식으로 같은 대역에서 훨씬 많은 구역을 효율적으로 뽑아낼 수 있습니다.
흔히 저지르는 실수
서브넷 설계에서 가장 잦은 사고는 두 가지입니다. 하나는 처음에 대역을 너무 빠듯하게 잡는 것입니다. 당장 필요한 수에 딱 맞춰 잘랐다가 장비가 조금만 늘어도 구역을 다시 짜야 하고, 이미 배정된 주소들을 건드리면 운영 중인 서비스가 영향을 받습니다. 다른 하나는 네트워크 주소와 브로드캐스트 주소를 깜빡하고 장비에 할당하려는 것입니다. 이 두 주소는 항상 예약돼 있으므로, 쓸 수 있는 주소는 늘 전체에서 두 개를 뺀 수라는 점을 기억해야 합니다.
설계의 순서
서브넷팅은 결국 마스크 비트를 어디서 끊느냐의 문제지만, 접근 순서를 지키면 훨씬 깔끔해집니다. 먼저 각 구역에 들어갈 장비 수를 세고, 향후 증가분까지 약간의 여유를 더합니다. 그다음 그 수를 담을 수 있는 가장 작은 블록을 고릅니다. 너무 크게 잡으면 주소가 낭비되고, 너무 작게 잡으면 금세 부족해져 재설계를 해야 합니다. 큰 구역부터 차례로 떼어내며 배정하면 주소 공간이 조각나는 일도 줄일 수 있습니다. 서브넷의 기본 개념은 Cloudflare Learning의 서브넷 문서에서도 그림과 함께 정리돼 있습니다.