들어가며
가상호스팅 서비스를 이용하다보면 호스팅된 서버에 접근가능한 대역을 설정할 때 CIDR방식을 사용하라고 권장한다.
예) CIDR 0.0.0.0/0 이면 모든 대역을 의미한다.
/(슬래시) 뒤에나오는 숫자의 의미는 뭔지, 특정 대역은 어떻게 표기하는지 궁금해 CIDR 개념과, 이와 더불어 서브넷 마스크 및 IP 클래스의 개념까지 포스팅하고자 한다.
CIDR이란?
사이더(Classless inter-Domain Routing, CIDR)는 직역 그대로 클래스없는 도메인간 라우팅 기법이다.
기존 IP 주소 할당 방식이었던 클래스를 대체하며 IP주소의 네트워크 영역, 호스트영역을 유연하게 나누어준다.
위의 CIDR 정의를 이해하기 위해 사전지식이 필요하다.
정의에 명시된 클래스와 네트워크 영역, 호스트 영역은 무엇일까?
IP 클래스
IP는 0.0.0.0 부터 255.255.255.255 까지 총 (2^32, 4,294,967,296개)를 표현할 수 있다.
전세계 사람들에게 IP를 효율적으로 할당하기 위해 각 용도에 맞게 클래스로 나누어 IP 대역을 구분한다.
클래스는 총 5개 A, B, C, D, E 가 존재한다. 흔하게 사용되는건 A, B, C이며
D와 E는 각각 멀티캐스트용도, 기타목적으로 예약된 클래스로 실제 IP주소가 할당되지는 않는다.
클래스별 IP 대역은 다음과 같다.
CLASS | 대역 |
A | 0.0.0.0 ~ 127.255.255.255 |
B | 128.0.0.0 ~ 191.255.255.255 |
C | 192.0.0.0 ~ 223.255.255.255 |
D | 224.0.0.0 ~ 239.255.255.255 |
E | 240.0.0.0 ~ 255.255.255.255 |
추가적으로 특정 주소는 공인 IP가 아닌 사설 IP(흔히 공유기)로 사용되며 다음과 같다.
CLASS | 대역 |
A | 10.0.0.0 ~ 10.255.255.255 |
B | 172.16.0.0 ~ 172.31.255.255 |
C | 192.168.0.0 ~ 192.168.255.255 |
이외에도 0.0.0.0, 255.255.255.255, 127.0.0.1은 각각 네트워크 시작 주소, 브로드캐스트주소, Loopback 주소이기 때문에 IP주소로 할당될 수 없다.
네트워크 ID와 호스트 ID
사실 IP는 네트워크 ID와 호스트ID가 합쳐진 상태로 표현된다.
210.77.8.3라는 IP는
네트워크 ID를 210.77.8, 호스트 ID를 3로 표현할 수 있다.
왜 IP를 네트워크 ID 호스트 ID로 나누는 걸까?
이유는 Routing으로 특정 IP 찾아갈때 이 두 ID를 통해 효율적으로 목적지를 알아내기 때문이다.
모든 호스트(최종 목적지 IP)를 찾고 관리하기 힘들기 때문에 각 네트워크ID에 1개이상의 호스트ID를 종속시켜 호스트를 쉽게 관리하기 위함이다.
비유하자면 네트워크 ID는 아파트 동, 호스트 ID는 아파트 동의 호수와 같다.
IP의 네트워크 ID와 호스트 ID는 서브넷 마스크에 의해 구분이 가능하다.
서브넷 마스크를 통해 네트워크 ID와 호스트 ID를 더 자세히 알아보자.
서브넷 마스크
서브넷 마스크는 각 IP 클래스별로 네트워크 영역을 다르게하여 구분하여 한 네트워크당 호스트수를 효율적으로 관리할 수 있다.
각 클래스가 가지는 디폴트 서브넷 마스크는 다음과 같다.
CLASS | 대역 | 디폴트 서브넷 마스크 |
A | 0.0.0.0 ~ 127.255.255.255 | 255.0.0.0 |
B | 128.0.0.0 ~ 191.255.255.255 | 255.255.0.0 |
C | 192.0.0.0 ~ 223.255.255.255 | 255.255.255.0 |
앞서 예시로 나왔던 210.77.8.3은 C 클래스 범위에 속하기 때문에 255.255.255.0 서브넷 마스크를 가진다.
이제 네트워크 ID와 호스트 ID를 구분해보자.
C클래스의 서브넷 마스크를 2진수로 표현하면 다음과 같으며
1111 1111 . 1111 1111 . 1111 1111 . 0000 0000 = 255.255.255.0 (서브넷 마스크)
[네트워크 ID] [호스트 ID]
0의 개수를 기준으로 네트워크 하나가 가질수 있는 최대 호스트의 개수를 유추할 수 있다.
호스트의 수는 0의 개수가 8개이므로 (2^8) - 2개이다. "-2"를 한이유는 네트워크 하나가 가지는 여러 호스트중 첫번째 호스트는 네트워크 주소, 마지막 호스트는 브로드캐스트 주소로 사용되기 때문에 실제 할당 가능한 호스트 개수를 구하기 위함이다.
따라서 210.77.8.3은 210.77.8.0라는 하나의 네트워크 안에서 210.77.8.1 ~ 210.77.8.254 범위, (2^8) - 2개 또는 254개의 호스트중 하나다.
이번엔 다른 IP로 예시를 들어보자.
129.25.3.7은 B클래스에 속하며 서브넷 마스크로 255.255.0.0을 가진다.
서브넷 마스크를 2진수로 표현한 0의 개수는 16개이며 네트워크 하나는 최대 (2^16) - 2개의 호스트 수를 가진다.
따라서 129.25.3.7은 129.25.0.0라는 하나의 네트워크 안에서 129.25.0.1 ~ 129.25.255.254 범위, (2^16) - 2개 또는 65, 534개의 호스트중 하나다.
여기서 한가지 더 알수있는 사실은 호스트 ID 개수를 표현하는 0의 개수가 많아질수록 1의 개수가 줄어들므로 이는 네트워크 ID 개수 적어짐을 의미한다. 즉, 서로 반비례하다
사실 클래스가 디폴트로 가지고있는 서브넷 마스크로는 네트워크하나가 가지는 호스트수를 유연하게 설정할 수 없다.
A클래스는 하나의 네트워크 당 (2^24) - 2개의 호스트를 가진다.
B클래스는 하나의 네트워크 당 (2^16) - 2개의 호스트를 가진다.
C클래스는 하나의 네트워크 당 (2^8) - 2개의 호스트를 가진다.
B클래스 IP대역을 사용하면서 C클래스 대역의 호스트 개수를 사용하거나 또, 호스트수가 254개도 너무 많다면 유연하게 줄인다거나 할 필요가 있다.
이러한 니즈를 충족하는것이 바로 CIDR이다.
CIDR
초반에 언급했던 CIDR의 정의를 다시 보자.
"사이더(Classless inter-Domain Routing, CIDR)는 직역 그대로 클래스없는 도메인간 라우팅 기법이다.
기존 IP 주소 할당 방식이었던 클래스를 대체하며 IP주소의 네트워크 영역, 호스트영역을 유연하게 나누어준다."
각 클래스가 가지는 디폴트 서브넷 마스크에 얽매이지 않고
네트워크 영역과 호스트영역을 유연하게 나누는 방법은 간단하다.
서브넷 마스크를 직접 정의하면된다.
예시를 들어보자.
210.77.8.3는 C클래스에 속해 서브넷 마스크가 255.255.255.0이며 2진수로 표현하면 다음과 같다.
1111 1111 . 1111 1111 . 1111 1111 . 0000 0000
여기서 가장 왼쪽의 0을 1로 변경하면 다음과 같으며 (1은 항상 왼쪽부터 채우거나 없애야 한다.)
1111 1111 . 1111 1111 . 1111 1111 . 1000 0000 = 255.255.255.128
0의 개수는 7개, 하나의 네트워크가 가지는 호스트 수는 (2^7) - 2개 또는 126개가 된다.
즉, 210.77.8.3은 다음의 네트워크 영역중
210.77.8.0 ~ 210.77.8.127 |
210.77.8.128 ~ 210.77.8.255 |
210.77.8.0라는 첫번째 네트워크 영역에 속하게 된다.
만약 다음과 같다면
IP - 210.77.8.155, 서브넷 마스크 - 255.255.255.192
1111 1111 . 1111 1111 . 1111 1111 . 1100 0000 = 255.255.255.192, 호스트 수는 (2^6) - 2개 또는 62개
210.77.8.0 ~ 210.77.8.63 |
210.77.8.64 ~ 210.77.8.127 |
210.77.8.128 ~ 210.77.8.191 |
210.77.8.192 ~ 210.77.8.255 |
210.77.8.155은 210.77.8.128라는 세번째 네트워크 영역에 속하게 된다.
CIDR 표기 방식
CIDR는 IP와 서브넷 마스크를 함께 표기하며 /(슬래시)로 이 둘을 구분한다.
예시는
IP - 210.77.8.155, 서브넷 마스크 - 255.255.255.192 일경우
210.77.8.155/26와 같이 표기한다.
슬래시 뒤에는 서브넷 마스크로 2진수로 표현시 1의 개수로 생각하면된다.
팁으로 호스팅서버 접근 대역 설정에 단일 IP를 할당하고 싶다면
x.x.x.x/32로 설정하면 된다.
마치며
온라인으로 CIDR을 입력하면 IP 대역을 알려주는 사이트도 있으니 잘 활용해서 시간을 절약하자.
https://mxtoolbox.com/subnetcalculator.aspx
'📡 Network' 카테고리의 다른 글
TCP/IP 4계층 모델 (0) | 2022.05.06 |
---|