L3 에서 사용하는 IPv4(Internet Protocol version 4) 기준 IP 주소는 32비트로 구성되어있다.
이론상으론 2의 32승
인 약 42억
개의 IP가 존재할 수 있다.
여기서 의문이 생긴다. 42억개의 IP주소가 전 세계의 호스트를 감당할 수 있을까?
인터넷에 연결되는 호스트들은 각각의 IP를 갖는다.
당장 나 하나만 하더라도, 지금 사용중인 맥북 뿐 아니라 같은 책상에 놓인 아이패드, 맥북에어, 핸드폰 등에 IP를 할당받을 수 있다.
거기에 사물인터넷의 증가로 TV, 냉장고, 세탁기 등의 가전 제품들에도 IP가 할당되기 시작하면서 한 가구당 IP를 할당받을 수 있는 대상이 폭증한다.
뿐만 아니라, 브로드캐스트나 루프백 주소(ex 127.0.0.1)와 같이 예약되어 사용되는 IP도 있다. 따라서 실제로 사용할 수 있는 ip의 개수는 2의 32승보다 적다.
아무리봐도 IPv4의 주소체계가 전세계 호스트의 IP주소의 할당을 감당하기엔 부족한 것 같다.
여러 해결책이 있는데 그 중 두 개를 보면
첫 번째는, IP 주소의 절대적인 수를 늘려버리는 것이다. 그렇게 탄생한 것이 128비트 주소체계를 가진 IPv6이다. 그러나 IPv6는 현재 대중적으로 사용되지 않는다. (그 이유에 대해서는 다음에 포스팅할 예정이다.)
두 번째는 같은 IP 주소를 여러 곳에서 재사용하는 방법이다. 이것이 이번에 다룰 주제인 사설네트워크이다.
192.168.x.x
어딘가 익숙한 IP이다.
보통 가정집에서 네트워크를 연결할 때 호스트가 할당받는 IP 주소이다.
생각해보면, 각 호스트가 할당받는 IP는 매우 다양해야 하는데, 대부분 host의 IP를 확인해보면 192.168 로 시작한다. 이는 여러 host가 중복으로 사용할 수 있는 IP주소이기 때문이다.
이런 IP 주소들을 사설 네트워크의 IP라 한다.
사설 네트워크는 일반적으로 인터넷과 분리된 내부 네트워크로, 한 조직이나 기업, 가정 내에서 사용되는 IP 주소 범위를 가리킨다. 이 네트워크는 인터넷에 직접 노출되지 않으므로, 외부에서는 사설 네트워크의 IP 주소를 직접적으로 액세스할 수 없다.
그렇기 때문에 외부와 직접 닿지 않는 192.168.x.x
와 같은 사설 IP를 서로 다른 네트워크에서 중복으로 사용할 수 있는 것이다.
단, 같은 사설 네트워크 내에서는 다른 호스트와 중복되는 IP를 할당받을 수 없다.
그렇다면 내가 사용하는 호스트가 외부와 직접 연결되지 않는 사설 IP와 연결되었을 때, 어떻게 외부 네트워크를 통해 Google과 통신하고, Velog에 글을 쓸 수 있는 걸까?
하나의 사설 네트워크에는 외부 네트워크로 나갈 수 있는 라우터
가 있으며 이를 게이트웨이라고 칭하기도 한다. 라우터
는 보통 해당 네트워크의 1번의 호스트를 할당받는다. (ex 192.168.0.1
)
사설 네트워크 내의 모든 요청은 이 라우터
를 통해 외부로 노출될 수 있으며, 요청에 대한 응답 또한 라우터
를 통해 받게 된다.
예로, 나는 노트북을 켜 우리집 와이파이에 연결하면, 사설 네트워크 내의 DHCP 서버로부터 192.168.0.23
사설 IP를 발급받는다. 그리고 velog에 글을 등록할 때, 해당 요청은 내가 접속한 사설 네트워크와 외부 네트워크를 이어주는 라우터 (192.168.0.1)
로 향한다.
라우터
는 외부와 직접 연결되기 때문에, 사설 네트워크 IP(ex 192.168.0.1
) 뿐 아니라 외부에 노출되는 공용 IP(ex 142.10.2.231
)도 할당받게된다.
라우터
는 내부로부터 전달받은 요청을 공용 IP의 요청으로 바꾸어 외부로 흘려보내는 역할을 하는 것이다.
그러면 여기서 또 하나 궁금한 점이 생긴다.
라우터는 내부의 여러 서버로부터 동시에 들어오는 요청을 넘겨받아 외부로 전달하는데, 외부로부터 받는 응답을 내부의 누구 호스트의 것인지 어떻게 알 수 있을까?
하나의 사설 네트워크 내의 호스트들은 하나의 외부 IP를 공유하기 때문에, 외부로부터 받는 응답의 목적지 역시 모두 똑같은 공용 IP일 것이기 때문이다.
사설 네트워크의 요청은 공용 IP + PORT 로 구분한다. 이를 위해 사용되는 것이 NAT이다.
NAT(Network Address Translation)는 사설 IP 주소를 공용 IP 주소로 변환하는 프로세스인데, 라우터는 NAT을 사용하여 외부로의 요청 및 응답을 처리한다.
먼저 내부로 요청이 들어오면 라우터는 자신 내부의 NAT 테이블의 해당 요청을 보낸 호스트의 사설 IP 주소와 PORT, 그리고 외부로 노출될 port를 기록한다. 그리고 외부로부터 응답이 오면, 외부 응답의 목적지 port를 보고 NAT 테이블을 조회하여 해당 응답이 어느 호스트로 가야 하는것인지 판단한다.
즉, 내부 호스트의 요청이 올 때마다 외부에 노출될 PORT를 부여하여 각 요청과 응답을 매칭하는 것이다.
브로드캐스트 주소나 루프백 주소처럼, 사설 네트워크도 예약된 IP 주소를 사용한다. 다음은 사설 네트워크가 사용하는 주소의 범위이다.
10.0.0.0 ~ 10.255.255.255 (10.0.0.0/8)
172.16.0.0 ~ 172.31.255.255 (172.16.0.0/12)
192.168.0.0 ~ 192.168.255.255 (192.168.0.0/16)
192.168.x.x는 보통 가정 단위에서 사용하고, 그 위로 갈 수록 규모가 큰 곳에서 사용하는 사설 네트워크 IP이다.