Post

NAT & Subnet Mask

IPv4 와 IPv6 주소체계

IP주소의 길이는 총 32bit으로 232개의 IP 주소를 표현할 수 있다.

그런데 MAC 주소는 248개이므로, IP 주소를 할당해줄 MAC 주소보다 IP 주소의 수가 매우 부족하다는 것이다.

그리고 네트워크 규모가 커질수록 단말장치의 수는 점점 늘어날 것이기 때문에 그에 다른 IP 주소의 고갈도 무시할 수 없다.

위와 같은 문제를 해결하기 위해 IPv6를 개발하게 되었다.

현재 우리가 사용하는 IP 주소는 32 bit 길이의 IPv4인 반면에, IPv6는 128bit 길이로 IPv4 보다 16배 많은 IP 주소를 만들 수 있다.

Private & Public IP

사설 IP와 공인 IP를 활용한 주소 관리

한정된 IP 주소를 효율적으로 사용하기 위해 네트워크를 사설망(private network) / 공인망(Public network)로 구분하여 할당되는 IP 주소를 다르게 사용하는 방법이 있다.

  • 공인망 외부망이라고 부르며, 말 그대로 상요자가 어디서든지 접속할 수 있는 네트워크로 인터넷이라고 생각하면 이해하기 쉽다. 공인망에서 쓰이는 IP는 공인 IP 라고 하며 인터넷상에서만 사용할 수 있는 유일한 IP 주소 값을 가진다.

  • 사설망 내부망이라고 부르며, 인터넷관느 달리 특정 조직이나 기관 내에서만 독립적으로 사용하는 네트워크다. 보안상의 이유로 외부로 부터의 접근을 통제해야하는 기업, 군대와 같은 조직에서 사용하는 인트라넷이 여기에 해당한다. 사설망에 적용되는 IP를 사설 IP 라고 부르며 인터넷 같은 외부망에서는 접근할 수 없고 내부 네트워크에서만 접근할 수 있다. 사설망 내부 통신에서만 활용되기 때문에 다른 사설망에서 중복된 IP를 사용해도 상관없다. 예를들어, 각 Q,W,E / R,T,Y 의 3대의 컴퓨터로 구성된 2개의 사설망 A, B 가 있다고 하자. 여기서 Q, R의 IP 주소가 동일하다고 해도 사설망 네트워크는 독립적으로 운용되기 때문에 상관없다.

사설망과 공인망 사이의 통신 - NAT

사설망을 이용하기 위해서는 사설 IP 주소가 필요하고 공인망을 이용하기 위해서는 공인 IP가 필요한데, 사설 IP를 공인 IP로 변경하면 사설망에서 인터넷으로 접속할 수 있다.

이를 위해서 사설망과 공인망 사이에 망을 중계하는 역활을 하는 네트워크 장비를 두고, 사설망에서 공인망으로 데이터를 보낼 때 이 장비에서 사설망의 IP 주소를 공인 IP 주소로 변경하여 데이터를 중계하면된다.

네트워크 장비는 사설IP와 공인IP 모두 가지고 있고 자신을 통과하는 데이터의 사설 IP주소를 자신의 공인 IP 주소로 변경해주는 작업을 네트워크 주소변환(NAT, Netowrk Address Translation) 이라고 하고 이런 NAT 기능을 수행하는 장비를 게이트웨이 라고 한다.

  • NAT 작동 과정
  1. 컴퓨터 A는 사설 IP ‘192.168.0.3’을 출발지 주소로 설정하고 목적지 주소는 컴퓨터 C의 공인 IP 주소 ‘200.23.12.5’로 지정하여 데이터를 네트워크 장비로 전송한다.
  2. 네트워크 장비는 전달받은 데이터의 출발지 주소를 네트워크 장비의 공인IP 주소 ‘221.49.96.24’로 변경한 후 공인망으로 보낸다. 이 떄 변경내용은 네트워크 장비의 NAT 테이블에 보관된다.
  3. 최종적으로 컴퓨터 C는 출발지 주소는 네트워크 장비의 공인 IP 주소이며 도착지 주소는 컴퓨터 C의 공인 IP 주소인 데이터를 수신한다. 그래서 컴퓨터 A에서 데이터를 보냈더라도 수신하는 컴퓨터 C의 입 장에서는 네트워크 장비가 데이터를 보냈다고 인식한다.

위 과정처럼 데이터를 사설망에서 공인망을 ㅗ보낼 경우 데이터의 출발지 사설IP 주소 정보가 공인 IP 주소로 변경되며 이를 Source NAT 라고 부른다.

