티스토리 뷰

서브넷 마스크 ( Subnet Mask )



인터넷 문제가 생기거나 이런저런 네트워크 구성을 하게 되면 우리는 자주 인터넷 속성창을 들여다 본다.

그러다보면 자주 만나게 되는게 IPv4이다.

IPv4를 보면 8비트 4개로 구성된 32비트의 숫자로 구성되어 있다.

즉, 192.168.223.244  대략 이런형식이다.

2진수로 나타내면, 11000000.10101000.11011111.11110100 즉 0~2^32(2의 32제곱) 까지의 숫자를 표현할 수 있고, 4,294,967,296개(약 42억) 만큼을 활용할 수 있다는 것이다.

하지만 이렇게 IP주소를 할당하게 되면, 너무나 비효율적이게 된다.

어떤 사람은 IP하나면 충분한데, 지나친 Host IP를 할당받아 자원의 낭비를 하는 셈이다.

한정된 네트워크를 효율적으로 사용하기 위해, 우선은 Class 개념이 도입되었다.

그리고 이 Class의 Network ID와 Host ID를 구분하기 위해 서브넷마스크(Subnet mask)를 사용한다.




Class 와 Network ID, Host ID


우선 서브넷 마스크에 대해 확인하도록 하자.

Class에 대해 포스팅하면 자연스럽게 설명하겠지만, 여기서도 중요하니 개념을 확인하자.

서브넷 마스크는 IP 주소 체계의 Network ID와 Host ID를 구분시키는 역할을 한다. 아래 그림을 보면 더욱 이해가 쉬울 것이다.


origin : Wikimedia  ( CC BY-SA )


위 그림을 보면, Class가 A ~ C 까지 있다. 하지만 Network address를 보니 223 까지이다.

나머지는 어디에 있을까?

여기서는 표현되어 있지 않지만, Class D와 E가 존재한다.

D는 Multicast group 용도로 예약(reserved)되어 있으며,

E는 미래에 사용하기 위한? 혹은 개발/연구용 쉽게 말해 Test 용도로 예약되어 있다고 보면 된다.


이러한 클래스의 구분으로 어느정도 네트워크의 '분리'가 가능하게 되었지만 이대로는 아직 부족했다.

왜냐하면 Host ID를 가장 적게 쓰는 Class C의 경우, 무려 256개를 사용하기 때문이다.

(물론 여기서 1~2개는 다른 용도로 제외된다 - 하지만 결국 사용되는 것은 맞다)


여기서 Subnet Mask는 AND연산을 통해 Network ID(고정), Host ID(가변)를 확인하여 동일한 Class인지 확인해준다.

물론, Subnet Mask가 Class 구분만을 위해서 있는 것은 아니다. 위에서 언급했듯이 그 한계가 있기때문에, 추가적인 분리역할을 해준다.




서브넷팅 (Subnetting)


위에서 말한 서브넷마스크가 하는 일 즉, 네트워크를 분리하는걸 서브넷팅(Subnetting)이라고 한다.

아래 그림을 참조하자.


origin : Wikipedia ( CC BY-SA )


Classful 이라는 명칭에서 알 수 있듯이, 위에 나와있는 것은 Class A~E로 특정된 내용이다. 

각 Class별로 Default Subnet이라는 것이 존재하는데,

예를 들어,


Class A의 경우 subnet은 255.0.0.0

Class B의 경우 subnet은 255.255.0.0

Class C의 경우 subnet은 255.255.255.0

가 Default Subnet이다.

당연한 것이, 각각의 Class에서 Network ID를 고정으로 사용하기 때문에 위와 같은 subnet이 default인 것이다.


그러면 Classless의 뜻을 알 수 있다.

즉, 기존 Class 형태에만 고정되지 않고 추가적인 Subnet에 따라 네트워크를 분리할 수 있다는 것이다.

다시 한번 정리하자면, 

Classful은 Subnet을 무시하고 기존 Class 형태를 따르는 것이고,

Classless는 Subnet형태에 따라 네트워크 형태를 가지는 것이다.



왜 Class로만 네트워크를 분리하지 않고 Classless 방식으로 서브넷팅을 할까?

이는 위에서 언급한대로, Class만으로는 수량도 부족하고 비효율적이기 때문이다.


