[Computer Network] - CIDR (Subnetting & Supernetting)

오현석·2024년 9월 12일
1

Computer Network

목록 보기
3/25

Subnetting & Supernetting

IP주소라는 것은 앞선 설명들처럼 두 가지 방식으로 설계되었다. Netid, Hostid 라는 부분으로 나누어져있다.
한편, 예를 들어 어느 기업에서 네트워크에 접속하기 위해 통신사로부터 Netid를 할당받는다고 해보자. 예를 들어, 210.94.0.0이라는 네트워크가 해당 기업에 할당되었다면 이 Class B 내에서 hostid를 기업이 나누어서 네트워크를 사용해야 한다. 그런데, 이 IP주소를 중구난방으로 주면 주소가 2^16개나 되기 때문에 이 주소들이 관리가 안된다. 관리가 안될 경우에는 다른 장치가 같은 IP주소를 써 충돌이 일어날 가능성이 존재하기 때문에 관리가 필요해진다.

이를 위해 이 넓은 주소들을 쪼개어서 편리하게 그룹을 짓는다면 더 편리하게 주소들을 관리할 수 있을 것이다. Hostid를 여러 부분으로 나누어 필요한 부서들에게 할당하고자 하는 것을 바로 Subnetting이라고 한다.

반대로, 300개의 host들을 위해 네트워크를 할당받으려고 할 때, Class C는 300개를 모두 할당해줄 수 없으므로 불가능하고, Class B는 300개를 할당해줄 순 있지만 2^16개 중에 300개만 사용하게 된다면 IP주소의 낭비가 매우 심해지기 때문에 문제가 생긴다.
이를 해결하기 위해 Class C 여러 개를 결합하여 하나의 큰 네트워크처럼 만드는 것을 Supernetting이라고 한다.

Subnetting

네트워크를 여러 작은 네트워크로 조각내는 것을 Subnetting이라고 한다.

먼저 Subnetting 되지 않은 네트워크를 먼저 보자.

이런 구조는 한 Router에서 관리하는 host들의 개수가 너무 많다보니 관리도 어렵고 충돌도 많이 일어나기 때문에 데이터 전송도 거의 되지 않을 수 있다.

이걸 해결하기 위해 Subnetting된 네트워크를 보자.

이 그림에서는 원래 141.14.0.0이라는 네트워크를 할당받았는데, 이걸 141.14.2.0, 141.14.7.0 등으로 네트워크를 나누었다. 이 네트워크 외부에서 봤을 때는 하나의 네트워크처럼 보이지만, 내부에서는 작은 그룹들로 나누어져있고 이 그룹들을 각각의 부서마다 할당이 가능해진다. 이런 이유때문에 관리가 편해진다는 장점이 생긴다.

각 서브넷은 마치 하나의 Network address처럼 하나의 Subnet address를 가지게 된다. 이 Subnetid는 hostid 중 일부분을 사용하게 된다.

그런데 이런 Subnetid를 정할 때 hostid에서 얼마 만큼을 사용할 것인지는 네트워크 관리자가 정하는 것이다. 그러다보니 IP주소만 보고서는 이 IP의 Hostid 부분에서 어디까지가 Subnetid이고, 어디부터가 Hostid인지를 알 수 없다.

이걸 알기 위해서 사용하는 것이 Subnet Masking이다. 서브넷 마스킹은 1이 연속되다가 0이 나타나는 방식으로 구성되어 있다. 이 마스킹을 사용하는 방법은 다음과 같다.

마스킹 값을 IP 주소와 AND 연산을 진행하게 되면, 마스킹 값에서 1이 있는 부분은 자기 자신이 나올 것이고, 0이 있는 부분은 0이 되어 가려질 것이다.

예를 들어, 적어도 1000개의 서브넷을 가지는 기업이 있다고 해보자. 1000개의 서브넷을 표현하기 위해서는 10bit가 필요하다. Class A를 사용 중이었다고 가정하면 전체 Hostid 24bit 중에서 10개의 bit를 Subnetid로 사용하고, 나머지 14개의 bit를 Hostid로 사용하게 된다. 이러면 10bit를 마스킹 할 수 있도록 하는 마스킹 값은 255.192.0.0이 된다.

