전공공부/컴퓨터망 (Computer Network)

[컴퓨터망] Network Layer (5) - Subnet

jooona 2021. 2. 1. 12:50
반응형

IP 주소는 네트워크 계층에서 호스트를 찾기 위해 사용되는 32 비트로 구성된 식별자입니다. 컴퓨터나 라우터 등 네트워크와 연결된 모든 기기들은 이 IP 주소를 가지고 있어야만 합니다. 라우터는 여러 네트워크와 연결되어 있기 때문에 보통 여러 개의 IP 주소를 가집니다.

1. IP 주소의 클래스 (Class)

IP 주소는 네트워크 주소호스트 주소로 이루어집니다. 한 네트워크 안에 속하는 모든 호스트들의 네트워크 주소는 동일해야 합니다. 송신자가 보낸 데이터는 우선 네트워크 주소를 이용해 목적지가 속한 네트워크를 찾은 뒤, 그 안에서 호스트 주소를 이용해 정확한 수신자를 찾아갑니다. 이 네트워크 주소와 호스트 주소의 길이, 그리고 목적에 따라 A부터 E까지의 클래스로 나누어집니다. 각 클래스들은 가장 앞의 비트들을 이용해 서로 구분됩니다.

A 클래스는 0으로 시작하는 IP 주소로, 하나의 네트워크가 가질 수 있는 호스트 수가 가장 많은 클래스입니다. 하나의 네트워크 내에 호스트가 굉장히 많이 존재한다면, A 클래스를 이용하는 것이 좋습니다. 네트워크 주소를 위해 7 비트를, 호스트 주소를 위해 24 비트를 사용합니다. 가장 앞에 0을 반드시 사용해야 하기 때문에 A 클래스에서 나타낼 수 있는 IP 주소는 0.0.0.0~127.255.255.255입니다.

B 클래스는 10으로 시작하는 IP 주소로, 14개의 비트를 네트워크 주소에, 16개의 비트를 호스트 주소에 사용합니다. 128.0.0.0~191.255.255.255 내의 주소만 표현할 수 있습니다.

C 클래스는 110으로 시작하는 IP 주소로, 22개의 비트를 네트워크 주소에, 8개의 비트를 호스트 주소에 사용합니다. 192.0.0.0~223.255.255.255 내의 주소만 표현할 수 있습니다.

D와 E 클래스는 특정 용도로만 사용되기 때문에 IP 주소로 할당되지 않습니다. D 클래스는 멀티캐스트용, E 클래스는 예약용으로 사용하기 때문에 그냥 이런 게 있다는 정도만 알고 넘어가면 될 것 같습니다. 참고로 멀티캐스트는 특정 단말이 아닌 그룹에게 뭔가를 송신할 때 사용합니다.

2. 서브넷 (Subnet)

서브넷은 말그대로 하나의 네트워크를 작은 여러 개의 네트워크로 분할하는 것입니다.

A 클래스에서는 한 네트워크 내의 호스트들을 24비트를 이용해 표현하기 때문에 2^24개(16,777,216개)에 달하는 호스트를 운용할 수 있습니다. 하지만 C 클래스에서는 8비트 만을 호스트 주소로 사용하기 때문에 한 네트워크 내에 2^8, 즉 256개의 호스트 밖에 연결할 수 없습니다.

그런데 C 클래스는 네트워크 당 256개의 호스트를, B 클래스는 네트워크 당 65,536개의 호스트를 사용할 수 있는데, 이 차이가 너무 크다고 느낄 수 있습니다. 다시 말해, 300개의 호스트만 사용하면 되는 상황이면, C 클래스는 사용하기에 부족하고, B 클래스는 사용하기에 너무 크다고 느낄 수 있습니다. 또, IP 주소는 2^32개로 한정되어 있는데, 위의 상황에서 B 클래스를 이용하게 되면 65,000개 이상의 IP 주소가 낭비되게 됩니다.

또 A 클래스를 이용하는 네트워크의 경우 하나의 네트워크 내에 관리해야 할 호스트가 너무 많다는 문제점이 발생할 수도 있습니다.

이러한 문제를 해결하기 위해 호스트 주소를 서브넷 주소와 서브넷 내부의 호스트 주소로 분리하여 하나의 네트워크를 여러개의 내부 네트워크로 분리해서 관리할 수 있습니다.

하나의 네트워크를 네트워크 내부의 여러 개의 네트워크로 분리하여 IP 주소를 더 효율적으로 사용하고, 네트워크 내부의 관리를 더 수월하게 할 수 있습니다. 당연히 패킷이 목적지를 찾아가기도 훨씬 수월합니다. 아래의 그림을 참고하시면 더 이해하기 편하실 것 같습니다. B 클래스를 사용하는 네트워크를 여러 개의 서브넷으로 나누어 놓은 형태입니다.

3. 서브넷 마스크 (Subnet Mask)

서브네팅을 위해서는 서브넷 마스크가 필요합니다. 서브넷 마스크의 목적은 바로 IP 주소에서 네트워크 부분(네트워크 + 서브넷 부분)을 걸러내는 것입니다. IP 주소와 같이 32 비트로 구성되며, IP 주소에 마스크를 씌우듯, 비트 연산을 이용해 네트워크 부분만 걸러내는 역할을 합니다.

110으로 시작하는 것을 보면 알 수 있듯이, 194.139.10.3은 C 클래스의 IP 주소입니다. C 클래스에서는 마지막 8자리가 호스트 주소로 사용됩니다. 하지만 8자리 중 2개는 서브넷 주소로 사용하고 싶다면 위와 같이 서브넷 마스크를 만들어주면 됩니다. 상위 24개 비트는 당연히 클래스 식별자와 네트워크 주소이니 1로 채워주고, 마지막 8자리 중 서브넷에 해당되는 자리 수만큼 1로 더 채워주면 됩니다.

그 뒤에 몇 자리까지가 네트워크와 서브넷을 표현하는 자리인지를 알려주기 위해 194.139.10.0/26과 같이 네트워크를 표현해주면 됩니다. 위의 예에서 서브넷 마스크가 26번째 자리까지 1이었기 때문에 뒤에 /26과 같이 붙여주는 것입니다.

물론 서브넷이 아닌 기존 클래스를 사용하더라도 서브넷 마스크는 필요합니다. 서브넷을 사용하고 있는지 그냥 기존 클래스를 사용하고 있는지 여부를 그냥 봐서는 알 수 없기 때문이죠. 당연히 서브넷을 이용하지 않는 그냥 클래스 A라면 서브넷 마스크는 11111111.00000000.00000000.00000000입니다.

이렇게 클래스의 범주를 벗어나 서브넷을 이용해 네트워크 구분을 하는 것을 CIDR (Classless InterDomain Routing)이라고 합니다.

반응형