[서버] (2)공유기(Router) - IP 주소, NAT, 포트 포워딩, DHCP
공유기(Router)
라우터의 한 종류로 보통 공유기라는 표현은 가정용 축소 라우터를 지칭한다.
같은 의미라고 봐도 되지만 라우터라는 전문 표현을 쓰자
인류 초기에 인터넷 통신을 위해 IP Address라는 주소 체계를 도입했지만 인터넷의 방대한 발전으로 IP Address의 개수가 동이 나버렸다.
이를 위해 IPv6라는 넉넉하고 새로운 주소체계가 등장했지만 변경점이 너무 많아 당분간은 기존의 IPv4를 아껴써야한다.
이 IPv4를 아껴쓰기위해 등장한것이 공유기(Router)이다.
공유기를 사용하면 동일한 IP Address를 여러대의 호스트가 공유하여 쓸수있다.
통신 비용의 절약
라우터의 등장 배경 및 원리

Host간 통신을 위해 IP Address가 필요하다. 각 Host마다 IP Address를 부여하면 위에서 설명했듯이 금방 동이나버려 사용하지 못하는 Host들이 생길것이다.
이를 방지하기위해 여러대의 호스트가 같은 IP Address를 공유하여 사용하도록 라우터가 등장했다

WAN(Wide Area Network) 와 연결되는 포트는 Public IP address(공인 IP 주소) 를 사용한다. 이는 전세계 사용자들이 통신하기위해 사용하는 주소로 중복주소를 허용하지 않는다.
LAN(Local Area Network) 와 연결되는 포트는 Private IP Address(사설 IP 주소) 를 사용한다. 이는 공유기가 하나의 공인 IP 주소를 가지고 만들어 낸 사설 네트워크에서 각 장치에게 부여하는 IP 주소를 말한다.
사설 네트워크 내 존재하는 장치들끼리만 통신할때 사용하는 유효한 주소이다. 그래서 사설 IP 주소는 동일한 사설 네트워크 내에서는 중복되면 안 되지만, 서로 다른 사설 네트워크에 존재하는 장치들의 사설 IP 주소는 같아도 된다.
공유기를 이용하려면 집으로 들어오는 인터넷을 유선으로 WAN 포트에 연결해야 하며, 인터넷을 이용하려는 각 장치들은 공유기에 유선(공유기의 LAN 포트에 연결) 혹은 무선(공유기의 안테나와 연결)으로 연결해야 한다.
공유기는 자신을 포함하여 연결된 각 장치들에게 사설 IP 주소를 부여함으로써 사설 네트워크를 형성한다.
공유기 자체에 부여되는 사설 IP 주소를 특별히 게이트웨이 주소(Gateway Address) 또는 라우터 주소(Router Address)라고 한다.
| 주소 범위 | 주소 개수 | 특징 |
|---|---|---|
| 10.0.0.0 ~ 10.255.255.255 | 16,777,216개 | 큰 규모의 LAN에 사용 |
| 172.16.0.0 ~ 172.31.255.255 | 1,048,576개 | 중간 규모의 LAN에 사용 |
| 192.168.0.0 ~ 192.168.255.255 | 65,536개 | 작은 규모의 LAN에 사용 |
다음과 같은 범위에 있는 IP 주소는 사설 IP 주소로만 사용한다고 전 세계적으로 약속이 되어 있다.
따라서 다음 범위에 속한 IP 주소는 반드시 사설 IP 주소이며, 그렇지 않은 IP 주소는 공인 IP 주소라고 판단할 수 있다.
NAT (Network address translation)
공유기에 연결된 각 장치들이 외부 네트워크에 있는 다른 장치들과 어떻게 통신하는 것일까?
바로 공유기의 NAT(Network Address Translation)라는 기술 때문에 가능한 것이다. NAT가 어떤 기술인지 바로 알아보도록 하자. 사설 IP 주소가 192.168.0.2인 장치 A가 페이스북에 접속하려 하는 상황을 가정하자.

