'Mask'에 해당되는 글 1건

  1. 2009.04.16 서브넷 마스크 1

서브넷 마스크

network 2009. 4. 16. 13:39

서브넷 마스크의 개념

 

서브넷 마스크를 잘 이해하는 것이야 말로 IP 어드레스를 확실히 이해하는 가장 중요한 포인트입니다. 사실 네트워크 엔지니어들도 처음에는 서브넷 마스크 부분에서 많이 혼동하는 경우가 있고, 또 네트워크에 관한 시험이란 시험에는 이런 서브넷 마스크에 대한 문제들이 항상 단골로 등장하기 마련입니다. 그만큼 중요하단 뜻이겠죠?

자, 그럼 서브넷 마스크를 제대로 이해하려면 무엇이 가장 필요한지부터 알아볼까요?

먼저 이진수의 이해입니다. 제가 몇 번씩이나 이진수에 대해서 이야기 드리는건 그만큼 이진수의 완벽한 이해가 필요하기 때문입니다.

두번째는 논리적(Logical) AND에 대한 이해입니다. 그건 쉽죠? 논리적 AND의 성질은 양쪽이 모두 1인 경우에만 결과도 1이 된다는 겁니다. 즉,

0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1

이 된다는 겁니다.

이 두 가지를 확실히 이해하셨으면 서브넷 마스크는 아주 쉽습니다. 자, 그럼 첫 시간이니까 왜 서브넷 마스크가 필요한지, 그리고 서브넷 마스크의 정체가 무엇인지를 알아보도록 하겠습니다.

‘서브넷 마스크(Subnet Mask)’란 일단 말뜻 그대로 서브, 즉 메인이 아닌 어떤 가공을 통한 네트워크를 만들기 위해서 씌우는 마스크라고 생각하시면 됩니다. 다시 말해서 우리가 일단 어떤 IP 어드레스를 배정받게 되면 보통은 이 주소를 그대로 사용하지 않습니다. 왜냐? 자신의 입맛에 맞추어야 하기 때문입니다.

예를 들어 클래스 B주소를 받았다고 합시다. 이걸 그냥 사용할 수 있을까요? 하나의 네트워크가 6만 5,000여 개의 호스트를 가지는데, 이렇게 큰 네트워크를 구성했다간 브로드캐스트 영향이 너무 많아 아마 아무것도 할 수 없을 겁니다.

따라서 방대한 IP 어드레스를 유용하게 나누어 써야 하는 겁니다. 우리가 돼지고기 5근을 사서 집에 가서 볶아먹고 찌개 끓여먹으려면 일단 적당히 잘라야겠죠? IP 어드레스도 마찬가지입니다. 고기를 자를 때 칼을 쓰듯이, IP 어드레스를 자를 때는 서브넷 마스크를 사용합니다. 즉, 부여받은 원래 상태의 IP 어드레스에 서브넷 마스크를 씌워서 네트워크를 나누어 주는 겁니다.

대충 이해가 가시죠? 그럼 그걸 어떻게 나누는가? 그건 뒤에 가서 계속 알아보도록 하겠습니다.

아무튼 여기에서는 ‘서브넷 마스크는 주어진 IP 어드레스를 네트워크 환경에 맞게 나누어 주기 위해서 씌워주는 이진수의 조합이다’라는 개념만 아시면 되는 겁니다.

 


 


<그림 1>에서처럼 클래스 B를 받아서 서브넷을 만들지 않고 그냥 사용하는 경우는 브로드캐스트 도메인이 너무 커져서 브로드캐스트가 너무 많이 발생하게 됩니다. 따라서 정상적인 통신이 불가능해 집니다. 따라서 이 네트워크에는 서브넷팅이 필요하게 됩니다.

서브넷 마스크를 하게 되면 <그림2>와 같은 구성이 가능합니다. 즉, 방대했던 브로드캐스트 도메인을 좀 더 세분화한 것입니다. 서브넷 마스크는 원래 디폴트 서브넷 마스크가 ‘255.255.0.0’이었던 것이 새로운 서브넷 마스크 ‘255.255.255.0’으로 바뀝니다.

