Classless Addressing
클래스 없는 주소 지정
- IPv4 체계에서 IPv6 체계로 넘어가기 위한 중간 해결책으로 등장한 주소 지정 개념이다.
- 클래스 기반 지정 방식과 달리, Classless 방식에서는 주소를 필요한 만큼만 할당하는 것을 목표로 한다.
- Subnetting, Supernetting이 안 되어 있다는 가정 하에, Classful 방식에서는 IP 주소값만 주어져도 Net-id와 Host-id를 구분하는 것이 가능하다.
- Classful 방식과 달리, Classless 방식에서는 다른 정보없이 IP 주소값만 주어진 상태에서 Net-id와 Host-id를 구분할 수 없다.
Address Field (주소 필드)
- Classless 방식으로 할당된 주소에는 Network-ID에 해당되는 개념인 Prefix,
Host-ID에 해당되는 개념인 Suffix로 구성된다.
- 하지만, 관례상 Classless 방식에서도 Net-ID, Host-ID로 표기하는 경우가 대부분이다.
- 이론적으로 Prefix, Suffix의 길이는 0에서 32Bit가 될 수 있다. (Zero-Sum 관계)*
- Prefix의 길이가 길수록 작은 블록으로 이루어진 네트워크임을 의미하고,
Prefix의 길이가 짧을 수록 큰 블록으로 이루어진 네트워크임을 의미한다.
즉, Prefix의 길이와 네트워크 규모는 반비례관계에 있다.
* Suffix의 최소 길이
- 하나의 물리 네트워크에는 필수적으로 4가지의 주소를 구분짓고 있어야 한다.
1. Network Identifier (네트워크 주소)
2. Broadcast 주소
3. Router Interface 주소 (라우터와 연결된 링크의 주소)
4. 적어도 하나 이상의 Host 주소
즉, 실질적으로 Suffix의 최소 길이는 2Bit, Prefix의 최대 길이는 30Bit라 할 수 있다.
Example 5.25 (TCP/IP Protocol Suite p.138)
230.8.24.56/20에서 Suffix의 최솟값과 최댓값을 구하여라
Solution 5.25
- 경계에 해당하는 세 번째 Byte 영역과 네 번째 Byte 영역을 이진수로 변환하면 아래와 같이 쓸 수 있다.
- 230.8.24.53/20 = 230.8. 00011000 . 00110101/20 (Bold체는 Suffix를 의미한다.)
- 따라서 해당 네트워크 주소 중 최솟값은 230.8.00010000.00000000 = 230.8.16.0 이며,
최댓값은 230.8.00011111.11111111 = 230.8.31.255 이다.
Example 5.27 (TCP/IP Protocol Suite p.139)
하나의 주소 블럭 167.199.170.82/27가 주어졌을 때, 해당 네트워크에 존재하는 주소의 개수와 첫 번째 주소, 마지막 주소를 구하여라
Solution 5.27
- 주소의 개수는 \(2^{32-27}\) = 32개 이다.
- 해당 주소의 Network Mask = 11111111.11111111.11111111.11100000 = 255.255.255.224
- Network Identifier = AND(167.199.170.82 , 255.255.255.224) = 167.199.170.64/27
- 모든 네트워크 주소는 해당 네트워크의 첫 번째 주소이므로, 첫 번째 주소는 167.199.170.64/27이다.
- 주소의 개수가 32개이므로, 첫 번째 주소에서 31을 더한 값이 마지막 주소가 될 것이다.
- 마지막 주소는 167.199.170.61 + 31 = 167.199.170.92/27이다. (Dotted-Decimal 표기는 256진법임을 유념하자)
Addressing Rule (주소 지정 규칙)
1. 주소 분할 시, \(2^n\) 단위로 나누어야 한다.
- 즉, \(k\)개의 주소를 할당받고자 하는 경우, \(k\)이상의 가장 작은 \(2^n\) 개의 주소를 할당받아야 한다.
ex) 1,000개의 주소를 할당받고자 한다면, 적어도 1,024개의 주소를 할당받을 수 밖에 없다.
2. 주소 배분 시, 첫 번째 주소는 할당받은 주소의 개수로 나누어 떨어져야 한다.*
ex) 1,024개의 주소를 할당받았다면, 해당 네트워크의 Network Identifier 값은 1,024로 나누어 떨어져야 한다.
* Dotted-Decimal 주소 표기는 256진법 체계이다.
즉 Unsigned integer 타입으로 나타내고자 하는 경우 아래와 같이 표현할 수 있다.
\(\texttt{A.B.C.D} = \texttt{A}*256^3 + \texttt{B}*256^2 + \texttt{C}*256^1 + \texttt{D}*256^0\)
Ex. 조건 성립 검증 과정 예시
1) 256개의 주소를 할당받는 경우, 시작 주솟값이 256으로 나누어 떨어져야 하므로, D가 256의 배수이어야 하지만 D의 최댓값은 255이므로 조건을 만족시키기 위해 이 경우에서 D는 0이 되어야 한다.
2) 1,024개의 주소를 할당받는 경우, 주솟값이 1,024(=256 * 4)로 나누어 떨어져야 하므로, D가 256의 배수이어야 하지만 D의 최댓값은 255이므로 조건을 만족시키기 위해 이 경우에서 D는 0이 되어야 한다.
또한 C의 계수 256이 나누어 떨어진 상태이므로 C에 4를 나누었을 때 나머지가 없어야 하므로 C는 4의 배수이어야 한다.
이 조건을 만족시키는 많은 Network Identifer 중 하나로 18.14.12.0/22와 같은 값이 있다.
Example 5.30 (TCP/IP Protocol Suite p.141)
1,000개의 주소를 할당받고자 하는 ISP가 있다. 이 ISP가 할당받게 될 주소의 개수와 Prefix의 길이를 구하여라.
Solution 5.30
- \(1,000 \leq 2^k\) 를 만족하는 가장 작은 정수 \(k\)값은 10이다.
- 따라서 ISP는 \(2^{10}\) = 1,024개의 IP 주소를 할당받게 될 것이다.
- 따라서, Suffix의 길이는 10Bit이며, 이에 따라 Prefix의 길이는 22Bit가 된다.
Example 5.32 (TCP/IP Protocol Suite p.142)
어떤 기관에서 130.34.12.64/26와 같은 Network Identifier를 가졌다고 가정하자.
이 기관 네트워크를 동일한 크기의 4개의 서브넷으로 서브네팅하고자 할 때, 이 서브넷들에 관한 정보를 서술하라.
Solution 5.32
- 해당 네트워크의 Suffix는 6Bit이다.
- 따라서, 주소의 개수는 64개이며, 하나의 서브넷에는 16개의 주소가 할당될 수 있다.
- Original Network Identifier = 130.34.12.01000000/26 (볼드체는 Prefix를 의미한다.)
- 1st SubNet Identifier = 130.34.12.01000000/28 = 130.34.12.64/28 (First Address)
- 1st SunNet Broadcast Address = 130.34.12.01001111/28 = 130.34.12.79/28
- 2nd SubNet Identifier = 130.34.12.01010000/28 = 130.34.12.80/28
- 2nd SunNet Broadcast Address = 130.34.12.01011111/28 = 130.34.12.95/28
- 3nd SubNet Identifier = 130.34.12.01100000/28 = 130.34.12.96/28
- 3rd SunNet Broadcast Address = 130.34.12.01101111/28 = 130.34.12.111/28
- 4th SubNet Identifier = 130.34.12.01110000/28 = 130.34.12.112/28
- 4th SunNet Broadcast Address = 130.34.12.01111111/28 = 130.34.12.127/28 (Last Address)
Example 5.33 (TCP/IP Protocol Suite p.143)
어떤 기관에서 할당받은 하나의 주소 블럭을 3개의 서로 다른 크기의 Subblock으로 나누고자 한다.
할당받은 주소의 시작값은 14.24.74.0/24이고, 각각의 Subblock들의 크기는 아래와 같을 때, Subblock을 설계하라.
(Subblock을 설계하라 함은, 각각의 Subblock의 첫 번째 주소를 Slash Notation을 통해 나타내라는 말과 같다.)
1. 한 Subblock은 120개의 주소를 가진다.
2. 한 Subblock은 60개의 주소를 가진다.
3. 한 Subblock은 10개의 주소를 가진다.
Solution 5.33
- Net-id 필드가 24Bit인 것으로 보아 C Class Type 주소 한 블럭을 할당받았음을 알 수 있다.
1. 120개의 주소를 나누기 위해서는, 120보다 큰 \(2^n\) 형태의 숫자 중 가장 작은 값인 \(2^7\)=128개의 주소로 나눌 수 있어야 함을 의미한다. 즉, 1번 Subblock의 Host-id 필드는 7Bit로 구성된다.
1번 Subblock의 첫 번째 주소 = 14.24.74.0/25이며 이는 \(2^7\)으로 나누어지므로 타당하다.
2. 60개의 주소를 나누기 위해서는, 60보다 큰 \(2^n\) 형태의 숫자 중 가장 작은 값인 \(2^6\)=64개의 주소로 나눌 수 있어야 함을 의미한다. 즉, 2번 Subblock의 Host-id 필드는 6Bit로 구성된다.
2번 Subblock의 첫 번째 주소 = 14.24.74.128/26이며 이는 \(2^6\)으로 나누어지므로 타당하다.
(1번 Subblock의 첫 번째 주소에서 \(2^7\)을 더하면 쉽게 구할 수 있다.)
3. 10개의 주소를 나누기 위해서는, 10보다 큰 \(2^n\) 형태의 숫자 중 가장 작은 값인 \(2^4\)=16개의 주소로 나눌 수 있어야 함을 의미한다. 즉, 3번 Subblock의 Host-id 필드는 4Bit로 구성된다.
3번 Subblock의 첫 번째 주소 = 14.24.74.192/28이며 이는 \(2^4\)으로 나누어지므로 타당하다.
(2번 Subblock의 첫 번째 주소에서 \(2^6\)을 더하면 쉽게 구할 수 있다.)
- 위와 같이 3개의 Subblock에 총 208개의 주소가 할당되었고, 48개의 주소가 남았다.
(C Class Type 주소는 Host-id가 8Bit로 구성되어 있어 총 256개의 주소를 할당할 수 있다.)
- 나머지 주소의 첫째 값은 14.24.74.208/24이고, 마지막 값은 14.24.74.255/24(Broadcast)이다.
Example 5.35 (TCP/IP Protocol Suite p.145)
어떤 ISP에서 하나의 주소 블럭을 3개의 그룹에게 요구에 맞춰 할당하려 한다.
주소 블럭의 시작 주소는 190.100.0.0/16이며 3개 그룹의 요구 사항은 아래와 같다.
Group 1. 64 Customer 각각은 약 256개의 주소를 필요로 한다.
Group 2. 128 Customer 각각은 약 128개의 주소를 필요로 한다.
Group 3. 128 Customer 각각은 약 64개의 주소를 필요로 한다.
Solution 5.35
※ 실제로, ISP에서는 아래와 같은 계층적인 방법으로 Customer에게 주소를 할당한다.
- 시작 주소의 Net-id 필드가 16Bit인 것으로 보아 B Class Type 주소임을 알 수 있다.
- B Class 주소는 최대 \(2^16 = 2^8 * 2^8\) 개 할당될 수 있다.
- 그룹의 첫 번째 주솟값 계산의 편의를 위해 그룹 1~3에서 필요로 하는 주소의 개수를 아래와 같이 둘 수 있다.
Group 1. 64 * 256 Addresses = 2^14 Addresses
즉 Group 1의 첫 번째 주솟값에 64*256을 더하면 Group 2의 첫 번째 주솟값을 구할 수 있다.
Group 2. 128 * 128 Addresses (각각의 Customer끼리, 25Bit의 Net-id 필드로 구분) = 64 * 256 Addresses = 2^14 Addresses (Group 2의 Network 주소는 18Bit)
즉 Group 2의 첫 번째 주솟값에 64*256을 더하면 Group 3의 첫 번째 주솟값을 구할 수 있다.
Group 3. 128 * 64 Addresses (각각의 Customer끼리, 25Bit의 Net-id 필드로 구분) = 32 * 256 Addresses = 2^13 Addresses
즉 Group 3의 첫 번째 주솟값에 32*256을 더하면 잉여 공간의 첫 번째 주솟값을 구할 수 있다.
- Group 1~3에게 제공해야 하는 주소의 총 개수는 160 * 256 Addresses 이다.
- Group 1~3의 Customers에게 제공되는 첫 번째 주솟값들은 아래 표와 같다.
Customers \ Group | Group 1 | Group 2 | Group 3 |
Network ID | 190.100.0.0/18 | 190.100.64.0/18 | 190.100.128.0/19 |
1st Customer | 190.100.0.0/24 | 190.100.64.0/25 | 190.100.128.0/26 |
2nd Customer | 190.100.1.0/24 | 190.100.64.128/25 | 190.100.128.64/26 |
\(\vdots\) | \(\vdots\) | \(\vdots\) | \(\vdots\) |
Last Customer | 190.100.63.0/24 | 190.100.127.128/25 | 190.100.159.192/26 |
Reference: TCP/IP Protocol Suite 4th Edition
(Behrouz A. Forouzan 저, McGraw-Hill, 2010)
Reference: Data Communications and Networking 5th Edition
(Behrouz A. Forouzan 저, McGraw-Hill, 2012)