| Host A | ① 공유기에게 페이스북에 접속하고 싶음을 알린다. (데이터그램 전송) |
| 공유기 | ② 192.168.0.2에 해당하는 장치가 페이스북에 접속하려 한다는 정보를 공유기 내부에 기록한다. ③ 송신자 IP 주소를 공인 IP 주소(가령 59.6.66.238)로 바꿔서 페이스북에 접속을 시도한다. |
| 페이스북 서버 | ④ 공유기에게 응답한다. |
| 공유기 | ⑤ 내부에 기록한 정보로 그것이 192.168.0.2에 해당하는 장치로부터의 요청에 대한 응답임을 파악한다. ⑥ Host A에게 페이스북의 응답을 전달해준다. |
②,③ 의 과정이 NAT에서 처리하는 과정이다.
Host A는 192.168.0.2 사설 IP를 사용하고있다. 이 Host가 페이스북에 접근 요청을 하였다면 공유기는 페이스북은 LAN에 연결되어있지 않음으로 WAN포트로 요청을 넘겨준다.
이 과정에서 어떤 장치가 어디로 요청을 보내는지 기록하고 요청의 IP를 공인 IP로 바꾸어 페이스북에게 전달해준다.
페이스북 서버는 공인 IP로 부터 요청을 받아 응답을 요청받은 공인 IP로 돌려주고 공유기는 이전에 기록했던 정보를 이용해 Host A에게 응답 데이터를 전달해준다.
이 과정에서 다양한 라우터들이 거쳐질텐데, 라우터는 다음 라우터에게 전달하는 방식으로 순차적으로 데이터를 넘겨주기때문에 최종 목적지 IP를 알고있을 필요는 없다.
정적 NAT(static NAT)
사설 네트워크의 특성에 따라 공인 IP 주소 변환이 필요한 호스트를 미리 정한 다음, 각 사설 IP 주소와 공인 IP 주소 간의 변환 테이블을 미리 정의
동적 NAT(dynamic NAT)
인터넷을 접속할 때마다 사설 IP 주소와 공인 IP 주소 간의 변환 수행
NAPT(Network Address Port Translation)
NAT의 통신 방식은 큰 문제가 하나 있다. 바로 여러 개의 호스트가 동시에 같은 외부망 주소로 접속을요청하는 경우이다.
원래라면 요청한 곳의 주소와 포트를 보고 해당하는 호스트 주소를 찾아서 보내주어야 하는데, 해당하는 주소가 여러 개일 경우 중복되므로 이를 처리할 방법이 없는 것이다.
호스트 A와 호스트 B가 페이스북에 동시 접속했다고 해보자 페이스북의 응답은 공인 IP를 통해 공유기로 넘어왔다. 기존 NAT방식에서 공유기는 이제 이 2개의 응답이 호스트 A,B중 어디로 보내줘야하는지 구분할수가없다.
NAPT는 사설 IP 주소와 공인 IP 주소 변환과 포트 번호 변환을 동시에 수행하여 이를 해결한다.
NAPT는 Network Address Port Translation의 약자로, NAT에서는 발신자의 사설망-외부망 IP를 바꿔서 보내주는 역할만을 수행했다면 이제는 포트까지 바꿔서 보내는 역할을 한다.
이러면서 NAPT의 테이블은 NAT의 테이블에서 Port에 해당하는 컬럼이 추가된다. 이렇게 변경한 결과 게이트웨이는 발신자의 포트 번호를 보고도 구별할 수 있게 되었다.
만약 발신자의 포트 번호까지 같게 패킷이 보내지면 어떻게 되느냐고도 할 수 있는데, 그럴 경우에는 위 그림처럼 Private Port를 임의의 SRC 포트로 바꿔서 보내면 되므로 아무런 문제가 없다.
지금까지 HOST는 클라이언트로서 외부 서버에게 요청하여 데이터를 응답받는 과정을 알아보았다.
그런데 HOST 컴퓨터를 클라이언트가 아닌 서버로써 운영하고 싶다.
사설 IP 주소는 내부적으로 유효한 주소임으로 외부 클라이언트들은 내 PC가 있는 공인 IP주소(59.6.66.238) 만 알수있고 접근한다.
서버역할을 하는 내 컴퓨터는 192.168.0.2라는 사설 IP를 가지고있다.
요청은 59.6.66.238 로 왔는데 어떻게 192.168.0.2 까지 도착할수있을까?
이를 위해 포트와 포트포워딩을 알아야한다.
PORT & PORT FOWARDING
한 대의 컴퓨터는 여러 서버를 운영할 수 있다.
웹 서버를 운영할 수도 있고, 클라우드 서버를 운영할 수도 있고, 게임 서버를 운영할 수도 있다. 또한 웹 서버를 여러 개 운영할 수도 있다.
하지만 한 대의 컴퓨터에 부여된 공인 IP 주소는 한 개인데 이것이 어떻게 가능할까? 이를 위해 등장하는 개념이 바로 포트(Port)이다.
port

