네트워크를 만지다 보면 CIDR 개념을 자주 접하게 된다. 풀어 쓰면 Classless Inter-Domain Routing 이며 말 그대로 클래스 없는 도메인간 라우팅 기법이라는 뜻이다. 이를 이해하기 위해선 기본적인 IP 주소에 대한 지식이 필요하기 때문에 이번 포스트에서는 기본적인 IP 주소에 대한 지식부터 이를 통해 왜 CIDR이 나오게 되었는지에 대해 알아보자.
해당 포스트에서는 IPv4만을 다룬다.
IP 주소
IP 주소는 0.0.0.0 부터 255.255.255.255까지 표현 가능하다. 이는 10진수로 나타냈을 때이며 2진수로 변환하면 아래와 같다.
- 10진수
- 192.168.0.1
- 2진수
- 1100 0000 . 1010 1000 . 0000 0000 . 0000 0001
IPv4는 8개의 비트로 이루어진 옥텟(octet) 4개로 이루어져 있으며 총 32개의 비트로 이루어진다. 이를 통해 총 2^32개 만큼 IP 주소를 할당할 수 있다.
1 octet = 8 bit = 1 byte
IP 주소 = 4 byte
IP 클래스
IP 주소를 각각 용도에 따라 구분하기 위해 총 5개의 클래스로 나누었다. 클래스별 IP 대역은 아래와 같다.
IP 클래스 | 시작 주소 | 끝 주소 | 용도 |
---|---|---|---|
A Class | 0.0.0.0 | 127.255.255.255 | 큰 규모의 네트워크 |
B Class | 128.0.0.0 | 191.255.255.255 | 일반적인 규모의 네트워크 |
C Class | 192.0.0.0 | 223.255.255.255 | 작은 규모의 네트워크 |
D Class | 224.0.0.0 | 239.255.255.255 | 멀티캐스트용 |
E Class | 240.0.0.0 | 255.255.255.255 | 기타 목적 |
그리고 아래에 표시한 각 클래스별 첫 번째 옥텟을 보면 왜 위와 같은 시작주소가 나오게 되었는지 알 수 있다.
IP 클래스 | 첫 번째 옥텟 2진수 | 첫 번째 옥텟 10진수 | 구분 |
---|---|---|---|
A Class | 0000 0000 | 0 | 첫 번째 비트 0 |
B Class | 1000 0000 | 128 | 처음 2비트 10 |
C Class | 1100 0000 | 192 | 처음 3비트 110 |
D Class | 1110 0000 | 224 | 처음 4비트 1110 |
E Class | 1111 0000 | 240 | 처음 4비트 1111 |
네트워크 ID, 호스트 ID와 서브넷 마스크
IP 주소는 사실 네트워크 ID와 호스트 ID가 합쳐진 것이다. 그리고 이를 구분해주는 IP 주소와 비슷하게 생긴 주소가 있는데 이를 서브넷 마스크라고 하며, 이것을 통해 두 개의 ID로 나누는 작업 그 자체를 서브네팅이라고 한다.
- 네트워크 ID
- 네트워크를 지칭하는 주소. 네트워크 주소가 동일한 네트워크를 로컬 네트워크라고 한다.
- 호스트 ID
- 하나의 네트워크 내에 존재하는 호스트를 구분하기 위한 주소. 로컬 네트워크를 구성하는 하나의 네트워크.
아래는 IP 클래스별 약속한 서브넷 마스크 이다.
간단하게 설명하면 2진수의 서브넷 마스크에서 1로 표시되는 부분은 네트워크 ID이고 0으로 표시된 부분은 호스트 ID이다.
예를 들어 A 클래스의 서브넷 마스크는 255.0.0.0이다. 맨 앞 옥텟이 모두 1이고 나머지는 0이기 때문에 1개의 옥텟이 네트워크 ID를 나타내고 나머지 3개의 옥텟이 호스트 ID를 나타낸다. 또한 맨 앞 비트가 0으로 고정되어 있기에 0(0000 0000) ~ 127(0111 1111)까지 총 128개의 네트워크가 존재하고 각 네트워크 1개마다 0.0.0 ~ 255.255.255 총 16,777,216(256 * 256 * 256)개의 호스트를 갖는다는 것을 알 수 있다.
정확하게는 호스트 ID가 모두 0인 것과 1인 것은 각각 네트워크 주소, 브로드캐스트 주소이므로 호스트 개수는 위에서 설명한 것 보다 적다.
CIDR
위에서 설명한 IP 클래스는 default 서브넷 마스크가 있어서 네트워크를 가변적으로 나눌 수 없었다. 이를 해결하기 위해 나온 방식이 CIDR 이다.
CIDR의 생김새를 보자
192.168.0.3/20
기존의 IP 주소에 ‘숫자’가 더해졌다. 해당 숫자는 서브넷 마스크의 1 개수를 의미한다. 즉 해당 위 주소의 서브넷 마스크는 아래와 같다.
1111 1111 . 1111 1111 . 0000 0000 . 0000 0000
즉 네트워크 ID와 호스트 ID가 각각 2개의 옥텟을 가짐을 의미한다.
또한 아래의 경우도 가능하다.
- IP 주소:
192.168.0.3/2
- 서브넷 마스크:
1100 0000 . 0000 0000 . 0000 0000 . 0000 0000
- 네트워크 개수 = 2^2
- 호스트 개수 = 2^30
CIDR은 초반에 언급했듯이 클래스 없는 도메인간 라우팅 기법이다. 즉 클래스의 개념을 없애고 서브넷 마스크를 이용하여 네트워크의 영역을 보다 유연하게 나눌 수 있는 것이다.
또한 CIDR은 한 번에 해당 네트워크를 파악하는데 도움을 주기도 한다.
Reference
https://github-wiki-see.page/m/mapc-team/document/wiki/네트워크—IPv4—IPv6-&-서브넷
https://www.guru99.com/ip-address-classes.html