1982년 프로토타입 인터넷 지도
**네트워크 클래스**는 IPv4에서 IP 주소의 첫 번째 구조 변화를 나타낸다.

클래스 도입 이전
---------

원래 32비트 IPv4 주소는 호스트가 연결되어있는 특정 네트워크를 가리키는 단순히 8비트의 *네트워크* 영역과 해당 네트워크 내에서 호스트의 주소를 가리키는 *나머지* 영역으로 단순하게 구분되어 있었다. 참고로 이 형태는 랜 도입 이전에 정해졌는데, 이때는 ARPANET과 같은 적은 수의 대규모 네트워크밖에 없었다.

클래스
---

덕분에, IP 주소의 정의가 바뀌었으며, 3개의 다른 크기의 네트워크 영역이 다음 표와 같이 정의되었다.(비트단위)

| 클래스   | 앞선 비트   | 네트워크 영역   | 나머지 영역 |
| --- | --- | --- | --- |
| 클래스 A |     0 | 8 |     24 |
| 클래스 B |     10 | 16 |     16 |
| 클래스 C |     110 | 24 |     8 |
| 클래스 D (멀티캐스트) |     1110 |  |  |
| 클래스 E (예약됨) |     1111 |  |  |

이는 각 클래스당 다음과 같은 수의 네트워크 및 주소를 가능하게 한다. 단, 실제 개수가 예상보다 작다는 것을 유념하기 바란다. 이는 몇몇 값들, 예를 들어 0만으로 이루어진 값등은 허용되지 않기 때문이다.

| 클래스   | 앞선 비트   | 총 네트워크 수   | 네트워크당 주소 수 |
| --- | --- | --- | --- |
| 클래스 A |     0 |     128 |     16,777,214 |
| 클래스 B |     10 |     16,384 |     65,534 |
| 클래스 C |     110 |     2,097,152 |     254 |

기존에 비해 더욱 커진 네트워크 표시 영역은 더 많은 수의 네트워크를 가능하게 해주었고, 이로 인해 임시적이나마 인터넷의 지속적인 성장을 유지할 수 있었다.

오늘날 IP 주소와 함께 널리 사용되는IP 주소 넷마스크는 필요없었는데, 이는 마스크의 길이가 순전히 IP 주소로부터 판별 가능했기 때문이다. 즉, 누구라도 IP의 첫 몇 비트만 보면 어떠한 클래스에 속하는지 알 수 있었기 때문이다.

어떤 주소가 다른 주소와 동일한 물리 네트워크에 속해있는지를 판단하는 이러한 간단한 방법은 효율적으로 동작했다(서브넷참조). 각각의 주소에 대해 네트워크의 번호를 추출해내고, 주소의 나머지 부분은 무시되었다. 네트워크 번호가 동일하다면, 두 주소는 동일한 네트워크로 보내어지게 되는 것이다.

클래스의 변경
-------

하지만, 이러한 첫 번째의 변화는 오래가지 못했다. IP 주소 부족은 여전히 계속되었다. 가장 큰 문제는 대부분의 사이트들은 "클래스 C"에 들어가기에는 너무 컸고, 대신 "클래스 B"를 할당받았다. 인터넷의 빠른 발전과 함께, 클래스 B의 가능한 주소는(기본적으로 214 즉 약 16,000개) 급속도로 소진되어 갔다. 이러한 문제 및 다른 여러 문제를 해결하기 위해 1993년경부터 네트워크 클래스는 사이더에 의해 대체되게 되었다.

IANA에 의한 초기 IP 주소의 할당은 효율적으로 이루어지지 못하였으며, 이는 문제를 악화시켰다. (하지만, 몇몇 기관이 불공평하게, 그리고 부적절하게 클래스 A를 가져갔다는 널리 퍼진 생각은 허위이다. 대부분의 그런 할당은 클래스의 도입 *이전*으로 거슬러 올라간다. 즉, 그때 할당한 주소들이 훗날 클래스 A라 불리게 되었을 뿐이었다.)

유용한 표
-----

### 클래스 범위

