CIDR

**CIDR**(Classless Inter-Domain Routing, 사이더)는 클래스 없는 도메인 간 라우팅 기법으로 1993년 도입되기 시작한, 최신의 IP 주소 할당 방법이다. CIDR는 기존의 IP 주소 할당 방식이었던 네트워크 클래스를 대체하였다. CIDR는 IP 주소의 영역을 여러 네트워크 영역으로 나눌 때 기존방식에 비해 유연성을 더해준다. 특히 다음과 같은 장점이 있다. * 급격히 부족해지는 IPv4 주소를 보다 효율적으로 사용하게 해준다. * 접두어를 이용한 주소 지정 방식을 가지는 계층적 구조를 사용함으로써 인터넷 광역 라우팅의 부담을 줄여준다.
# CIDR 블록
CIDR 접두어 일치 예 CIDR는 기본적으로 비트단위, 접두어기반의 IP 주소 표준 분석방식이다. 이는 일련의 주소를 무리 지어 하나의 라우팅 테이블 항목에 넣는 것으로 라우팅을 실행한다. **CIDR 블록**이라 불리는 그룹에 포함된 여러 IP 주소는 이진 표기를 하였을 때 동일한 일련의 초기 비트를 가진다. IPv4 CIDR 블록은 IPv4 주소와 비슷한 형태를 지니며, 점과 숫자로 이루어진 4부분의 주소와 ‘/’뒤의 0에서 32까지의 숫자로 이루어진다. 즉, *A.B.C.D/N*과 같은 형태이다. 점과 숫자로 이루어진 부분은 IPv4 주소와 마찬가지로 4개의 8비트 단위 바이트로 이루어진 32비트 이진 숫자이다. ‘/’뒤의 숫자는 *접두어 길이*라고 하며, 주소의 왼쪽으로부터 세어서 공유하는 초기 비트의 수를 가리킨다. 때로는 점과 숫자부분은 생략되고 표현되는데, 즉 */20*은 언급되지 않은 20비트의 접두어를 가지는 CIDR 블록을 나타낸다. 만약 이진 형태로 변화한 IP 주소의 첫 자리 비트에서 CIDR 접두어 N비트 길이만큼 일치한다면, 해당 IP 주소는 CIDR 블록의 일부라고 하며, CIDR 접두어와 *일치*한다고 한다. 그러므로 CIDR를 이해하려면 IP 주소를 이진 형태로 나타내는 것이 필요하다. CIDR 접두어 일치 예에서 10.10.1.44는 10.10.1.32와 초기 27비트가 같으므로 CIDR 블록 10.10.1.32/27에 일치하며, 10.10.1.90은 10.10.1.32와 26, 27번째의 비트가 다르므로 CIDR 블록 10.10.1.32/27에 일치하지 않는다. IPv4의 경우, 주소의 길이가 32비트로 한정되어 있으므로, N 비트의 CIDR 접두어는 사용되지 않은 32-N비트의 주소를 남기며, 남은 비트를 사용하면 2^{(32-N)}개의 조합을 구할 수 있는데, 이는 2^{(32-N)}개의 IPv4 주소가 해당 N 비트의 CIDR 접두어에 일치함을 나타낸다. 짧은 CIDR 접두어는 더 많은 IP 주소와 일치하며, 긴 CIDR 접두어는 적은 주소와 일치한다. 하나의 주소는 서로 다른 길이의 여러 CIDR 접두어와 일치할 수 있다. CIDR는 IPv6 주소에서도 사용될 수 있는데, 이 경우 긴 주소로 말미암아 접두어 길이는 0에서 128까지의 범위를 지닌다. 이 경우에도 동일한 문법이 사용된다. 접두어는 IPv6와 같은 형태로 쓰이고, ‘/’ 다음에 접두어의 길이가 표시된다.
# CIDR 블록의 할당
Internet Assigned Numbers Authority (IANA)는 Regional Internet Registries (RIRs)에게 짧은 접두어를 가지는 큰 CIDR 블록을 할당해준다. 예를 들어, 1600만 개 이상의 주소를 지니는 62.0.0.0/8는 RIPE, 즉 유럽 RIR에 의해서 관리가 된다. RIR은 각각 유럽이나 북아메리카와 같은 하나의 큰 지정학적 위치를 관리하며, 할당받은 블록을 작은 블록으로 나누어 분배한다. 이러한 분배과정은 다른 수준의 레벨로 계속해서 반복된다. 대형 인터넷 서비스 공급자(Internet Service Providers, ISPs)는 일반적으로 RIR로부터 CIDR 블록을 얻어서 이를 가입자 수에 따라 지역 공급자에게 나누어 준다. 인터넷 국제 표준화 기구는 동일 인터넷 서비스 공급자에 속해있는 네트워크는 직접 주소 공간을 얻어서 사용할 것을 권장하고 있다. 반면, 여러 서비스 공급자로부터 서비스를 받는 네트워크는 해당 RIR로부터 직접 독립적인 CIDR 블록을 얻는 것을 권장한다. 예로, 1990년대 후반, 208.130.29.33은 `www.freesoft.org` 웹 서버에 할당되어 있었다. 이 주소를 분석해보면, 3개의 CIDR 접두어를 가지는 것을 알 수 있다. 우선 2백만 개 이상의 주소를 포함하는 큰 CIDR 블록인 208.128.0.0/11이 ARIN(북미 RIR)에서 MCI에로 할당되었다. 버지니아주에 있는 재공급업자인 Automation Research Systems는 MCI로부터 인터넷 접속을 승인받아 208.130.28.0/22를 부여받았다. ARS는 /24 블록을 공공 서버용으로 할당하였고, 208.130.29.33은 이 중의 하나다. 하나의 주소에 대한 이러한 여러 CIDR 접두어는 네트워크상의 서로 다른 영역에서 각각 사용된다. MCI 네트워크 외부에서는 208.128.0.0/11 접두어가 MCI 트래픽 영역으로 접근하기 위해 사용된다. 이 접두어는 208.130.29.33뿐만 아니라 초기 11비트가 동일한 약 200만 개 이상의 주소에 대해서 사용된다. MCI 네트워크 내부에서는 208.130.28.0/22가 사용되며, 패킷을 ARS로 보내는 역할을 한다. 반면 208.130.29.0/24는 ARS 네트워크 내부에서만 사용된다.
# CIDR와 마스크
서브넷 마스크는 IP 주소와 비슷한 방식으로 접두어의 길이를 표시하는 방법이다. 즉 32비트 길이의, 접두어 길이만큼의 1로 시작해서, 나머지는 0으로 채우는 것이고, 4개의 숫자 형태로 표현하는 것이다. 서브넷 마스크는 접두어 길이와 동일한 정보를 나타내지만, CIDR보다 먼저 개발되었다. CIDR는 IP 주소를 필요에 맞게 서브넷에 할당하기 위해서 일반적으로 네트워크에 사용되는 방식이 아닌, *가변길이 서브넷 마스크*(variable length subnet masks, VLSM)를 사용한다. 그러므로 네트워크/호스트 구분은 주소영역의 어느 부분을 경계로라도 일어날 수 있다. 이 과정은 일부분의 주소가 더욱 작은 부분의 주소로 분해되는 것처럼 계속해서 반복적으로 일어날 수도 있다. 이러면 더욱 작은 부분으로 분해하기 위해서 더 많은 부분을 가리는 마스크가 필요하다. CIDR/VLSM 네트워크 주소는 공공 인터넷을 비롯하여 기타 대형 사설 네트워크에서도 널리 사용되고 있다. LAN을 이용하는 보통의 컴퓨터 사용자는 실제로 이를 경험할 수 없는데, 이는 보통의 LAN 환경은 특별한 사설 RFC 1918 주소체계를 이용하여 식별되기 때문이다.
# 접두어 합침
CIDR의 다른 이점은 *라우팅 접두어 합침*(routing prefix aggregation, 혹은 summarization)이다. 예를 들어 16개의 연속된 /24 네트워크는 같이 합쳐져서(네트워크 주소의 처음 20비트가 모두 일치하는 경우) 외부에는 하나의 /20 네트워크로 보일 수 있다. 두 개의 연속된 /20 네트워크는 차례로 하나의 /19 네트워크로 묶일 수 있으며, 이는 계속될 수 있다. 이러한 방식은, 인터넷상에서 노선의 수를 많이 감소시켜주며, 라우팅 테이블이 라우터가 감당할 수 없을 정도로 커지는 것을 방지해준다. {| border="1" |+ CIDR !CIDR !Class !Hosts !Mask |- |/32 |1/256 C |1 |255.255.255.255 |- |/31 |1/128 C |2 |255.255.255.254 |- |/30 |1/64 C |4 |255.255.255.252 |- |/29 |1/32 C |8 |255.255.255.248 |- |/28 |1/16 C |16 |255.255.255.240 |- |/27 |1/8 C |32 |255.255.255.224 |- |/26 |1/4 C |64 |255.255.255.192 |- |/25 |1/2 C |128 |255.255.255.128 |- |/24 |1 C |256 |255.255.255.000 |- |/23 |2 C |512 |255.255.254.000 |- |/22 |4 C |1024 |255.255.252.000 |- |/21 |8 C |2048 |255.255.248.000 |- |/20 |16 C |4096 |255.255.240.000 |- |/19 |32 C |8192 |255.255.224.000 |- |/18 |64 C |16384 |255.255.192.000 |- |/17 |128 C |32768 |255.255.128.000 |- |/16 |256 C, 1 B |65536 |255.255.000.000 |- |/15 |512 C, 2 B |131072 |255.254.000.000 |- |/14 |1024 C, 4 B |262144 |255.252.000.000 |- |/13 |2048 C, 8 B |524288 |255.248.000.000 |- |/12 |4096 C, 16 B |1048576 |255.240.000.000 |- |/11 |8192 C, 32 B |2097152 |255.224.000.000 |- |/10 |16384 C, 64 B |4194304 |255.192.000.000 |- |/9 |32768 C, 128B |8388608 |255.128.000.000 |- |/8 |65536 C, 256B, 1 A |16777216 |255.000.000.000 |- |/7 |131072 C, 512B, 2 A |33554432 |254.000.000.000 |- |/6 |262144 C, 1024 B, 4 A |67108864 |252.000.000.000 |- |/5 |524288 C, 2048 B, 8 A |134217728 |248.000.000.000 |- |/4 |1048576 C, 4096 B, 16 A |268435456 |240.000.000.000 |- |/3 |2097152 C, 8192 B, 32 A |536870912 |224.000.000.000 |- |/2 |4194304 C, 16384 B, 64 A |1073741824 |192.000.000.000 |- |/1 |8388608 C, 32768 B, 128 A |2147483648 |128.000.000.000 |}
# 역사적 배경
IP 주소는 원래 전체 네트워크나 서브넷을 가리키는 *네트워크 주소*와 특정 기계나 네트워크로의 연결을 나타내는 *호스트 주소*의 두 개로 구성되어 있었다. 이러한 구분은 IP 네트워크상에서 자료 교환을 통제하기 위해 사용되었다. 전통적으로, IP 주소 영역은 세 개의 네트워크 클래스로 나누어졌는데, 각 클래스는 고정된 크기의 네트워크 주소를 가졌다. 클래스, 즉 네트워크 주소의 길이와 네트워크상에서의 호스트의 숫자는 IP 주소의 MSB로부터 항상 결정될 수 있었다. 접두어의 길이나 서브넷 마스크를 정하지 않고서도, 라우팅 프로토콜은 주소에 나타난 클래스를 사용하여 라우팅 테이블을 채워넣기 위한 접두어의 길이를 정할 수 있었다. 하지만, 실험적이었던 TCP/IP 네트워크가 1980년대 인터넷으로 성장함에 따라, 더욱 유동적인 주소 체계가 급속히 필요해졌다. 이는 서브넷, Variable-Length 서브넷, 그리고 마침내 CIDR의 개발을 야기하였다. 이전의 클래스 구분이 이제는 무시되므로, 새로운 시스템은 *클래스 없는 라우팅*이라고 불렸으며, 상대적으로 이전의 시스템은 *클래스 있는 라우팅*으로 불리게 되었다.