IT/Network

[Network] IPv4 주소체계 및 Subnet, NAT의 개념

wookiist 2017. 6. 25. 17:27

IPv4 주소체계 및 Subnet, Subnet Mask와 NAT

네트워크를 공부하다보면 가장 기본적인 내용도 헷갈릴 때가 많다.
후에도 헷갈릴 수 있는 개념들에 대해서 정리해보려고 한다.
이 포스트는 전공서적 'Computer Networking (Top-Down Approaching)'을 보고 정리했다.

1. IP 주소체계를 살펴보기 위해 몇 가지 단어를 정의해보자.

Host는 보통 네트워크와 연결되는 하나의 Link를 가진다.

Host IP가 데이터그램을 보낼 때, 이 Link를 통해 보낼 것이다.

Router와 Interface의 관계를 살펴보자.

라우터의 일은 한 링크로부터 데이터그램을 수신하여, 다른 링크로 데이터그램을 전달하는 것이므로
라우터는 다음의 그림과 같이 연결된 링크를 2개 이상 가져야한다.


ROUTER_INTERFACE


따라서, 라우터는 필연적으로 여러 개의 인터페이스를 가진다.

모든 호스트와 라우터는 IP 데이터그램을 보내고 받을 수 있으므로, IP 주소를 갖는 각 호스트와 라우터의 인터페이스가 필요하다.

IP Address는 32-bit의 길이(4 bytes)를 가진다.

따라서 2^{32}개의 IP 주소가 존재한다. 약 40억 개의 IP 주소가 존재하는 것.

예를 들어, IP 주소가 193.32.216.9 라 하자.
이 주소를 이진수로 나타내면 다음과 같다.

11000001 00100000 11011000 00001001

전 세계 인터넷에서 모든 호스트와 라우터의 각 인터페이스는 유일한(NAT 뒤의 인터페이스를 제외하고) IP 주소를 갖는다.
인터페이스의 IP 주소는 연결된 Subnet이 결정한다.


SUBNET_MASK

위의 그림은 IP 주소체계와 인터페이스의 예를 보여준다.
이 그림에서 한 라우터는 3개의 인터페이스를 가지며, 7개의 호스트를 연결해준다.

할당된 라우터의 IP 주소를 살펴보면 왼쪽 3개의 호스트와 연결된 라우터 인터페이스는
223.1.1.xxx 유형의 IP 주소를 갖는다.
즉 동일한 왼쪽 24bits를 사용한다.

IP 용어로 위와 같은 세 호스트들의 인터페이스들과 라우터 인터페이스로 연결된 네트워크는 Subnet을 구성한다고 한다.
위의 그림에서 IP 주소체계는 이 Subnet에 223.1.1.0/24라는 주소를 할당한다.
여기서 '/24'를 Subnet Mask라고 한다.
다시 말해, 32bits 주소의 왼쪽 24bits가 서브넷 주소라는 것을 가리킨다.

인터넷 주소 할당 방식 CIDR

Classless Interdomain Routing의 약자인 CIDR은 Subnet 주소체계의 표기를 일반화하고 있다.
CIDR 방식에서 IP 주소는 두 부분으로 나눠진다.
32bits의 IP 주소를 a.b.c.d/x 로 표현할 때,
첫번째 부분은 주소 첫 부분의 bit수를 의미하는 x로 알 수 있다.

a.b.c.d/x 형식의 주소에서 MSB를 의미하는 x는 IP 주소의 네트워크 부분을 구성한다.
이를 해당 주소의 Prefix 또는 Network Prefix라고 한다.
CIDR_ISP

위의 그림에서 Wookii ISP는 200.23.16.0/20으로 시작하는 IP 주소를 모두 받아온다.
이 주소를 이진수로 나타내면 다음과 같다.

11001000 00010111 00010000 00000000