반대로 공인망에서 사설망으로 보낼 때는 데이터의 목적지 공인 IP 주소 정보가 사설 IP 주소로 변경되기 때문에 Destination NAT라고 부른다.

이런 NAT 기능은 단순히 IP 주소를 변경는 기능 외에도 사설망에 속하는 여러 대의 컴퓨터가 하나의 공인 IP 주소를 공유하여 외부망과 통신할 수 있게 해주기 때문에 한전된 공인 IP 주소를 절약할 수 있다.

또한. Source NAT를 통해 사설 IP 주소가 공인 IP로 변경됨으로서 외부망에서는 사설망 내부 연결 정보를 파악하기 어려워 보안이 강화된다.

이렇게 NAT 기능을 적용하여 IP 주소를 사설 IP와 공인 IP로 구분해 효율적으로 운영하기 위해서는 IP주소들을 분류하고 그룹화 해야하는데, 이 때 사용되는 것이 서브넷마스크(Subnet Mask)이다.

Subnet Mask

네트워크에 연결된 단말장치들은 각각 고유의 IP 주소를 가지고 있고, 해당 IP 주소를 기준으로 서로 같은 네트워크인지 다른 네트워크 인지 구분된다. 즉, 각각의 IP주소를 가지는 단말장치들이 해당 IP 주소를 기준으로 동일한 네트워크로 묶여 서로 통신할 수도 있지만, 서로 다른 네트워크에 소속되어 통신을 할 수 없는 경우도 있다는 것이다.

IP 주소를 가지고 동일한 네트워크인지, 다른네트워크인지 판단하는 방법은 간단하다. 전체 IP 주소 범위를 일정 단위 그룹으로 나누고, 해당 단위 글부 중 동일한 그룹의 IP 주소를 가지는 단말장치들 끼리는 동일한 네트워크에 속한다고 판단한다.

이 떄 전체 IP 주소가 단위 그룹으로 나뉘도록 필터링 해주는 수단이 바로 서브넷 마스크이다.

서브넷 마스크를 통한 네트워크 분류 과정을 이해하기 위해서는 먼저 컴퓨터의 비트연산과 ‘AND 연산’을 먼저 이해해야 한다.

서브넷마스크를 사용해 단말장치의 수만큼 필요한 영역의 IP 주소 범위를 필터링 할 수 있다. 예를들어, IP 주소가’121.188.177.233’이 주어졌을 때, 주소의 앞 부분인 24bit 까지의 영역(121.188.177)만 필터링하여 사용하려고 할때 ANd 연산을 이용할 수 있다.

AND 연산으로 서브넷마스크 구하기

AND 연산은 두 개의 2진수 입력 값이 모두 1이면 결과 값도 1이 되고, 두개의 입력 값중 하나의 값만 0 이어도 결과 값이 0이되는 연산이다. 즉, ANd 연산에서는 입력 값 중 하나가 1이라면, 다른 입력 값이 무슨 값을 가지든 본래 자신의 입력 값을 그대로 출력 값으로 가진다. 예를 들자면, A가 1인 경우 B의 값이 무엇이든 출력 값은 B와 동일하고, B가 1이라면 A 값이 무엇이든 출력 값은 A와 동일하다.

이런 AND 연산 방식을 ‘121.188.177.233’ 에 적용해서 25bit 영역만 필터링 해보자면, 일단 AND 연산을 통해 동일한 결과 값이 출력되도록 24bit 영역에는 2진수 ‘1’을, 나머지 8bit 영억에는 ‘0’ 을 값으로 준다.

그러면 필털이을 위한 IP 주소인 ‘11111111.11111111.11111111.00000000’이 생성되고, 2진수의 AND 연산을 위해 IP 주소 ‘121.188.177.233’도 2진수로 변환하고 앞서 생성한 필터링을 위한 IP 주소와 AND 연산을 한다.

이렇게 해서 생성된 2진수 결과를 보기 쉽게 10진수로 변환하면 필터링된 IP 주소인 ‘121.188.177.0’을 얻을 수 있다.

그리고 필터링을 위한 IP 주소 ‘11111111.11111111.11111111.00000000’도 보기 쉽게 10진수로 변환한 주소 ‘255.255.255.0’가 서브넷마스크다.

이렇게 서브넷마스크를 사용해 우리는 네트워크에서 사용할 IP 주소를 필터링 할 수 있으며, 사용하고자 하는 IP 주소 범위를 설정할 수도 있다.

IP 주소의 클래스

총 232개의 IP 주소를 계획적으로 사용하기 위해 IP를 일정단위로 분류한 것이 IP Class다.