하나의 컴퓨터에는 65,536개의 포트가 있다. 0~1023까지의 포트는 Well-Known 포트로서 이미 상용화된 포트로 함부로 사용하면 문제를 일으킬수있다.
HTTP 프로토콜의 경우에는 80번으로 약속이 되어 있다. 그래서 브라우저를 통해 웹 서버에 접속할 때는 기본적으로 80번 포트에 접속하는 것이 된다.
다른 웹 서버를 열고 싶은 경우에는 8000번이나 8080번을 사용하는 것이 관습이다
직접 서버를 열고싶다면 1024~65,536 이상의 포트를 사용하면 된다. 포트를 통해 우리는 하나의 컴퓨터로 여러개의 서버를 가동시킬수있다.
port fowarding
192.168.0.4 호스트 장치가 서버로 운용되고있다.

외부 클라이언트들은 공인 IP 59.6.66.238로 요청을 전달하면 라우터는 포트 포워딩을 통해 요청을 처리해줄 서버의 사설 IP로
데이터를 전달해주고 응답을 받아 클라이언트에게 돌려준다.
이때 포트의 개념이 사용된다.
//공인 IP 8080포트로 요청이 오면 사설 IP .3의 80포트로 연결
59.6.66.238:8080 -> 192.168.0.3:80
//공인 IP 8080포트로 요청이 오면 사설 IP .4의 80포트로 연결
59.6.66.238:8081 -> 192.168.0.4:80
포트 포워딩은 외부 포트, 내부 IP, 내부 포트를 지정해줌으로써 설정이 가능하다.
즉, 외부에서 어떤 포트로 접속했을 때 사설 네트워크 내 어떤 장치의 어떤 포트로 접속을 연결해줄지 설정해주는 것이다.
원초적으로 돌아가보자, IP Address는 어떻게 생성되고 장치에 부여되는 것일까?
유동/고정 IP 주소 (Dynamic/Static IP Address)
앞서 설명하기를 인터넷에 가입하면 공인 IP 주소를 부여받는다고 하였다. 그런데 사실 대부분 그 IP 주소가 고정적이지 않다. 즉 내 컴퓨터의 공인 IP 주소가 매일 같지는 않다는 것이다.
왜 그럴까? 인터넷에 가입하여 공인 IP 주소를 부여받은 한 컴퓨터가 오랜 시간 동안 꺼져 있었다면, 지금 새로 인터넷에 가입하는 사람에게 그 공인 IP 주소를 부여해줄 수도 있다.
그러다가 그 컴퓨터가 다시 켜지면 ISP(Internet Service Provider, IP 주소를 부여해주는 기관)는 새로운 공인 IP 주소를 부여해주면 되는 것이다.
이렇듯 고정적이지 않은 IP 주소를 유동 IP 주소(Dynamic IP Address)라고 부른다. 유동 IP 주소는 IPv4 체계 하에서 IP 주소가 부족하다는 문제를 어느 정도 해결해줄 수 있다.
반면 인터넷 가입 시 금액을 추가 납부하면 변하지 않는 공인 IP 주소를 부여받을 수 있는데, 이를 고정 IP 주소(Static IP Address)라고 한다.
DHCP (Dynamic Host Configuration Protocol)
공유기를 WAN에 연결하면 자기 자신을 포함하여 자신과 LAN연결된 HOST들에게 사설 IP Address를 부여한다.
공유기는 어떤 원리로 각 장치에게 사설 IP 주소를 부여하는 것일까?
사설 IP 주소를 직접 부여할수도있지만 IP 중복 방지와 ,서브넷 마스크, DNS 등 네트워크와 관련한 어려운 지식들도 잘 알고 있어야 하므로, 직접 사설 IP 주소를 설정하는 건 쉽지 않다.
그래서 대부분의 경우 공유기가 DHCP(Dynamic Host Configuration Protocol)라는 원리를 통해 각 장치에게 자동으로 사설 IP 주소를 부여하게 된다. DHCP의 동작 원리를 한 번 알아보자.
| HOST A | ① 공유기의 DHCP 서버에 자신의 MAC 주소를 전달하며 사설 IP 할당을 요청한다. |
| 공유기 | ② 현재 연결된 다른 장치들의 사설 IP 주소와 겹치지 않게 사설 IP 주소를 HOST A에 일정 시간 부여한다. ③ 장치 A에 해당 사설 IP 주소를 일정 시간만큼 부여했다는 정보를 내부에 기록한다. |
장치 A가 공유기에 (유선이든 무선이든) 연결이 되는 순간, 다음과 같은 과정이 진행되어 공유기로부터 사설 IP 주소를 할당받는다.
참고로 MAC 주소란 각 장치의 고유한 제조 번호로, 전 세계의 모든 장치들은 각자 자신만의 고유한 MAC 주소를 가지고 있다.
또한 공유기와 장치 간 DHCP 통신을 위해서, 기본적으로 공유기에는 DHCP 서버가 깔려 있고 장치에는 DHCP 클라이언트가 깔려 있다
추가
공유기에 연결된 각 장치들이 부여받은 사설 IP 주소는 DHCP 서버에 의해 매번 자동 할당되어 고정적이지 않으므로 유동 IP 주소에 해당한다. 마찬가지로 공유기에 들어오는 공인 IP 주소도 대부분의 경우에는(특별히 고정 IP 주소를 신청하지 않았다면) 유동 IP 주소에 해당한다. 이로부터 유추할 수 있는 사실은, 공유기에 들어오는 공인 IP 주소도 외부에 존재하는 어떠한 라우터의 DHCP 서버로부터 부여받았을 것이라는 것이다. 공유기가 집 내의 작은 네트워크를 관리하는 라우터라면, 공인 IP 주소를 부여하는 외부의 라우터는 보다 큰 네트워크를 관리하는 라우터가 될 것임을 유추해볼 수 있다.
Reference
https://it-eldorado.tistory.com/22
WEB2 - Home server - 생활코딩 (opentutorials.org)
'개발 일지 > 네트워크' 카테고리의 다른 글
| [서버] (4) 호스팅 & 클라우드 컴퓨팅 (0) | 2021.12.13 |
|---|---|
| [서버] (3) DNS (0) | 2021.11.26 |
| [서버] (1) 웹 호스팅 VS 직접 웹 서버 설치(HOME SERVER) (0) | 2021.11.26 |
| 상태코드 (0) | 2021.11.24 |
| HTML, HTTP API, CSR, SSR (0) | 2021.11.17 |