여기서 x = 20이므로
IP 주소에서 11001000 00010111 0001까지만 일치하면 Wookii ISP쪽으로 데이터가 오게된다.
Wookii ISP를 이용하는 조직들은 공통적으로 11001000 00010111 0001 부분을 가지므로, 이런 형태의 한 엔트리만으로도 ISP 목적지로 패킷의 전송이 충분하므로, 이런 라우터들에게 Forwarding Table의 크기를 상당히 줄여준다.

두번째 부분은 32 - x bit로 구성된 LSB 부분이다. 이 부분은 Wookii ISP 내에서 같은 Network Prefix(20bits 부분)를 갖는 모든 장비를 구별해준다.

이 하위 비트들은 추가 Subnet 구조를 가질 수 있다. 예를 들어, 위 그림처럼 Wookii ISP로 오는
11001000 00010111 0001XXXX XXXXXXXX 형태의 패킷들을 다른 8개의 조직들에게 할당 해보자.

조직 0 : 11001000 00010111 0001000X XXXXXXXX (x = 23)
...
조직 2 : 11001000 00010111 0001010X XXXXXXXX (x = 23)
...
조직 7 : 11001000 00010111 0001111X XXXXXXXX (x = 23)

위와 같이 할당할 수 있다. 8개의 조직을 구분하는 방법은 3bits면 충분하다. 따라서, 20 + 3 만큼의 bit를 이용해서
해당 ISP 내에서 다시 8개의 조직을 구별해낼 수 있는 것이다.

예를 들어,

정리하자면, 32bits의 IP 주소를 구분하는 x bit 만큼은 ISP를 구분하는 bit이고,
32 - x bit 만큼은 해당 ISP 내에서 할당해준 조직들을 구분하는 bit라 할 수 있다.

CIDR 방식 이전에는 Classful Addressing 방식을 이용하였다.

이 주소체계는 Subnet 부분이 정확히 1, 2, 3 bytes여야 한다는 문제가 있었고, 클래스 주소 공간의 빠른 고갈과 주소 할당에 있어 형편없는 효율성을 초래하게 된다. 이러한 Class 방식에서 벗어난 것이 바로 CIDR 방식인 것이다.

2. 주소 블록 획득

Wookii ISP 기관의 Subnet(여기서는 조직 0 ~ 7)에서 사용하기 위한 IP 주소 블록을 할당하려한다.
Wookii ISP는 8개의 조직을 모두 지원하기 위해 Wookii ISP가 가진 주소 블록 200.23.16.0/20을 다음처럼 같은 크기의 작은 주소 블록 8개로 나누었다.

IP(in Decimal)IP(in Binary)
ISP의 블록200.23.16.0/2011001000 00010111 00010000 00000000
조직 0200.23.16.0/2311001000 00010111 00010000 00000000
조직 1200.23.18.0/2311001000 00010111 00010010 00000000
조직 2200.23.20.0/2311001000 00010111 00010100 00000000
조직 7200.23.30.0/2311001000 00010111 00011110 00000000

이로써 Wookii ISP는 8개의 조직에 ISP 블록을 동등한 크기로 나누어줄 수 있게 되었다! : )

3. 호스트 주소 획득 : 동적 호스트 구성 프로토콜(DHCP)

// DHCP는 그 자체만으로도 긴 내용이므로 후속 포스트를 추가하면 링크를 걸도록 하겠습니다.

4. 네트워크 주소 변환(NAT)

집이나, 사무실에 자그마한 네트워크를 꾸미고 자신만의 네트워크 망에서 작업을 처리하는 SOHO(Small Office, Small Home) 네트워크의 확산으로 다양한 장치들이 IP 주소를 필요로 한다. 이런 장치 하나하나에 실제 IP 주소를 할당하게 되면, IP 주소는 그 필요량이 엄청나게 많아질 것이다.
이런 문제를 해결하는 방법이 바로 네트워크 주소 변환(NAT) 이다.

다음의 그림을 보자


NAT_TABLE


