기존의 클래스 기반 주소 체계는 네트워크 크기에 따라 효율적인 분류를 통해 네트워크 크기와 IP 주소 범위를 할당했다.
그러나 이 방식은 고정된 네트워크/호스트 비트 비율 때문에 IP 주소 낭비가 발생하는 단점이 있다.
이를 해결하기 위해 Subnetting이 도입됐다.
클래스 기반 주소 체계 설명
IP 주소는 32비트로 구성되며 네트워크와 호스트를 구분하는데,
클래스 기반 체계에서는 IP 주소의 처음 몇 비트를 기준으로 네트워크 크기를 결정한다.
1. 클래스 A
- 특징: 대규모 네트워크용
- IP 주소 범위: 0.0.0.0 ~ 127.255.255.255
- 네트워크 비트: 첫 번째 8비트 (1바이트)
- 호스트 비트: 나머지 24비트
- 서브넷 마스크: 255.0.0.0
- 네트워크 수: 128개 (2⁷)
- 호스트 수: 약 1,600만 개 (2²⁴ - 2)
예시: 10.0.0.0은 클래스 A 네트워크 주소
2. 클래스 B
- 특징: 중규모 네트워크용
- IP 주소 범위: 128.0.0.0 ~ 191.255.255.255
- 네트워크 비트: 처음 16비트 (2바이트)
- 호스트 비트: 나머지 16비트
- 서브넷 마스크: 255.255.0.0
- 네트워크 수: 약 16,000개 (2¹⁴)
- 호스트 수: 약 65,000개 (2¹⁶ - 2)
예시: 172.16.0.0은 클래스 B 네트워크 주소
3. 클래스 C
- 특징: 소규모 네트워크용
- IP 주소 범위: 192.0.0.0 ~ 223.255.255.255
- 네트워크 비트: 처음 24비트 (3바이트)
- 호스트 비트: 나머지 8비트
- 서브넷 마스크: 255.255.255.0
- 네트워크 수: 약 200만 개 (2²¹)
- 호스트 수: 254개 (2⁸ - 2)
예시: 192.168.1.0은 클래스 C 네트워크 주소
서브네팅 (Subnetting)
서브네팅은 클래스 A, B, C 네트워크를 더 작은 서브넷으로 나누는 기술이다.
이를 통해 각 서브넷은 고유한 서브넷 주소를 가진다.
더 작은 서브넷으로 나누기 위해서 서브넷 마스크를 이용한다.
같은 IP 주소를 사용하더라도, 이 IP에 서브넷 마스크를 AND 비트연산하여 서로 다른 서브네트워크 주소를 추출할 수 있다.
이렇게 각 네트워크를 세분화하여 특정 서브네트워크를 정의할 수 있다.
Subnetting Class A
위 그림을 보면 기존의 Net ID는 그대로 두고, Host ID를 세분화하여 Subnet ID를 만들었는데
이 서브네팅에서
Hostid가 모두 0인 주소는 해당 서브넷 자체를 나타내는 서브네트워크 식별 주소를 의미하고
Hostid가 모두 1인 주소는 해당 서브넷 내 Host로 데이터를 전송하는 브로드캐스트 주소를 의미한다.
(서브넷의 첫 번째와 마지막 주소임)
따라서, 각 서브넷에서 실제 호스트에 할당할 수 있는 주소는 네트워크 주소와 브로드캐스트 주소를 제외한 나머지다.
위 그림은 또한 Class A의 Subnetting 을 나타내고 있다.
Class A는 1000개의 subnet 작업이 필요한데, 모든 비트가 0과 1인 경우의 subnet ID를 포함하여 총 1002개의 서브넷이 필요하다.
1002개는 2^9 < 1002 < 2^10 이기 때문에
Class A의 Subnetting에는 총 10비트가 사용된다.
전체 네트워크 범위를 10비트인 1024개의 서브넷으로 나눈 모습이다.
이것은 모든 subnet id가 0과 1인 처음과 마지막 비트를 뺀 1022개의 subnet 주소 범위이다.
서브네트워크의 시작 주소는 네트워크를 식별하며, 끝 주소는 해당 서브넷에 연결된 모든 장치로 데이터를 전송할 때 사용된다.
이런 과정을 통해 위처럼 하나의 네트워크(사이트 X.0.0.0)를 서브네팅하여 여러 개의 서브네트워크로 나뉜다.
Subnetting Class B
Class B는 12개의 서브넷과 모두 0, 1인 주소 총 14개의 서브넷이 필요하다.
2^3 < 14 < 2^4 이므로 총 4비트가 subnetting에 필요하다.
Host ID를 총 16개의 범위로 나눈 Class B의 서브넷이다.
- 첫 번째 서브넷: X.Y.0.0 ~ X.Y.15.255
- 두 번째 서브넷: X.Y.16.0 ~ X.Y.31.255
- 세 번째 서브넷: X.Y.32.0 ~ X.Y.47.255
- ... (중략) ...
- 마지막 서브넷: X.Y.240.0 ~ X.Y.255.255
각각의 범위에는 12비트, 즉 4096개에서 2를 뺀 4094개의 컴퓨터 주소를 사용할 수 있다.
Subnetting Class C
Class C는 5개의 서브넷과 2개의 특별 주소를 합쳐서 총 7개의 서브넷이 필요하다.
이를 위해 Class C에는 결국 3비트가 필요하다.
서브넷당 32개의 주소가 제공되고, 이 중에서 hostid 0과 1은 특별주소로 사용되고 있다.
Variable Length Subnetting (가변 길이 서브네팅)
예를 들어 각 서브넷에 필요한 호스트 수는 60, 60, 60, 30, 30. 이라고 할 때
총 5개의 서브넷을 만들어보자.
일단, IP 주소에서 서브넷 마스크는 호스트 ID 비트를 사용하여 범위를 결정하기 때문에
호스트 수를 먼저 보자.
호스트 수 공식: 2^h
( h는 호스트 ID 비트 수, 2는 네트워크 주소와 브로드캐스트 주소로 예약됨)
60개의 호스트를 수용해야 하는 서브넷을 만들기 위해선
위 호스트 수 공식이 60보다 크거나 같아야 한다.
h가 6일 때 가능하므로 서브넷 마스크는 /26 (네트워크 비트)이다.
여기에서 /26은 처음 26비트가 네트워크를 식별하는 데 사용되고, 나머지 6비트가 호스트를 식별하는 데 사용된다는 뜻이다.
서브넷 마스크는 네트워크 비트를 1로, 나머지를 0으로 표현한다.
/26는 처음 26개의 비트가 1이므로, 이진수로 표현하면 다음과 같다
11111111.11111111.11111111.11000000
이를 10진수로 변환하면
서브넷 마스크: 255.255.255.192
30개의 호스트를 수용해야 하는 서브넷을 만들기 위해선
위 호스트 수 공식이 30보다 크거나 같아야 한다.
h가 5일 때 가능하므로 서브넷 마스크는 /27이다.
서브넷 마스크: 255.255.255.224
/26 서브넷은 더 많은 호스트가 필요하므로, 첫 세 그룹에 할당
/27 서브넷은 적은 호스트가 필요하므로, 마지막 두 그룹에 할당한다.
/26은 64개의 IP 주소 범위를 제공하기 때문에 다음과 같은 범위를 할당한다. (2^6 = 64)
- 서브넷 1: X.Y.Z.0 ~ X.Y.Z.63
- 서브넷 2: X.Y.Z.64 ~ X.Y.Z.127
- 서브넷 3: X.Y.Z.128 ~ X.Y.Z.191
/27은 32개의 IP 주소 범위를 제공하기 때문에 다음과 같은 범위를 할당한다. (2^5 = 32)
- 서브넷 4: X.Y.Z.192 ~ X.Y.Z.223
- 서브넷 5: X.Y.Z.224 ~ X.Y.Z.255
이렇게 가변 길이 서브넷 마스크를 사용하면, 네트워크를 다양한 크기로 나누어 유연하게 사용할 수 있다.
슈퍼네팅 (Supernetting)
여러 서브넷을 하나의 네트워크로 통합하여 관리할 수 있도록 하기 위해
여러 개의 클래스 C 주소를 결합하여 더 큰 범위의 주소를 생성하는 것이다.
이를 통해 주소 공간을 효율적으로 사용하고, 라우팅 테이블의 크기를 줄일 수 있다.
기존 호스트 ID 중 일부 비트를 서브넷 ID로 사용하여 더 많은 서브넷을 생성하는 Subnetting과 달리,
Supernetting은 기존의 네트워크 ID(Netid)를 줄이고, 호스트 ID에 결합하여 라우팅을 단순화한다.
여기에서 새로 결합된 네트워크는 슈퍼넷 ID(Supernetid)로 표현한다.
a 상황의 경우, 네트워크마다 각각 별도의 항목을 유지해야 하므로 라우팅 테이블이 크다.
하지만 b는 네 개의 네트워크가 공통 프리픽스를 사용하여 하나의 경로로 통합되어 라우팅 테이블의 크기가 감소했다.
이렇게 supernetting을 통해 공통 프리픽스를 사용하여 하나의 경로로 통합할 수 있다
(prefix 길이는 지금까지 해왔던 네트워크 주소를 /n 형식으로 표현하는 것을 말함)