상세 컨텐츠

본문 제목

네트워크 프로그래밍 - Classless Addressing, Slash notation, Examples

개발/Network

by 2021. 11. 8. 12:40

본문

반응형

Classless Addressing

class를 완전히 없애버린 주소이다. 

전체의 절반 class A, 나머지의 절반 class B, C.. 와 같이 구분되는 classfull과는 달리 classless는 size 간의 관계가 없다. 

 

classfull에서 netid, hostid라고 사용했던 것을 각각 classless에서는 prefix, suffix라고 칭한다.

prefix의 길이는 1~32까지이다. 

 

example

인터넷이 한 block만 있고, 이 한 block에 40억개의 주소가 있다면, prefix는 0, suffix는 32이다.

인터넷이 총 40억개로 나누어지고 각 block마다 하나의 주소를 가지고 있다면 prefix는 32, suffix는 0이다. 

 

32bit의 크기는 고정이므로 prefix가 n이라고 한다면 n이 커질수록 suffix는 32-n으로 작아지고, 반대로 suffix가 커질수록 prefix가 작아진다. 

 

 

Slash notation

classless는 class가 없기 때문에 주소 뒤에 prefix length를 함께 써주는 slash notation이 필요하다.

prefix length가 있어야 block을 정의할 수 있다. 

 

example

classless주소 230.8.24.56 이 있을 때, prefix length가 있어야 block을 정의할 수 있다.

prefix length가 16이라면 앞에서 16bit까지 고정이고, 나머지는 0

prefix length가 20이라면 20bit 까지 고정이므로 [230.8.0001]1000.0 으로 230.8.16.0이다.

이러한 방식으로 나머지 prefix length도 고정하는 범위에 해당한다.

 

example

classless주소 12.23.24.78/8 의 경우 prefix length가 8이므로, network mask는 8bit까지가 1인 255.0.0.0 이고, suffix length는 24이다.

classless 주소 130.11.232.156/16 의 경우 prefix length가 16으로 network mask는 16bit까지 1인 255.255.0.0, suffix length는 16이다.

classless 주소 167.199.170.82/27 의 경우 prefix length가 27로 network mask는 27bit까지 1인 255.255.255.224, suffix length는 5이다.

 

example

block의 한 주소가 167.199.170.82/27 일 때, 네트워크 주소와, 첫 번째, 마지막 주소를 찾아보자.

prefix length가 27이므로 다음과 같이 27bit까지 network mask를 1로 하여 다음과 같이 구한다.

결과는 167.199.170.61/27 이 network address이자 첫 번째 주소이다.

 

마지막 주소를 구하는 방법은 first address에서 suffix 부분을 모두 1로 한 mask를 or연산하는 방법으로 다음과 같다.

따라서 결과는 167.199.170.95/27 이 마지막 주소이다.

 

example

block의 한 주소가 17.63.110.114/24 인 경우 주소의 개수는 2^(32-24) = 256이고,

prefix length가 24이므로다 다음과 같이 첫 번째 주소는 17.63.110.0/24 이다.

마지막 주소는 suffix부분을 모두 1로 or연산하여 다음과 같이 17.63.110.255/24 이다.

 

example

block의 한 주소가 110.23.120.14/20 이므로 prefix length가 20 즉 network mask는 255.255.240.0,

주소의 개수는 2^(32-20) = 4096이다. 

시작 주소는 다음과 같이 network mask와 and 연산하여 110.23.112.0/20 이다. 

마지막 주소는 다음과 같이 suffix 부분을 1로 or 연산하여 110.23.127.255/20 이다.

 

example

ISP라는 인터넷 회사가 1000개의 인터넷 주소가 필요한 상황이다.

1000가 필요하므로 2^10인 1024의 주소를 할당한다.

prefix length는 고정되는 bit들이므로 32-10 = 22이다.

시작 주소로 선택된 것이 18.14.12.0으로 18.14.12.0/22 ~ 18.14.15.255/22까지 총 1024개 주소를 사용할 수 있다.

 

 

classfull addressing을 slash notation으로 표현하면 위 그림과 같다.

 

example

어떤 기관이 class A 의 73.0.0.0 을 과거에 할당하고, 반납하지 않으면 classless에서 73.0.0.0/8 로 표현된다. 

 

 