위 그림을 다시 보면,

기존 Classful에서 Host Number였던 부분이 Classless에서는 Subnet Number + Host Number로 나누어져 있다.

기존 Class 방식에서 한 단계 더 나아가서 Subnet에 의해 네트워크가 한 번 더 분리되는 것이다.


예를 들어 Class C의 경우 Host Number는 0~255 까지는 숫자를 가질 수 있다. 총 256개이다.

IP가 3개 필요한 사람이 Class C 하나를 통째로 가지고 있다는 낭비 그 자체일 것이다. 그리고 이것을 누군가에게 공유해서 쓰자니 같은 네트워크 망이 되어버려서 보안 문제등에 노출이 되버린다. 원치 않는 결과가 나오는 것이다. 그럼 어떻게 하면 될까? 이미 Class에서 했던 것처럼 또 나누면 된다!

다음 그림을 참조하자.



뜬금없이 피자가 등장했다..

다이어그램으로 그려도 되지만 좀 더 직관적으로 묘사하기 위해서 위의 사진을 가져왔다.

보통 피자를 자를 때 (아닌 사람들도 있지만) 절반 씩 자른다. 한번 자르면 2조각, 두번 자르면 4조각... 이러한 형태이다.

Subnet Mask도 이와같은 형태를 가지는데, 아래의 표를 보자.


origin : Wikimedia ( CC BY-SA )


먼저, 256을 반으로 쪼개면 128이 된다. 그리고 그것을 반으로 나누면 64, 그 다음은 32, 16...

여기서 규칙을 발견하였는가? 바로 2의 배수의 역순이다. 결국 binary로 표기하기 때문에 이와 같이 된 것이다.


한 가지 규칙을 더 발견할 수 있는데, 그것은 Subnet 주소는 가장 상위 비트(가장 왼쪽)부터 1이 연속되어야 한다는 것이다.

예를 들어, 11111111 11010001 이런식은 안된다는 것!

위 테이블의 3번 째 열에 있는 CIDR이 이를 가리키는데, 관심 있었던 사람은 192.168.0.100/24  라는 표현을 본적이 있을 것이다.

여기서 /24의 의미가 바로 Subnet주소 bit에 1이 몇개 있는지 확인하는 것이다.

24개라는 말은 3 * 8bit이고 8bit는 1byte이다. 3바이트, 즉, 11111111 11111111 11111111 00000000 이라는 것이다. 이를 나타내면 255.255.255.0 이다.


사람 편의상 각 바이트를 Decimal(십진수)로 나타내고 있지만 실제로 컴퓨터는 Binary로 이해한다는 사실만 잘 기억하고 있으면 이해하는데 어렵지 않다.


예를 들어, 255.255.255.128 이라는 서브넷 마스크를 사용하면, C클래스에서 사용 가능한 0~255 의 Host ID를 둘로 나눠 사용할 수 있다.

즉, 0~127 와 128~255로 나누어서 사용이 가능한 것이다. 위의 피자를 정확히 2등분 해서 나눠 먹는다고 생각하면 된다.



이 표를 시각화하고 다양한 정보를 담은 테이블도 있는데, 이미지 허용 여부가 부정확하여 아래에 링크를 대신한다.

http://packetlife.net/media/library/15/IPv4_Subnetting.pdf



마지막으로 위의 내용들을 한번 적용해 보자면, 아래와 같이 표현할 수 있겠다.


피자를 반으로 나누었는데 0번 조각은 누구것이고 1번 조각은 누구것인지 구분할 수 있는 이유가 바로 subnet mask 8번째 비트에 있는 1 때문이다.

만약 위의 그림과 다르게 나의 IP가 154가 아니라 92같이 128보다 작은 숫자였다면, 위에서 비교되는 8번째 비트는 0이었을 것이고, 그렇다면 0~127까지의 Host IP를 가지게 되는 것이다. 그러면 접근하려는 IP address 192.168.0.96 은 같은 네트워크 망이기 때문에 접근이 가능해진다.

(물론 여기서는 Host IP 내에서 특별한 제한을 걸어두었거나 별도의 제한이 없다는 가정하의 설명이다)



댓글
댓글쓰기 폼