상세 컨텐츠

본문 제목

네트워크 프로그래밍 - IPv4 Addresses, Bitwise operation, Classful Addressing

Computer Science/Network

by 2021. 11. 2. 08:44

본문

반응형

IPv4 Address

우리가 사용하는 주소체계는 IPv4체계로 32bit로 구성되어있다. 사설망 주소 및 loop back주소를 제외하고는 전세계에서 IP는 유일하다. 

IP는 32bit이므로 약 40억개 가량이 있으며, IP 주소 숫자를 2, 16, 256 진법 각각 표기하는 방법이 있다.

 

Dotted-decimal notation

보통 위와 같이 1byte씩 끊어 십진법으로 바꾸어 표기한다.

 

십진수를 이진수로 변경하는 방법은 다음과 같다.

 

111.56.045.78
221.34.7.8.20
75.45.301.14
11100010.23.14.67

위 네가지 IP표현방법 중 첫 번째 경우 045라는 8진수가 있다. 10진수만으로 이루어져야하므로 형식에 맞지 않다.

두 번째 경우는 IP는 총 4개의 10진수로 이루어져야하는데, 5개의 10진수로 이루어져있다. 

세 번째 경우는 IP주소를 표현할 때 1byte를 10진수로 변경하면 0~255의 범위의 수가 나와야 하는데 301이 있다.

네 번째 경우는 IP주소를 표현할 때 2진수와 10진수를 혼용해서 사용할 수 없다.

 

example

IP주소의 연산을 알아보자

시작주소가 146.102.29.0 이고, 마지막 주소가 146.102.32.255인 경우 주소의 범위는 다음과 같이 계산한다.

주소를 10진수로 표현할 때는 1을 더하여 나타낸다.

 

시작주소가 14.11.45.96 이고 주소의 범위가 32라면, 마지막 주소는 다음과 같이 계산한다.

만약 14.11.45.96이 시작주소이고 주소의범위가 201개라면 다음과 같다.

 

 

 IP체계는 32bit의 bit연산이므로 bitwise연산을 알아보자

Bitwise NOT operation

example

32bit 수에 NOT operation을 적용하는 연산은 다음과 같다.

 

Bitwise AND operation

 

Bitwise OR operation

 

Classful Addressing

Occupation of address space

IP주소는 32bit로 약 40억개 가량이 존재한다.

이 40억개 중 50%를 Class A에 할당해놓았다. 나머지 중 절반인 25%가 Class B로, 또 나머지의 절반이 Class C로 할당되는 형식이다.

 

Finding the class of address

Class를 나누는 기준은 위와 같다.

첫 번째 bit가 0일 경우에는 전체 40억의 절반가량이 해당되고, Class A로 분류된다. 

다음으로 Class B는 첫 번째 bit가 1로 Class A에 해당되지 않고 두 번째 bit가 0일 경우에 Class B로 분류된다.

 

이를 십진수로 변경하면, 첫 번째 bit가 0인 Class A의 범위는 0~127이 된다. 

Class B의 경우 10으로 시작하는 32bit binary 숫자들이므로 범위는 128~191이다. 

 

Finding the class of an address using continuous checking

Class를 구분하는 매커니즘은 그림과 같다.

 첫 번째 bit가 0이면 Class A로 분류하고 1이라면 다음,

 두 번째 bit가 0이라면 Class B로 분류하고 1이라면 다음 Class를 확인하는 구조이다. 

example

  1. 00000001 00001011 00001011 11101111
  2. 11000001 10000011 00011011 11111111
  3. 10100111 11011011 10001011 01101111

위 세 가지의 IP주소의 Class를 구분하면,

1번은 첫 bit가 0이므로 Class A

2번은 110으로 시작하므로 Class C

3번은 10으로 시작하므로 Class B이다.

 

  1. 227.12.14.87
  2. 193.14.56.22
  3. 14.23.120.8

위의 경우 십진수 IP주소로 표현되어있다.

1번은 첫 byte의 수가 224~239에 포함되므로 Class D

2번은 192~223에 포함되므로 Class C

3번은 0~127에 포함되므로 Class A임을 알 수 있다.

 

Netid and hostid

IP주소는 의미를 2개로 끊어 읽는데, 앞 부분을 Netid, 뒷 부분은 Hostid라고 한다. 

Netid는 전체 네트워크에서 각 네트워크를 구분하기 위한 주소로, 한 네트워크 한에서는 Netid가 같아야 통신이 가능하다.

Hostid는 각 네트워크 안에서 장비를 구분하기 위한 주소이다.

 

위 그림과 같이 네트워크 별로 Netid가 구분되고, 같은 네트워크 상에서 Hostid가 구분된다.

 

Netid와 Hostid의 범위는 Class 마다 다르다.

Class A는 1byte를 Netid로 뒤의 3byte를 Hostid로 사용하고, 

Class B는 2byte를 Netid로 2byte를 Hostid로,

Class C는 3byte를 Netid로 1byte를 Hostid로 사용한다.

Blocks in Class A

Class A는 Netid가 1byte, Hostid가 3byte이다.

Class A에서 Netid는 0~127로 구분되므로, 이 Netid를 특정 네트워크에 할당하고, 네트워크에 포함된 각 장비에게 나머지 Hostid를 할당한다.

Class A의 경우 하나의 Netid를 네트워크에 할당하면 1600만개에 달하는 Hostid를 할당할 수 있다. 그런데 네트워크에서 Hostid를 적게 사용한다면 나머지 사용하지 않는 Hostid는 낭비되는 것이다. 

 

따라서 Class 별로 구분함으로써 Netid의 개수와 Hostid의 개수를 조정해놓는 것이다. 

 

Blocks in Class B

Class B는 Netid 2byte와 Hostid 2byte로 구성된다. 

Netid의 가용범위는 첫 byte 숫자가 128~191까지이다.

Netid의 개수는 총 16,384개이고, Netid를 할당하였을 때, 같은 네트워크에 할당할 수 있는 Hostid의 개수는 2byte이므로 65,536개이다.

 

Blocks in Class C

Class C는 Netid 1byte와 Hostid 3byte로 구성된다. 

Netid의 가용범위는 첫 byte 숫자가 192~223까지이다.

Netid의 개수는 2백만 개이고, Netid당 Hostid의 개수는 256개이다. 

 

Hostid의 개수를 중심으로 보면 Class C는 Netid당 256인데 반해 Class B는 6만개로 차이가 크다. 이는 byte단위로 끊기 때문에 생기는 현상이다.

 

Class D,E는 나중에 알아보자.

 

Two-level addressing in classful addressing

Class에 따라서 Netid과 Hostid의 bit수가 다르다.

 

Information extraction in classful addressing

hostid의 bit가 모두 0인 경우 IP주소의 첫 번째 주소가 되고, 모두 1인 경우 마지막 주소가 된다.

netid 하나의 block안의 주소의 개수는 2^(32-n)개 이다.

반응형

관련글 더보기