각 클래스에 사용되는 주소 범위는 다음 표에 일반적인 점과 10진법의 표기로 나타나 있다.

| 클래스 | 앞선 비트 | 시작주소 | 끝주소 | 해당 사이더 블록 |
| --- | --- | --- | --- | --- |
| 클래스 A |     0 |     0.0.0.0 | 127.255.255.255 |     /8 |
| 클래스 B |     10 | 128.0.0.0 | 191.255.255.255 |     /16 |
| 클래스 C |     110 | 192.0.0.0 | 223.255.255.255 |     /24 |
| 클래스 D (멀티캐스트) |     1110 | 224.0.0.0 | 239.255.255.255 |     NA |
| 클래스 E (예약됨) |     1111 | 240.0.0.0 | 255.255.255.255 |     NA |

### 특수범위

몇몇 주소들은 특별한 사용처를 위해 예약되어 있다(RFC 3330).

| 주소 | 해당 사이더 | 목적 | RFC | 클래스 | 전체 주소 개수 |
| --- | --- | --- | --- | --- | --- |
| `0.0.0.0 - 0.255.255.255` | 0.0.0.0/8 | Zero 주소 | RFC 1700 | A | 16,777,216 |
| `10.0.0.0 - 10.255.255.255` | 10.0.0.0/8 | 사설망 | RFC 1918 | A | 16,777,216 |
| `127.0.0.0 - 127.255.255.255` | 127.0.0.0/8 | 로컬호스트 Loopback 주소 | RFC 1700 | A | 16,777,216 |
| `169.254.0.0 - 169.254.255.255` | 169.254.0.0/16 | Zeroconf | RFC 3330 | B | 65,536 |
| `172.16.0.0 - 172.31.255.255` | 172.16.0.0/12 | 사설망 | RFC 1918 | B | 1,048,576 |
| `192.0.2.0 - 192.0.2.255` | 192.0.2.0/24 | 문서와 예제 | RFC 3330 | C | 256 |
| `192.88.99.0 - 192.88.99.255` | 192.88.99.0/24 | IPv6에서 IPv4로의 애니캐스트 릴레이 | RFC 3068 | C | 256 |
| `192.168.0.0 - 192.168.255.255` | 192.168.0.0/16 | 사설망 | RFC 1918 | C | 65,536 |
| `198.18.0.0 - 198.19.255.255` | 198.18.0.0/15 | 네트워크 장치 벤치마크 | RFC 2544 | C | 131,072 |
| `224.0.0.0 - 239.255.255.255` | 224.0.0.0/4 | 멀티캐스트 | RFC 3171 | D | 268,435,456 |
| `240.0.0.0 - 255.255.255.255` | 240.0.0.0/4 | 예약됨 | RFC 1700 | E | 268,435,456 |

### 비트단위 표기

아래 표에서 모든 자리는 이진수이며,

* *n*는 네트워크 주소를 나타낸다.
* *h*는 호스트 주소를 나타낸다.
* *X*는 특별한 목적이 없는 자리를 나타낸다.

```
클래스 A
  0.  0.  0.  0 = 00000000.00000000.00000000.00000000
127.255.255.255 = 01111111.11111111.11111111.11111111
                  0nnnnnnn.hhhhhhhh.hhhhhhhh.hhhhhhhh

클래스 B
128.  0.  0.  0 = 10000000.00000000.00000000.00000000
191.255.255.255 = 10111111.11111111.11111111.11111111
                  10nnnnnn.nnnnnnnn.hhhhhhhh.hhhhhhhh

클래스 C
192.  0.  0.  0 = 11000000.00000000.00000000.00000000
223.255.255.255 = 11011111.11111111.11111111.11111111
                  110nnnnn.nnnnnnnn.nnnnnnnn.hhhhhhhh

클래스 D
224.  0.  0.  0 = 11100000.00000000.00000000.00000000
239.255.255.255 = 11101111.11111111.11111111.11111111
                  1110XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX

클래스 E
240.  0.  0.  0 = 11110000.00000000.00000000.00000000
255.255.255.255 = 11111111.11111111.11111111.11111111
                  1111XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX

```