위의 그림에서 우측의 홈 네트워크에 속한 4개의 인터페이스 모두 같은 네트워크 주소인 10.0.0.0/24를 가진다.

- Private Address

Private Address를 갖는 권역은 네트워크의 주소들이 그 네트워크의 내부에 있는 장비에게만 의미가 있다.
즉, 10.0.0.110.0.0.210.0.0.3의 주소는 주어진 홈 네트워크의 장비들에게는 서로 패킷을 송수신할 수 있는 주소가 되지만, 홈 네트워크를 벗어나 인터넷으로 가는 패킷의 전달에 있어서는 이 주소들을(출발지든 목적지 주소든) 사용할 수 없다.

NAT 기능을 가진 라우터는 외부 세계에서는 라우터로 보이지 않는다. 대신 NAT 라우터는 외부 세계에서 볼 때, 하나의 IP 주소를 갖는 하나의 장비로 동작한다.

- NAT 라우터

외부 세계에서 인지할 수 있는 단 하나의 IP 주소는 위 그림에서 138.76.29.7이다. 따라서, 홈 네트워크에 속한 Host들은 외부 인터넷으로 통하기 위해서 반드시 출발지 및 도착지 IP 주소로 138.76.29.7를 가져야 한다.

NAT 라우터는 IP 주소를 얻기 위해 ISP의 DHCP 서버로부터 주소를 얻는다. 그리고 NAT-DHCP-라우터로 제어되는 홈 네트워크의 주소 공간에서 DHCP 서버로부터 주소를 얻고, DHCP 서버를 실행하여 컴퓨터에게 주소를 제공한다.

- NAT Translation Table :: NAT 변환 테이블

홈 네트워크에 속한 10.0.0.1, 3345의 IP 주소를 갖는 Host가 데이터그램을 외부 서버(위 그림의 128.119.40.186, 80)로 보낸다 가정하자. 이 데이터그램을 NAT 라우터가 받으면, 데이터그램에 대한 새로운 출발지 포트 번호 5001을 생성하고, 출발지 IP 주소를 NAT 라우터가 가지는 IP 주소인 138.76.29.7로 변환한다. 이 새로운 포트 번호를 생성할 때는 NAT 변환 테이블에는 없는 모든 출발지 포트 번호를 선택할 수 있다.(포트 번호의 필드는 16비트이다. 약 65000개의 포트를 선택할 수 있다.)

이렇게 결정된 새 출발지 주소를 싣고, 위 그림의 1번과 2번 과정을 거친다.

이후 외부 서버가 이에 응답 데이터그램을 보내면, 그 도착지 주소는 138.76.29.7, 5001일 것이다. 3번 과정을 거쳐 데이터그램이 NAT 라우터에 도달하면, NAT 라우터가 가진 NAT Translation Table에서 이를 해석하여, 4번 과정을 거친다. 4번 과정에서는 포트 번호 5001의 원래 내부 IP 주소인 10.0.0.1, 3345로 해당 데이터그램을 전달하게 된다.

- NAT의 논란거리

IETF 커뮤니티는 NAT 사용을 반대하고 있는데 그들의 주장은 다음과 같다.

1. 포트 번호가 호스트 주소 지정이 아닌 프로세스 주소 지정에 사용된다.
2. 라우터가 3계층까지만 패킷을 처리한다고 가정한다.
3. NAT 프로토콜인 'endpoint 논의'에 어긋난다. (Host가 중계 노드의 IP 주소와 포트 번호 수정 없이 직접 통신할 수 있어야 한다는 것이다.)
4. NAT 방식을 통해 부족한 IP 문제를 해결하기보다는 IPv6 방식을 통해 해결하자는 것이다.

마무리

이렇게 해서 IPv4 주소체계 및 서브넷과 서브넷 마스크, 그리고 NAT의 개념들을 정리해보았다.
이 포스트가 네트워크에 입문하는 분들에게도 도움이 되었으면 하는 바람이다.

반응형