❗️ 아래 내용은 생활코딩 강의를 정리한 내용입니다.
위 그림에서 Port라는 것은 각각의 공유기가 어떠한 프로그램에 대하여 (서버, 프로세스등) 인터넷 요청이 들어오면 공유기는 해당 응답을 요청한 사설 IP 가진 사용자에게 전송하고 사용자의 해당 프로그램이 점유 하고 있는 포트에 대해서 데이터를 보내준다. 즉 Port는 인터넷 주소의 주차장 같은 개념이다.
예를 들어 웹서버를 4000번 포트에서 열고 LISTEN을 시키면 인터넷에서 4000번 포트로 데이터를 보내면 라우터에서는 해당 요청을 4000번 포트를 사용하고 있는 사설 IP주소를 가진 컴퓨터의 프로세스에 전송한다. 해당 프로세스는 데이터를 전송 받는데 성공한다.
이러한 포트는 총 0 ~ 65535 개의 자리가 있는데 이중 0 ~ 1023의 자리는 Well-known port 라고 해서 사용자가 함부로 사용할 수 없는 이미 예약된 포트 번호이다. 이미예약된 포트번호로서 주인이 있다는 이야기이다.
예를 들어) 외부에서 http://tooravel.de:80 라고 요청을 보내면 이는 http 프로토콜을 이용해서 보낸 것이므로 여기에 예약된 80번 포트로 전송된다. 하지만 브라우저를 살펴보면 해당 포트는 well-known port 이므로 생략된다. 즉, http://tooravel.de 라고 표시된다.
❗️ URL의 규칙이 위와 같다.
scheme://<user>:<password>@<host>:<port>/<url-path>
하지만 well-known port가 아닌 포트를 사용한다면 http://tooravel.de:4000 이렇게 요청을 보내면 4000번 포트는 모습이 그대로 남는다.
이러한 과정속에서 Port forwarding 이라는 과정을 통해서 public IP address로 웹서버를 운영하는 방법을 이해 할수 있다.
위 그림은 에서 59.6.66.238:8080 url로 우리가 사용할 웹서버에 요청을 보냈다. 위 url의 뜻은 59.6.66.238이라는 공용 웹주소를 사용하는 서버의 8080포트에 요청을 보낸다 라는 뜻이다. 이 신호를 받은 라우터는 192.168.0.3:80이라는 사설 IP주소로 바꿔서 보내게 되는데 이때 포트 포워딩을 하여 8080 포트에 요청을 보낸 것을 80 포트로 보내는 것이 포트 포워딩이다.
포트를 자동으로 연결해주도록 하는 전화국 연결 시스템 같은 과정이다.
이역할은 어디에서 해도 괜찮다. nginx에서 해도 좋고, 웹서버 코드를 수정해서 8080번 포트로 들어온 요청은 80번 포트로 듣게 할수도 있다.