classless의 subnet은 classfull와 동일한 매커니즘이다.

example

130.34.12.64/26 block을 4개의 subnetwork로 바꾸려고 하는 상황이다. 

network address 130.34.12.64에서 4개의 subnet을 위해서는 추가로 2bit를 더 할당해야하므로 prefix length는 28이 된다. 

130.34.12.01 000000/28

130.34.12.01 010000/28

130.34.12.01 100000/28

130.34.12.01 110000/28

의 네 가지이므로 각각 십진수로 표현하면, 

 

130.34.12.64/28

130.34.12.80/28

130.34.12.96/28

130.34.12.112/28

위와 같은 4가지 subnet으로 나뉜다. 

suffix의 시작 부분의 bit를 이용해서 subnet을 나눈다. 4개의 subnet이 필요한 경우 2bit를 사용했으므로 8개의 subnet이 필요하면 suffix에서 3bit이 필요하다. 

 

example

156.34.13.25/25 주소가 속한 네트워크를 4개의 subnet으로 구성해보자.

prefix length가 25이므로 network address는 156.34.13.0/25 이고 network mask는 255.255.255.128 이다.

4개의  subnet을 위해 2bit가 추가로 필요하므로

 

156.34.13.0 00 00000/27     156.34.13.0/27

156.34.13.0 01 00000/27     156.34.13.32/27

156.34.13.0 10 00000/27     156.34.13.64/27

156.34.13.0 11 00000/27     156.34.13.96/27

이와 같이 subnet이 나누어진다.

 

example

87.105.43.95/23 주소가 속한 네트워크를 8개의 subnet으로 구성해보자.

prefix length가 23이므로 network address는 87.105.00101010.00000000/23 즉 87.105.42.0/23 으로 network mask 는 255.255.254.0 이다.

8개의 subnet을 위해 3bit가 추가로 필요하므로

 

87.105.0010101 0.00 000000/26     87.105.42.0/26

87.105.0010101 0.01 000000/26     87.105.42.64/26

87.105.0010101 0.10 000000/26     87.105.42.128/26

87.105.0010101 0.11 000000/26     87.105.42.192/26

87.105.0010101 1.00 000000/26     87.105.43.0/26

87.105.0010101 1.01 000000/26     87.105.43.64/26

87.105.0010101 1.10 000000/26     87.105.43.128/26

87.105.0010101 1.11 000000/26     87.105.43.192/26

이와 같이 subnet이 나누어진다.  

 

 

example

주어진 주소 14.24.74.0/24 의 네트워크에 3개의 subnet을 만드는데 각 subnet의 크기가 다르다. 

각각 120, 60, 10 개의 다른 크기의 주소를 가진 subnet으로 분리하는 방법을 알아보자. 

 

120개의 주소를 얻기 위해서는 128 = 2^7 이므로 7bit가 suffix bit로 필요하다.

60개의 주소는 64 = 2^6 이므로 6bit가 suffix bit로 필요하다.

10개의 주소는 16 = 2^4 이므로 4bit가 suffix bit로 필요하다. 

 

14.24.74.0 0000000     14.24.74.0/25

14.24.74.0 1111111     14.24.74.127/25

suffix bit가 7개 필요하므로 뒷자리 7bit로 subnet address를 구분한다. prefix length는 32-7 = 25

 

14.24.74.10 000000     14.24.74.128/26

14.24.74.10 111111     14.24.74.191/26

suffix bit가 6개 필요하므로 뒷자리 6bit로 subnet address를 구분한다. 

prefix length는 32-6 = 26

 

14.24.74.1100 0000     14.24.74.192/28

14.24.74.1100 1111     14.24.74.207/28

suffix bit가 4개 필요하므로 뒷자리 4bit로 subnet address를 구분한다.

prefix length는 32-4 = 28

 

이를 그림으로 표현하면 다음과 같다.

 

 

이번에는 반대로 10, 60, 120 순으로 subnet을 분리해보자.

 

14.24.74.0000 0000

14.24.74.0000 1111

suffix bit가 4개 필요하므로 뒷자리 4bit로 subnet address를 구분한다.

 

14.24.74.00 010000

14.24.74.00 111111

10개의 주소를 할당한 후 위 주소의 범위로는 64개의 주소가 나오지 않는다. prefix가 고정된 상태로는 나오지 않아 prefix를 다음과 같이 변경해준 범위에서 주소를 할당해야한다.

 

