서브넷, 서브넷 마스크 확실하게 짚고 넘어가자
본 포스팅을 읽기 전에 IP 관련 포스팅을 읽으시는 걸 추천드립니다.
[기타 정보/Network] - IP, IP 주소, 클래스 분류 확실하게 짚고 넘어가자
| IP 클래스의 비효율성
IPv4는 초기에 클래스로 나누어서 할당을 방법을 택했습니다. 하지만 이 방식은 크게 비효율적이었습니다. 예로들어 클래스 B를 어느 중소기업체에게 할당했을 경우 65000여개의 아이피를 다 쓰는 것이 아닌 10000개 정도만 쓴다고 가정합시다. 그러나 10000개가 아닌 나머지 50000여개의 IP는 쓰이지 않은 채 이 기업체는 클래스 B의 하나를 점유하고 있는 상태가 되죠. 그렇다고 이 기업체에게 클래스 C를 IP를 할당하자니 IP자원이 너무 부족하게 되구요.
이러한 문제를 해결하기 위해 IP를 사용하는 네트워크 장치 수에 따라 효율적으로 사용할 수 있는 서브넷(Subnet)이 등장하게 되었습니다.
| 서브넷과 서브넷 마스크
서브넷은 말그대로 부분망이라는 뜻입니다. IP 주소에서 네트워크 영역을 부분적으로 나눈 부분망, 부분 네트워크를 뜻하죠. 그리고 이 서브넷을 만들 때 쓰이는 것이 바로 서브넷 마스크입니다. 이 서브넷 마스크를 이용하여 IP주소 체계의 Network ID와 Host ID를 서브넷 마스크를 통해 분리할 수 있습니다.
IP주소는 IP 클래스에 의해 분리되는 Network Prefix와 나머지 Host Number로 분리되게 됩니다. 서브넷 마스크에 의해 이루어지는 서브넷팅은 이 Host Number를 Subnet Number와 서브넷안에서 식별되는 Host Number로 다시 분리합니다.
서브넷 마스크의 형태는 기본적으로 IP주소와 같은 32bit 이진수입니다. IP와 똑같은 xxx.xxx.xxx.xxx 의 형태를 가지고 있죠. 서브넷 마스크의 목적은 IP주소와 AND연산하여 Network 부분의 정보를 걸러내려는 것입니다.
다음은 각 IP 클래스들의 기본 서브넷(Default Subnet)입니다.
클래스 A를 예로 들어보면 클래스 A의 IP가 116.81.97.8 일 경우 클래스 A의 서브넷 마스크는 255.0.0.0 이므로 이것을 이진수로 변환했을 경우 AND 조건을 수행했을 시 나오는 것은 116.0.0.0입니다. 이것이 바로 클래스 A의 Network ID입니다. 나머지는 Host를 식별하는 Host ID 부분이구요.
116.81.97.8 => 01110100.01010001.01100001.00001000
255. 0. 0. 0 => 11111111.00000000.00000000.00000000
---------------------------------------------------------------
01110100.00000000.00000000.00000000
그리고 IP주소 뒤에 /24 같은 표시를 붙은 것을 보실 수 있을 겁니다. 이것은 서브넷 마스크이 bit수를 의미하죠. 클래스 A를 예로 들면 서브넷마스크의 초기 8개의 bit가 1로 되어있기 때문에 /8로 붙습니다. 또 하나의 예를 들면 192.168.3.19/24는 네트워크 ID가 192.168.3.0 이며 서브넷 마스크는 255.255.255.0 이라는 뜻입니다. 이 서브넷 마스크는 Network ID부분은 1이 연속적으로 있어야하며, Host ID부분은 0이 연속적으로 있어야 합는 규칙이 있습니다.
여기서 기본 서브넷 마스크와 후에 다루어질 서브넷 마스크에 대한 차이를 이해해야합니다. 이 기본 서브넷 마스크는 클래스 체계에 의해서 기본적으로 Network를 나누기 위한 개념이고 후에 설명한 각각의 인프라에서 정한 서브넷 마스크는 공인IP네트워크 망 안에서 부분망들을 나누기 위한 것입니다.
| 서브넷팅을 파헤쳐보자
기본 A클래스의 IP를 그대로 할당하게 되면 할당 가능한 호스트 수가 16,777,216개나 됩니다. 하나의 A 클래스만 가지고 전체 IP를 관리하기에는 너무 비효율적이게 되죠. 부분적으로 관리하기에도 어렵고 브로드캐스팅을 했을 때 트래픽량을 감당하기도 어렵습니다.
서브넷팅은 이런 문제점을 해결하기 위한 방법입니다. 위의 예시에서 A클래스의 IP를 두 개의 서브넷으로 나누고 싶다고 가정합시다. 두 개의 서브넷을 나누려면 서브넷마스크에서 비트의 수를 하나 1로 셋하시면 됩니다. 비트의 수를 하나 더 1로 셋했을 시 변화는 다음과 같습니다.
- /8에서 /9로 변합니다. 서브넷 마스크가 255.0.0.0 에서 255.128.0.0 으로 변한다는 것을 의미합니다.
- A클래스 망이 두 부분으로 나뉘어집니다. Network ID가 116.0.0.0인 부분과 116.128.0.0 으로요
그렇다면 위에 예시로 들었던 116.81.97.8은 어느 서브넷에 위치해 있는 것일까요? 서브넷 마스크 255.128.0.0 을 AND 연산을 하면 116.0.0.0에 위치한 서브넷에 위치해 있다는 것을 알 수 있습니다.
116.81.97.8 => 01110100.01010001.01100001.00001000
255.128.0.0 =>11111111.10000000.00000000.00000000
---------------------------------------------------------------
01110100.00000000.00000000.00000000
즉, 한 Bit씩 서브넷 마스크에 추가할 때마다 네트워크의 크기는 2배 증가하고 할당할 수 있는 호스트의 수는 2로 나뉘어 지게 됩니다.
또 다른 예를 들어보겠습니다. C클래스인 194.139.10.2/26 의 Network ID와 Host ID는 각각 어떻게 될까요?
194.139.10.2=> 11000010.10001011.00001010.00000010
255.255.255.192=>11111111.11111111.11111111.11000000
---------------------------------------------------------------
11000010.10001011.00001010.00000000
위 계산을 통하여 Network ID는 194.139.10.0가 되고 Host ID부분은 .2가 된다고 알 수 있습니다.
여기서 조심해야 할 것은 각 Network ID에서 첫번째 주소는 Network Address로 쓰이고 마지막 주소는 Boardcast로 쓰이므로 가장 첫뻔째 주소와 가장 마지막 주소는 호스트에 할당할 수 없습니다. 이것은 모든 네트워크에서도 동일하게 적용되는 것이므로 주의하셔야 합니다. 아래의 표를 보면 어떤 말인지 바로 아실 수 있습니다.
그렇다면 이 네트워크 안의 서브넷을 나누는 역할은 물리적으로 어떤 장치가 담당할까요? 바로 라우터가 담당합니다. 이 라우터는 공인 IP주소를 할당받은 장치로서 서브넷 안의 호스트들이 외부망인 인터넷에 데이터를 송수신할 경우 그 호스트가 가상IP를 쓸 경우, 그 처리를 NAT(네트워크주소변환)를 통해 서브넷 가상 IP로 바꾸어주어 외부 서버와 호스트와의 통신을 가능하게 합니다. 만약 그 호스트가 공인 IP를 쓰고 있으면 NAT 처리를 하지 않겠지만 현재 인터넷 환경에서 그러한 경우는 거의 없다고 보면 됩니다.
즉, 나누어진 서브넷에서 다른 망에 있는 호스트끼리 통신을 해야할 때는 라우터를 통해서만 가능하다는 이야기가 됩니다. 물론 각 네트워크 ID가 같은 호스트들 끼리는 라우터를 통하지 않고도 바로 통신할수 있습니다.
여기서도 중요한 사실을 알 수 있는데요. 같은 네트워크에 있다 라는 의미는 바로 라우터를 통하지 않고도 통신할 수 있는 같은 Network ID를 가지는 망에 있다라는 것을 뜻한다는 것을 알 수 있습니다.
'기타 정보 > Network' 카테고리의 다른 글
Network - Proxy(프록시)와 Gateway(게이트웨이)란? 이 둘의 차이점은? (0) | 2021.04.26 |
---|---|
네트워크 - GSLB(Global Server Load Balancing)란? (0) | 2021.04.26 |
네트워크 - HTTP/HTTPS 차이점, HTTPS란? (0) | 2021.04.26 |
네트워크 - Wireshark(와이어샤크) 설치 및 패킷 분석 예제 (0) | 2021.04.26 |
IP, IP 주소, 클래스 분류 확실하게 짚고 넘어가자 (0) | 2021.03.31 |
[Network] Stateful, Stateless (0) | 2021.03.31 |
[Network] 소켓이란 (0) | 2021.03.31 |
[Network] 데이터(data) 수신 과정 - 네트워크 전기 신호(signal) (0) | 2021.03.31 |