또한 각각의 서브넷 간의 통신은 라우터를 통해서만 가능합니다. 즉, 150.150.1.0 네트워크와 150.150.2.0 네트워크간의 통신은 라우터를 통해서만 가능해 지는 겁니다.

서브넷 마스크에도 기본은 있다
모든 IP 어드레스에는 서브넷 마스크가 따라다닙니다. 예를 들어 클래스 C 주소를 몽땅 쓰더라도 서브넷 마스크는 따라다닙니다. 즉, IP 주소를 나누어서 쓰기 위해서 사용하는 서브넷 마스크는 그 주소를 나누지 않더라도 항상 그 옆에 붙어 다닌다는 겁니다. 그래야 그 주소를 나눈 건지 나누지 않은 건지 알 수 있기 때문 입니다.

한 번 예를 들어볼까요?

‘210.100.100.1’이란 주소가 있습니다. 이 주소는 아시는 것처럼 클래스 C 입니다. 그래서 이 주소를 가지고 254개의 호스트에 IP 어드레스를 부여했다고 가정하겠습니다. 그럼 우린 주어진 클래스 C를 하나도 가공하지않고, 즉 쪼개지 않고 그대로 사용한 겁니다. 그렇다고 서브넷 마스크를 쓰지않느냐? 그건 아닙니다. 이처럼 주어진 클래스 C를 나누어 쓰지않고 몽땅 쓰는 경우에도 서브넷 마스크는 따라다니는데, 그게 바로 디폴트 서브넷 마스크(Default Subnet Mask), 즉, 기본 서브넷 마스크입니다.
클래스 C 의 경우 디폴트 서브넷 마스크는 ‘255.255.255.0’입니다. 클래스 B의 경우는 ‘255.255.0.0’이고, 또 클래스 A의 경우는 ‘255.0.0.0’입니다.

그러니까 주어진 네트워크를 하나도 나누지 않고 그대로 다 쓰는 경우는 위에서 설명드린 디폴트 서브넷 마스크를 쓰면 됩니다. 하지만 주어진 네트워크를 나누어서, 즉, 가공해서 쓰는 경우는 디폴트 서브넷 마스크를 쓰지않고 약간 고쳐서 쓰는 겁니다.(이런 경우는 디폴트 서브넷 마스크라고 하지 않고 그냥 서브넷 마스크라고만 합니다.)

자, 그럼 서브넷 마스크를 어떻게 고쳐야 할까요?

일단 여기서는 한가지만 정확히 알아두시기 바랍니다. 서브넷 마스크는 IP 주소를 가지고 어디까지가 네트워크 부분이고, 또 어디까지가 호스트 부분인가를 나타내는 역할을 한다는 겁니다. 따라서 서브넷 마스크를 보면 그 IP 주소의 네트워크 부분과 호스트 부분을 알 수 있는 겁니다.

이때 네트워크 부분은 서브넷 마스크가 이진수로 ‘1’인 부분이고, 호스트 부분은 서브넷 마스크가 이진수로 ‘0’인 부분이라는 겁니다. 즉, 예를 들어보면 ‘210.100.100.1’의 서브넷 마스크가 ‘255.255.255.0’이라면(여기서 255는 이진수로 바꾸면 1111 1111 입니다), 따라서 아래에서 보면,

‘255.255.255.0’은 ‘1111 1111.1111 1111.1111 1111.0000 0000’과 같습니다.

여기서 1인 부분은 네트워크 부분을 나타낸다고 했으니까, 앞에 세자리까지는 네트워크 부분이 되고, 뒤에 한자리는 호스트 부분이 되는 겁니다. 따라서 ‘210.100.100’이 바로 네트워크 부분이 되고 나머지 1이라고 씌여진 부분이 호스트가 되는 겁니다.