14.24.74.01 000000     14.24.74.64/26

14.24.74.01 111111     14.24.74.127/26

prefix bit가 변경되어 25,26 bit가 00에서 01로 변경되어 고정된 주소로 할당해야 subnet에 64개의 주소를 할당할 수 있다.

 

14.24.74.1 0000000/25

14.24.74.1 1111111/25

suffix bit 7개를 온전히 이용하여 128개의 주소를 할당할 수 있다.

 

위와 같은 문제들이 주소의 개수가 작은 subnet부터 만들시 생길 수 있기 때문에, 되도록 작은 것 부터 만들지 않는다.

 

 

example

기관의 주소가 70.12.100.128/26 이고, subblock 3개를 각각 32, 16, 16개로 subnet을 분리한다고 하자.

 

70.12.100.100 00000     70.12.100.128/27

70.12.100.100 11111     70.12.100.159/27

32개의 주소가 필요하므로 suffix bit가 5개 필요하다.

prefix length는 32-5 = 27

 

70.12.100.1010 0000     70.12.100.160/28

70.12.100.1010 1111     70.12.100.175/28

16개의 주소가 필요하므로 suffix bit가 4개 필요하다.

prefix 27bit가 1로 올라가고,

prefix length는 32-4 = 28

 

70.12.100.1011 0000     70.12.100.176/28

70.12.100.1011 1111     70.12.100.191/28

prefix의 28bit가 1로 올라가고,

16개의 주소가 필요하므로 suffix bit가 4개 필요하다.

prefix length는 32-4 = 28

 

위 예제를 그림으로 표현하면 다음과 같다.

 

 

example

해당 예제는 subnet안에 subnet을 구분하는 예제이다.

  • 첫 번째 subnet group안에는 64개의 subnet이 있고, 이 64개의 subnet은 256개의 주소가 필요하다. 
  • 두 번째 subnet group안에는 128개의 subnet이 있고, 이 128개의 subnet은 128개의 주소가 필요하다.
  • 세 번째 subnet group안에는 128개의 subnet이 있고, 이 128개의 subnet은 64개의 주소가 필요하다.

190.100.0.0/16
❑ First Group: 64X256 addresses. → 2^6 * 2^8 = 2^14
❑ Second Group: 128X128 addresses. → 2^7 * 2^7 = 2^14
❑ Third Group: 128X64 addresses. → 2^7 * 2^6 = 2^13

 

190.100.00 000000.00000000     190.100.0.0/18

190.100.00 111111.11111111     190.100.63.255/18

첫 번째 group은 14개의 suffix bit가 필요하다. 

 

190.100.01 000000.00000000     190.100.64.0/18

190.100.01 111111.11111111     190.100.127.255/18

두 번째 group은 14개의 suffix bit가 필요하다. 

 

190.100.100 00000.00000000     190.100.128.0/19

190.100.100 11111.11111111     190.100.159.255/19

세 번째 group은 13개의 suffix bit가 필요하다.

 

그림으로 보면 다음과 같다.

 

다음으로 첫 번째 subnet group을 subnet으로 분리하자.

 

190.100.00000000.00000000

190.100.00000001.

190.100.00000010.

...

190.100.00111111.0000000

까지 64개의 subnet으로 구분한다.

 

 

두 번째 subnet group을 subnet으로 분리하자.

 

190.100.01 000000.0 0000000/25     190.100.64.0/25

190.100.01 000000.1 0000000/25     190.100.64.128/25

190.100.01 000001.0 0000000/25     190.100.65.0/25

...

190.100.01 111111.1 0000000/25     190.180.127.128/25

subnet group의 prefix 18bit에서

128개의 subnet으로 분리하기 위해 7bit가 추가로 필요하므로, subnet의 prefix는 25bit이다. 

 

세 번째 subnet group을 subnet으로 분리하면, subnet group의 prefix 19bit에 128개의 subnet으로 분리하기 위해 7bit가 추가로 필요하므로 각 subnet의 prefix는 26bit이다.

 

그림으로 보면 다음과 같다.

위와같이 주소를 subnet을 group으로 분류하고

 

각각의 subnet group을 subnet으로 분리한다.

반응형

관련글 더보기