첫 서브넷의 주소부터 보면, xxxxxxxx 00000000 01yyyyyy yyyyyyyy이다. 여기서 x는 Netid, y는 Hostid이다. 이를 Dotted Decimal Address로 표현하면 X.0.64.0이 된다. 첫 서브넷의 주소가 00000000 00이 아닌 이유는 모두 0이 되면 이것은 Special address가 되기 때문이다.
그 다음 서브넷의 주소는 xxxxxxxx 00000000 10yyyyyy yyyyyyyy 이므로 이를 Dotted Decimal Address로 표현하면 X.0.128.0이다.

이번에는 Class B를 사용하면서 적어도 12개의 서브넷을 필요로 하는 기업이 있다고 했을 때의 마스킹 값과, 첫 서브넷의 IP,이 서브넷에 할당된 첫 host의 IP와 마지막 host의 IP를 말해보자. 그리고 2번째와 마지막 서브넷에서도 똑같이 생각해보자.

다음은 Class C를 사용하면서 적어도 5개의 서브넷을 사용할 때의 상황에서 위와 같은 질문에 대해 답해보고 서브넷마다의 가능한 host의 개수를 말해보자. 이 경우에서는 서브넷팅을 사용하는 것보다 사용하지 않는 것이 더 유리헌데 그 이유에 대해서도 생각해보자.

VLSM(Variable-length subnet mask)

그리고 서브넷팅이라는 것을 굳이 똑같은 IP주소를 가지고 할 필요는 없다.

다음과 같은 상황처럼 원하는 호스트의 개수가 다 다르다면 서브넷팅을 2번 시도할 수 있다. 꼭 같은 Router 내에 있는 같은 네트워크라고 해서 동일한 서브넷 마스크를 쓸 필요는 없다.

Supernetting

앞선 설명처럼 Supernetting은 Class C 2개를 할당받아 이걸 merge 시키는 것을 말한다고 했다.

이러면 1개의 Supernet에는 4개의 네트워크가 할당된 것이다.

예를 들어, host가 1000개 필요하다면 Hostid가 10bit가 필요하니까, Class C의 주소가 인접한 네트워크를 4개 받아서 Netid는 22비트로 사용하고 Hostid를 10비트로 사용하는 것이다.

Supernetting은 Subnetting과 반대로 Netid 중 일부를 Supernetid로 사용한다. 예를 들어, X.Y.32.0, X.Y.33.0 이런 식으로 인접한 네트워크를 받아 비트가 1개씩 차이나도록 하는 것을 CIDR이라고 한다.

CIDR(Classless InterDomain Routing)

CIDR은 기존 클래스 개념의 IP에서 벗어날 수 있다. 8bit 단위로 나뉘어있던 기존 방식과 달리 유연하게 Netid와 HostId의 범위를 정할 수 있기 때문에, Subnetting과 Supernetting이 가능해진다.

또한, CIDR은 라우팅 테이블 내의 엔트리 개수를 줄일 수 있다.

라우팅 테이블은 라우터가 데이터를 어디로 보내는 지에 대한 정보를 가지고 있다. 즉, 주변 네트워크들과 호스트들의 정보, 다음 hop까지의 경로 정보 등을 담고 있다. A 네트워크로 가는 패킷은 1번 인터페이스로 나가야 한다와 같은 정보들을 가지고 있기 때문에 네트워크의 개수만큼 엔트리가 존재하게 된다.

라우팅 테이블의 엔트리 개수가 줄어드는 이유는 CIDR에서는 기존 클래스 개념의 IP가 사용하지 못했던 Supernetting 덕분이다. Supernetting을 통해 네트워크의 수가 줄어든다면, 네트워크마다 할당되어 있던 라우터 내의 엔트리가 줄어들게 된다.

엔트리가 줄어든 만큼 찾는 시간이 빨라지기 때문에 성능도 향상된다.

원래는 클래스 C 네트워크 192.168.0.0/24, 192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24가 각각 라우팅 테이블에 엔트리로 추가되었어야 했는데, 이를 192.168.0.0/22로 표현할 수 있으니 엔트리의 개수가 4개에서 1개로 줄어들게 된다.

또한, IP주소를 표시하면서 마스킹 값에서의 1의 개수도 같이 표기한다. 이 1의 개수는 Netid의 범위를 말한다.

profile
다함께 성장하는 개발자 세상을 꿈꾸는 MLOps 엔지니어입니다😁 작성 당시 제 생각의 흐름을 독자 모두가 공감하고 이해할 수 있게 적으려고 노력합니다. 조언이나 질문은 언제든 환영입니다!

0개의 댓글