서브넷 마스크 ( 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

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


Classful vs Classless

위 내용을 이해했다면, Classful과 Classless 라는 용어의 의미를 이해할 수 있습니다.
즉, 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(2진수)로 표기하기 때문에 이와 같이 된 것이죠.

한 가지 규칙을 더 발견할 수 있는데, 그것은 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 이라는 것이죠.
이를 10진수로 나타내면 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 내에서 특별한 제한을 걸어두었거나 별도의 제한이 없다는 가정하의 설명)

 

출처 : https://blog.naver.com/opusk/220984120192

 

서브넷마스크(Subnet Mask) 와 서브넷팅(Subnetting)

서브넷 마스크 ( Subnet Mask )인터넷 문제가 생기거나 이런저런 네트워크 구성을 하게 되면 종종 우리는...

blog.naver.com

 

+ Recent posts