Skip to main content

Command Palette

Search for a command to run...

[ 살펴보기 ] Network - 서브넷 마스크

Updated
3 min readView as Markdown
[ 살펴보기 ] Network - 서브넷 마스크
C

A developer living in Busan, Korea

IPv4 주소는 4개의 옥텟으로 나뉘고 각 옥텟은 8비트 ( 1 바이트 ) 단위로 나뉘어 진다. 그렇기에 각 옥텟에 올 수 있는 십진수 값은 0 ~ 255 범위다. 그리고 IP 주소는 네트워크 주소와 호스트 주소 두 부분으로 나뉘며 이 둘을 구분하기 위해선 구분자를 사용해야 한다.

Classless 기반의 주소 체계 이전에 사용되었던 Class 기반 IP 체계에선 IP 주소의 가장 처음 옥텟 값을 통해 각 Class를 구분하여 네트워크 주소 범위를 판단할 수 있었지만 IP 주소 부족 문제를 해결하기 위해 제시된 Classless 기반의 주소 체계에서는 서브넷 마스크라는 구분자를 통해 네트워크와 호스트 주소를 구분한다.

서브넷 마스크

위에서 언급했듯이 서브넷 마스크는 IP 주소에서 네트워크 주소를 구분할 때 사용하는 구분자이며 일반적으로 255.0.0.0, 255.255.0.0, 255.255.255.0과 같이 10진수를 통해 표현한다.

서브넷 마스크는 IP주소에서 네트워크 주소와 호스트 주소를 구분할 때 2진수 숫자가 1인 부분을 네트워크 주소 0인 부분을 호스트주소로 구분한다. 2진수 11111111을 10진수로 변환하면 255가 되므로 서브넷 마스크에서 255인 부분이 네트워크 부분이 되고 0인 부분이 호스트 부분이 되는 것이다.

예를들어 IP 주소가 105.8.30.146이고 서브넷 마스크가 255.255.255.0라면 해당 IP의 네트워크 주소는 105.8.30.0이고 호스트 주소는 0.0.0.146이 된다.

255.255.255.0 : 서브넷 마스크
105.8.30.146 : IP 주소
105.8.30.0 : IP 주소에서 네트워크 부분
0.0.0.146 : IP 주소에서 호스트 부분

위의 작업을 2진수로 구한다면 그 과정은 다음과 같다

105.8.30.146 IP 주소를 2진수로 나타내면 다음과 같다

105 : 1101001 -> 01101001 
8 : 1000 -> 00001000
30 : 11110 -> 00011110
146 : 10010010 -> 10010010

105.8.30.146
-> 01101001 00001000 00011110 10010010

그리고 255.255.255.0 서브넷 마스크를 2진수로 나타내면 다음과 같다

255 : 11111111
255 : 11111111
255 : 11111111
0 : 0 -> 00000000

255.255.255.0
-> 11111111 11111111 11111111 00000000

그리고 IP 주소에서 네트워크 부분을 구하기 위해서 위에서 구한 IP 주소의 2진수 값과 서브넷 마스크의 2진수 값을 서로 and 연산한다 ( 둘 다 1인 경우 1이 된다 )

01101001 00001000 00011110 10010010 ( IP )
11111111 11111111 11111111 00000000 ( 서브넷 마스크 )

01101001 00001000 00011110 00000000

위의 결과를 다시 정리해보자. 서브넷 마스크는 2진수 숫자 1은 네트워크 0은 호스트 주소로 표시한다. 그러므로 위의 결과인 01101001 00001000 00011110 00000000이 네트워크 주소다

위의 2진수를 다시 10진수로 변경해 살펴보자

01101001 00001000 00011110 10010010 ( IP )
11111111 11111111 11111111 00000000 ( 서브넷 마스크 )

01101001 00001000 00011110 00000000 ( 네트워크 주소 )

/* 2진수롤 다시 10진수로 */
01101001 : 105 
00001000 : 8
00011110 : 30
00000000 : 0

/* 네트워크 주소를 10진수로 */
105.8.30.0

CIDR

IP의 서브넷 마스크는 CIDR ( Classless Inter-Domain Routing ) 형식으로 표현할 수 있다. CIDR 형식으로 서브넷 마스크를 표현할 때는 IP뒤에 / 기호와 서브넷 마스크를 2진수로 표현했을 때 1의 갯수를 숫자로 표시한다. 예를 들어 다음과 같이 서브넷 마스크를 표현할 수 있다.

105.8.30.146/24

위의 예제는 서브넷 마스크 값이 255.255.255.0인 IP address를 표현한다. 255.255.255.0 서브넷 마스크를 이진수로 변경하면 11111111 11111111 11111111 00000000이므로 1이 24개이기 때문에 / 뒤에 24라는 숫자를 통해 subnet mask를 표현한다.

Subnetting

위의 예제를 통해 IP 주소에서 서브넷 마스크를 통해 IP의 network 부분과 호스트 부분을 구분하는 방법을 살펴보았다. 예를 들어 현재 network의 서브넷 마스크가 255.255.255.0이라면 해당 network에서 각종 device에 할당될 수 있는 host IP 주소는 256개 된다 ( 0 ~ 255 ) 그리고 이 중에서 제일 처음 IP주소는 network 주소로 사용되고 제일 마지막 IP 주소는 broad cast IP 주소로 사용되므로 실제로 device에 할당할 수 있는 IP 주소는 254개가 된다.

이 때 서브넷 마스크를 수정하여 기본 network를 보다 작은 network로 분리하여 구분할 수 있는데 이를 subnetting이라고 한다. 현재 기본 network의 subnet mask가 255.255.255.0라고 가정해자. 그리고 이를 2진수로 표현하면 다음과 같다.

255.255.255.0
-> 11111111 11111111 11111111 00000000

위의 서브넷 마스크를 다음과 같이 수정하면 각각 126개의 host ip를 사용할 수 있는 2개의 network가 구성된다.

255.255.255.128
-> 11111111 11111111 11111111 10000000

만약 서브넷 마스크를 다음과 같이 수정하면 각각 62개의 host ip를 사용할 수 있는 4개의 network가 구성된다.

255.255.255.192
-> 11111111 11111111 11111111 11000000

More from this blog

[ 살펴보기 ] TypeORM - Transactions, Migration

Transation Database 종류에 따라 detail한 부분은 차이점이 조금씩 있겠지만 각 sql statement는 개별적인 transaction block을 통해 실행되며 Database 설정에 따라 sql statement의 실행 결과가 자동으로 commit되어 영구히 적용되거나 commit을 직접 실행하기 전까지는 영구히 적용되지 않을 수 있다. 대부분의 경우 default로 sql statement 실행 결과가 자동으로 comm...

Feb 9, 20256 min read
[ 살펴보기 ] TypeORM - Transactions, Migration

Dev Diary

184 posts