내가 처음 홈 서버를 만들 때 서브넷 마스크와 CIDR이라는 개념을 접했을 때, 이게 무슨 소리인가 싶어 끙끙댔던 기억이 있다. 하지만 막상 이해하고 나니 그렇게 어려운 개념은 아니구나 싶어 나와 같은 사람들을 위해 간단히 적어 보기로 했다.
CIDR?
CIDR은 클래스 없는 도메인 간 라우팅(Classless Inter-Domain Routing)의 약자로, 사이더라고 읽는다. 쉽게 설명하면 IP 주소의 범위를 지정하는 방식인데, 이러한 이름이 붙은 이유는 과거에는 클래스라는 것을 사용해 네트워크를 구분했기 때문이다. 하지만 지금 클래스에 대해 굳이 알 필요는 없으니 여기선 자세히 다루지 않도록 하겠다.
CIDR의 구조
일단 CIDR을 사용한 IP 주소는 다음과 같이 표기한다.
AAA.BBB.CCC.DDD/EE
여기서 A~D는 우리가 익히 알고 있는 일반적인 IP주소와 동일하며, 슬래시(/) 뒤에 있는 EE 부분이 CIDR의 핵심이라고 할 수 있다.
다들 IP 주소의 각 옥텟(점으로 구분된 덩어리)이 1에서 255 사이의 숫자라는 것은 알고 있을 것이다. 이를 이진수로 환산하면 각 옥텟 별로 8개의 비트가 된다.(그래서 8개를 의미하는 옥텟인 것이다!) CIDR은 앞의 IP 주소에 대해 앞에서부터 EE개의 비트를 고정하고 남은 비트의 가능한 모든 조합을 포함하는 범위를 말한다.
이렇게만 말하면 당연히 이해가 안 될 테니 예시를 들어 설명해 보겠다.
내가 홈 네트워크를 구축하려 하는데 192.168.100.0/24라는 CIDR을 사용한다 해 보자. 이를 이진수로 환산하면 11000000.10101000.01100100.00000000/24가 된다. 이 중에 앞의 굵게 표시된 24개의 비트는 고정하고 뒤의 8개 비트를 00000000에서부터 11111111까지 조합했을 때 나올 수 있는 모든 IP를 포함하는 범위를 내 네트워크로 사용하겠다는 소리가 되는 것이다. 이를 다시 10진수로 바꾸면 192.168.100.0부터 192.168.100.255까지가 192.168.100.0/24의 IP 범위가 되는 것이다.
같은 방식으로 192.168.0.0/16은 앞에서부터 16개 비트를 고정하여 192.168.0.0~192.168.255.255를, 192.168.100.10/32는 모든 비트를 고정하였으니 192.168.100.10 단 한 개의 IP만을 가리키게 된다.
베이스 IP와 브로드캐스트 IP
하지만 실제 192.168.100.0/24의 범위를 구해 보면 192.168.100.1부터 192.168.100.254라 표시된다. 0과 255는 어디로 간 걸까?
과거 IPv4 표준이 제대로 정립되기 전, 사람들은 네트워크에 속해 있는 모든 장치들에 데이터를 전송하기 위해(이것을 브로드캐스팅이라 한다) 모든 비트를 0으로 한 주소(여기서는 192.168.100.0)나 모든 비트를 1로 한 주소(192.168.100.255)를 사용했다. 추후 IPv4 라우터에 대한 표준(RFC 1812)을 정하면서 혼란을 방지하기 위해 모든 비트를 1로 한 주소를 브로드캐스트 IP로 사용하고 모든 비트가 0인 주소는 예약된(사용하지 않는) 주소로 남기기로 하여 맨 앞과 맨 뒤의 주소는 사용할 수 없게 된 것이다.
오해할 수 있는 것들
192.168.100.125/24의 범위는 192.168.100.125부터 192.168.100.254까지인가?
아니다. 앞에서도 말했듯 슬래시 뒤의 숫자만큼 비트를 고정시키고 남은 비트들을 0부터 1로 꽉 채운 값까지의 범위를 말하는 것이기 때문에 192.168.100.0/24든, 192.168.100.125/24든, 192.168.100.255/24든 사용할 수 있는 IP의 범위는 192.168.100.1부터 192
168.100.254까지다.