그러니까 클래스 C의 기본 성격과 똑같죠? 그래서 ‘255. 255.255.0’이 클래스 C의 디폴트 서브넷 마스크가 되는 겁니다. 이해가세요? 좀 어려우시더라도 계속 해보시면 아마 숙달될 겁니다. 여러분이 만약 정말 멋진 엔지니어가 되고 싶으시다면 이 서브넷 마스크는 꼭 숙달되어야 합니다. 자주 연습해 보시기 바랍니다.

여기서 잊어서는 안되는게 바로 서브넷 마스크가 이진수로 ‘1’인 부분이 네트워크가 되고 ‘0’인 부분이 호스트가 된다는 겁니다. 이것만 기억하시면 아무리 어려운 서브네팅 (Subnetting)도 가능할 겁니다.

자, 그럼 정말 서브넷 마스크를 어떻게 사용하는지 좀 더 자세히 알아보도록 하겠습니다.

<그림 3>은 IP 주소가 서브넷 마스크를 통과해서 네트워크 부분이 어디까지인지를 알아내는 과정을 보여주고 있습니다. 지금까지 말씀 드린대로 서브넷 마스크를 가지고 있지 않는 IP 주소는 없습니다. 비록 네트워크를 작게 나누지 않고 원래 클래스대로 사용하더라도 서브넷 마스크는 있습니다. 이게 바로 디폴트 서브넷 마스크 입니다. 어떤 IP 주소도 서브넷 마스크를 통과시키게 되면 네트워크 부분이 어디까지인지를 알수 있습니다. 그 규칙은 디폴트 서브넷 마스크도 마찬가지 입니다.

<그림 3>에서 ‘150.150.100.1’이라는 IP 주소에 디폴트 서브넷 마스크인 ‘255.255.0.0’을 씌웠습니다(150.150.100.1은 클래스 B 이기 때문에 디폴트 서브넷 마스크는 255.255.0.0입니다). 그러자 서브넷 마스크를 통과해서 내려온 네트워크 부분은 ‘150.150.0.0’이 되었습니다.

 


 

 

 

 

<그림 3>에서 서브넷 마스크를 통과해서 내려오는 값은 맨 위 줄의 IP 주소와 그 다음 줄의 서브넷 마스크를 이진수로 만든 다음, 논리적 AND(Logical AND)를 수행한 값이 맨아래 줄로 나오게 됩니다. 맨아래 줄에 나온 네트워크 부분을 잘 살펴보면 이전에 설명 드렸던대로 서브넷 마스크 부분이 이진수로 1인 부분(십진수로는 255인 부분)은 위에 있던 주소가 그대로 아래로 내려왔고, 서브넷 마스크 부분이 이진수로 0인 부분(십진수로도 0인 부분)은 위에 무엇이 있건 간에 무조건 0으로 되어서 내려오는걸 알 수 있습니다.

이렇게 나온 값 ‘150.150.0.0’이 바로 ‘150.150.100.1’의 네트워크 부분입니다.

그럼 이번에는 ‘150.150.100.1’에 디폴트 서브넷 마스크가 아닌 새로운 서브넷 마스크 ‘255.255.255.0’을 씌워보겠습니다. 어차피 서브넷 마스크의 성질은 똑같습니다. 따라서 서브넷 마스크가 1인 부분은 IP 주소가 그대로 내려오고, 서브넷 마스크가 0인 부분은 모두 0이 된다는 원칙에는 변함이 없습니다. 따라서 이렇게 서브넷 마스크를 통과해서 내려온 값이 새로운 네트워크 부분이 되는 겁니다.

 



 




<그림 4>에서처럼 서브넷 마스크가 ‘255.255.255.0’이 되자, 서브넷 마스크를 통과해서 아래로 내려온 네트워크 부분은 3자리의 십진수로 늘어났습니다. 즉, ‘150.150.100.0’이 되었습니다. 이 의미는 클래스 B 주소를 마치 클래스 C 처럼 사용한다는 의미입니다. 즉, 네트워크 부분이 3자리로 늘고 호스트 부분이 1 자리로 줄었습니다. 이렇게 하나의 주소를 서브넷 마스크를 씌워서 작은 네트워크로 만드는 것을 서브넷팅이라고 합니다
Posted by 으랏차
,