Computer/Linux

netmask howto

장선생™ 2004. 12. 18. 22:34
서브넷매스크는 커널이 목적지 IP 주소와 AND 연산하여 그 결과가
어느 네트워크에 속하는지 알아보고 어느 인터페이스로 보내게 될것인지
결정하는 숫자입니다....(책에 AND연산하는 예제가 있습니다.)

먼저 결론적으로 앞의 서브넷매스크값과 AND 연산하면 엉뚱한 결과가
나옵니다.
둘다 모두 255.255.255.192가 되어야 합니다.
(왜 AND연산하는지에 대해서는 원론적인 얘기이며 제가 설명한 실력이 되질
않네요. 다만 AND 연산의 특성을 고려해서 어떤값을 얻기 위해서 AND연산이 필
요한것
정도로만)

그렇다면 왜 하나의 C 클래스를 4개의 서브넷으로 나누웠을 경우 서브넷이
255.255.255.0이나 255.255.255.64가 아닌 255.255.255.192가 되는지 궁금한
질문이 맞죠?

C 클래스 기본 서브넷매스크는 255.255.255.0 입니다.
이건 다 아는 얘기이고, 이 값으로 AND 연산하면 맞다는 사실도 역시
알고 계실겁니다.

그렇다면 서브넷 마스크 값은 어떻게 결정되는지?
(책에는 나오지 않았군요. 예제만 있고......T.T)

192.168.10.0의 네트워크에 대한 서브넷 255.255.255.0를 달리표현하면
192.168.10.0/24 로 표현합니다.
이는 IP(8비트.8비트.8비트.8비트)에서 앞의 24비트가 네트워크 부분에
속한다는 표현입니다. 24비트는 (8비트*3)이 되죠.

11111111.11111111.11111111.00000000 = 255.255.255.0
(AND 연산에서 1은 상대방 비트값을 가져오고
0은 상대방 비트에 상관없이 모두 버립니다.)

기본 서브넷매스크에서 마지막 8비트를
00000000 = 0
을 조금 생각해 보죠.
(조금 편법적인 생각입니다만)
이는 마지막 8비트를 모두 호스트 부분으로 사용하겠다는 뜻입니다.

또한 8비트를 하나(n=1)의 네트워크로 사용하겠다는 뜻도 됩니다.
n=1에서 2진수로 표현하면 2의 0승 = 1이 되죠
따라서 굳지 표현한다면(여기에서 n은 네트워크 수로 봄)

11111111.00000000 = 255.0 : 하나의 네트워크(0이 모두 8개임에 주의)
이 됩니다...

부연설명:
n=1에서 1은 2진수로 2의 0승이므로 0비트를 사용함을 의미합니다.
따라서 당연이 호스트 부분에서 아무것도 없는 0이 옵니다.즉, 호스트
부분에서 네트워크 부분으로 사용하지 않겠다는 뜻임.(AND연산의 특성)

이번에는 2개의 네트워크라면
n=2가 되겠죠
즉, 2 = 2의1승이 되죠.
이것을 또한 바로 앞에서 처럼 적용하면,
1승=1비트를 사용하겠다는 뜻이므로,

11111111.10000000 = 255.128 : 두개의 네트워크(0이 이번에는 7개임에 주의)

됩니다.
(1승이므로 첫번째 비트(1승)에 1(네트워크를 뜻함)이 왔죠...)

이번에는 4개로 네트워크를 나누어 봅시다.
n=4가 되므로 4는 2의 2승.
이번에는 2승이므로 두번째 비트까지 1이 와야겠죠..

11111111.11000000 = 255.192가 나오네요

하나 더 해봅시다.
이번에는 16개로 나눈다고 하면
n=16이 되고 2의 4승. 앞에서 4번째 비트까지 1이됩니다.
즉,

11111111.11110000 = 255.240가 되네요...

이렇게 해서 2의 8승(8비트)까지 모두 네트워크 부분으로
처리하면 11111111 = 255가 됩니다.

이번에는 B 클래스로 적용해 봅시다..(점점 복잡해 지네요...T.T)
B 클래스는 앞의 16비트가 네트워크 부분이고 뒤의 16비스트가
호스트 부분이므로 기본 넷매스크 값은

11111111.11111111.00000000.00000000 = 255.255.0.0
이 됩니다.

이것은 B클래스를 하나의 네트워크로 구성한다는 뜻이지요..
(실제로 이렇게 구성하지는 안겠죠...너무 거대하기 때문에)

이 B클래스를 16개의 네트워크로 구성한다면,
(N=16 이므로 2의 4승, 즉 4비트가 추가로 네트워크로 구성)

11111111.11111111.11110000.00000000 = 255.255.240.0
이 됩니다.

그러면 한가지 검증(?)해 봅시다.
B 클래스 전체는 총 16,384개의 네트워크 수가 있으며, 기본적으로 하나의 네
트워크당
65,536개를 사용할 수 있습니다.

이 B클래스를 C클래스 처럼 하나의 네트워크당 256개의 IP주소를 사용할 수 있
게끔
하려면 서브넷과 네트워크 수는?
간단하죠...호스트부분이 256이므로 2의 8승 즉, 8비트만 사용하겠다는
뜻이므로

11111111.11111111.11111111.00000000= 255.255.255.0

이 되겠죠...
따라서 넷매스크 255.255.255.0은 C클래스에서 만 사용하는 넷매스크는
아닙니다.
네트워크 수는 당연히 총 16,384*256개가 되겠죠...
256의 3번째의 11111111를 의미합니다.
(많기도 하네요.........T.T)

## 추가
## B 클래스트는 총 네트워크 수가 16,384*255가 아니고
## 16,384*256가 되겠죠..
## 즉 16,384*256 = 4,194,304 개의 네트워크 수

## 계산이 잘못되어 있었군요...T.T

여기까지 이해했다면 이제는 정리만 하면 되겠군요.
앞의 과정들을 한눈에 보게되면

------------------------------------------------------------------------
서브넷수 호스트수   서브넷매스크
------------------------------------------------------------------------
2        126        255.255.255.128(11111111.11111111.11111111.10000000)
4         62        255.255.255.192(11111111.11111111.11111111.11000000)
8         30        255.255.255.224(11111111.11111111.11111111.11100000)
16        14        255.255.255.240(11111111.11111111.11111111.11110000)
32         6        255.255.255.248(11111111.11111111.11111111.11111000)
64         2        255.255.255.252(11111111.11111111.11111111.11111100)
------------------------------------------------------------------------

이 됩니다.
네트워크 부분의 비트는 모두 1이며 호스트 부분의 비트는 모두 0입니다.

이상입니다.....맞게 설명했는지 모르겠군요...
(지금 밤샘 중에 적는 글이라 잘못 설명되어 있을 수도
있겠군요...헙...지금이 아침 8시반)

(적고나니 저도 머리아프군요..............T.T)

http://ftp.linuxchannel.net/rfc/rfc18xx/rfc1878.txt
에 RFC문서가 있군요.........