IP는 클래스별로 네트워크 ID와 호스트 ID로 나뉘며 각 클래스마다 네트워크 ID와 호스트ID의 길이가 다르다.

  • 네트워크 ID : 고정된 주소 값을 가진 첫 번째 영역으로 네트워크의 주소
  • 호스트 ID : 네트워크 ID 영역읠 제외한 나머지 IP 주소영역으로 단말장치의 주소를 나타냄

우리나라가 도, 특별시, 광역시 등으로 지역을 나눈 후에 중구, 동구와 같이 세부 자치 행정 구역을 나누듯이

네트워크 주소를 나타내는 네트워크 ID로 영역을 나누고 각 영역에 속하는 단말장치들에 할당할 수 있는 단말장치 주소를 호스트 ID로 결정하는 방식이다.

클래스 A

클래스 A는 IP 주소 중 전반부 8bit를 네트워크 ID, 나머지 후반부 24bit를 호스트 ID영역으로 구분하며 첫번째 비트는 반드시 ‘0’을 공통된 값으로 가진다.

이렇게 첫 번째 비트의 값이 0인 8bit 길이의 네트워크 ID구간을 10진수 변환하면 0~127 까지다. 즉, 클래스 A가 128개의 네트워크 주소를 설정할 수 있다는 뜻이다.

호스트 ID는 8bit 씩 옥탯(.)으로 3영역이 구분되며, 8bit로 된 각 영역을 10진수 변환하면 0부터 255까지의 값을 표현할 수 있다.

이론상 클래스 A는 0.0.0.0 ~ 127.255.255.255까지의 IP 주소를 사용할 수 있지만, 실제로는 네트워크 ID 0, 10,127번 대역의 IP 주소는 특별목적으로 사용처가 예약되어 있기 때문에 사용할수가 없다. 그래서 실제 클래스 A에서 사용가능한 네트워크 ID는 128개가 아니라 125개이다.

그리고 네트워크 ID 영역이 8bit이므로 서브넷마스크의 비트 수는 8이고, 여기서 서브넷마스크 비트 수만큼 1을, 나머지 호스트 비트수 24개 만큼 0을 값으로 주고 10진수로 변환해 Ip 주소 형식으로 나타내면 ‘255.0.0.0’이 되며, 이 값이 클래스 A의 서브넷 마스크이다.

클래스 B

클래스 B는 IP 주소의 전반부가 16bit가 네트워크 ID 영역이고, 나머지 16bit 호스트 ID 영역이다. 그리고 최상위 2개의 비트가 1,0을 공통 값을 가진다.

이런 네트워크 ID 구간을 10진수로 변환하면 128.0 ~ 191.255 까지다.

호스트 ID는 8 biit 간격으로 2개의 영역으로 구분되며, 각 영역을 10진수로 변환하면 0~255의 값이 된다.

네트워크 ID 영역이 16bit이므로 서브넷마스크 비트 수는 16이 되고, 호스트 비트 수도 16이다. 이 IP의 서브넷 마스크를 IP 주소 형식으로 나타내면 ‘255.255.0.0’이 된다.

서브넷팅

IPv4 네트워크 환경에서 서브넷 마스크를 통해 IP 주소를 효율적을 나누었지만 여기에도 한계는 있다.

예를들어, 클래스Cdml ‘198.168.0.0/24’ 라는 네트워크가 있다고 가정하자. 여기서 서브넷마스크의 비트 수가 24이므로 ‘255.255.255.0’이 된다. 이 서브넷 마스크를 가지고 단말장치에 할당할 수 있는 IP 주소를 계산해보면 네트워크 주소는 ‘198.168.0.0’이 된다.

이 네트워크 주소와 브로드캐스트 IP 주소인 ‘198.168.255.255’를 제외하면 단말장치에 할당할 수 있는 IP 주소의 범위는 ‘198.168.0.1~198.168.0.254’로 총 254개가 된다.

하지만 엄청 큰 규모의 회사가 아닌 이상 254개의 IP 주소를 모두 사용하지 않기 때문에 사용하지 않는 IP 주소가 많으므로 매우 비효율적이다.

이런 IP 주소의 낭비를 막기 위해 주어진 IP 주소 ‘198.168.0.1~198.168.0.254’ 범위 내에서 단말장치에 필요한 IP 수 만큼만 할당받아 사용하는 방법처럼, 하나의 큰 네트워크를 필요한 만큼 네트워크 영역으로 나누어 사용하는 방식을 서브넷팅 이라고하고 이때 나누어진 네트워크를 서브넷이라고 한다.

This post is licensed under CC BY 4.0 by the author.