사이더(CIDR) 란 무엇인가?

CIDR?

AWS, GCP, Azure 등 퍼블릭 클라우드 등을 사용할 때 네트워크 설정에서 VPC 및 Subnet 을 생성하여 네트워크를 구성하게 됩니다. 이 때 CIDR(Classless Inter-Domain Routing) 블록을 이용하여 10.10.1.0/24 등과 같이 표시하게 되는데 주니어 개발자 꼬꼬마 시절에는 AWS 콘솔에서 네트워크, 시큐리티그룹 등에서 많이 봐 왔지만 선배들이 알려준 대로 그냥 C클래스일때는 /24, 특정IP만 지정할때는 /32 로 알고 살아왔었고, 아직도 그렇게 알고 있는 사람들이 분명히 있을 것 같아서 간단하지만 정확하게! 포스트를 작성 해 보려 합니다. 참고로 CIDR는 사이더 라고 읽으면 되고, 유툽에서 미국인 개발자가 발음하는걸 들어보니 싸이더 정도로 발음 합니다.

사이더(Classless Inter-Domain Routing, CIDR)는 클래스 없는 도메인 간 라우팅 기법으로 1993년 도입되기 시작한, 최신의 IP 주소 할당 방법이다. 사이더는 기존의 IP 주소 할당 방식이었던 네트워크 클래스를 대체하였다. 사이더는 IP 주소의 영역을 여러 네트워크 영역으로 나눌 때 기존방식에 비해 유연성을 더해준다. 특히 다음과 같은 장점이 있다. 급격히 부족해지는 IPv4 주소를 보다 효율적으로 사용하게 해준다. 접두어를 이용한 주소 지정 방식을 가지는 계층적 구조를 사용함으로써 인터넷 광역 라우팅의 부담을 줄여준다. - 위키백과 사이더 정의

재밌는 사실은 위의 위키백과 정의와 같이 CIDR는 네트워크 클래스를 대체 하였습니다. 선배들이 이야기 해 줬던 C클래스일때는 /24 는 엄밀히 말하면 틀린것 인데 계산해 보면 사실 C클래스와 일치 하긴 합니다. 아마도 CIDR를 자세히 설명하기 어려웠거나 귀찮았던 것이겠죠. 잡설은 그만하고 바로 CIDR를 계산하는 방법으로 넘어가겠습니다.

CIDR block

10.10.1.32 라는 IPv4 의 IP를 8비트의 2진수 4그룹 (= 32비트)으로 표현 해 보겠습니다.

1
00001010.00001010.00000001.00100000

10.10.1.44 라는 IPv4 의 IP를 8비트의 2진수 4그룹 (= 32비트)으로 표현 해 보겠습니다.

1
00001010.00001010.00000001.00101100

위에서 예로 들은 각각의 IP는 10.10.1.0/24 사이더 블록에 포함 된다는건 기존에도 알고 있었습니다. 그렇지만 왜? /24 블록에 포함 되는것인지 몰랐을 뿐 이죠. 사실은 정말 간단 합니다. 사이더의 접두어의 길이라고 불리우는 /16 /24 /32 는 위의 32비트 IP의 각 자릿수를 나타내는 것입니다. 앞에서부터 24번째까지 쭉 따라 오면

1
00001010.00001010.00000001

까지가 /24 입니다. 즉 그 뒤의 8비트 (구 D클래스)는 00000000 ~ 11111111 까지 256개 즉 2^8개의 IP 를 가질 수 있는 것 입니다. 그래서 /24가 C클래스와 동일하다는 얘기가 틀리지만 맞는? 말인것 입니다. 위키백과 정의에서 기존 방식에 비해 유연성을 더해준다 고 했으니 (구)B 클래스, C클래스 처럼 딱딱 떨어지는 /16, /24 말고 10.10.1.40/29 등과같은 사이더 블록의 경우 어떨까요?
산수와 눈치가 빠른 사람은 10.10.1.32이 사이더의 접두어인 10.10.1.40 보다 더 작은 숫자이므로 10.10.1.32는 10.10.1.40/29 사이더블록에 속하지 않을것이라고 생각 했을 겁니다. 하지만 저는 산수에 약하고 눈치도 느리므로 직접 그려 보겠습니다.
10.10.1.40/29

맨 위의 빨간색이 10.10.1.40 을 8비트의 2진수 4그룹으로 표시한 것이고 밑에 두개는 각각 위에서 예로 들었던 10.10.1.32, 10.10.1.44 입니다. 사이더의 접두어 인 10.10.1.40 의 접두어의 길이 인 /29 까지, 즉 처음부터 29번째 비트까지 동일하면 사이더그룹에 포함되는 IP 입니다. 10.10.1.32는 접두어와 28번째까지는 동일하지만 29번째가 0이기 때문에 포함되지 않습니다. 10.10.1.44는 29번째 까지 동일하므로 사이더 그룹에 포함 되는것 입니다.
정리하면, 10.10.1.40/29의 사이더 그룹에 포함되는 IP는

1
2
3
4
00001010.00001010.00000001.00101000
10.10.1.40 부터
00001010.00001010.00000001.00101111
10.10.1.47 까지

2^3 = 8개 입니다.

Subnet의 IP Range

위의 내용을 바탕으로 하면 서브넷을 생성 할 때 해당 서브넷에 몇개의 IP를 가질 수 있는지 쉽게 계산할 수 있습니다.
2^(32-CIDR접두어의길이) 가 IP의 갯수가 됩니다.
서브넷을 생성할 때는 사설 IP 주소 범위와 같은 주의할 점들이 몇가지 있는데 이건 다음에 따로 포스트를 작성 해 보도록 하겠습니다.

복잡한 부분은 저도 잘 모르기 때문에 다 빼고 실질적으로 사이더 그룹에 포함되는지 계산하는 방법 위주로 정리 해 봤는데 도움이 되었으면 좋겠네요!

Share