[꼼꼼한 개발자] 꼼코더
4. 모든 개발자를 위한 HTTP 웹 기본 지식 - [01 인터넷 네트워크] - PORT 본문
👀 한 번에 둘 이상 연결해야 하면?
- 현재 클라이언트 PC에서 게임, 화상통화, 웹 브라우저 요청도 하고 있는 상황을 가정해보자.
- 즉, 클라이언트 PC가 여러 개의 서버와 통신해야 하는 상황이다.
- 서버가 클라이언트 PC로 패킷을 보내려면 클라이언트 IP로 패킷을 보내야한다.
- 하지만 IP만 사용하면, 클라이언트 입장에서는 받은 패킷이 게임, 화상통화, 웹브라우저 요청 중 어떤 프로그램으로 온 패킷인지 알 수 없는 문제가 있다.
- 그래서 프로그램을 구분하기 위해 PORT를 사용한다.
🔎 TCP/IP 패킷 정보
TCP/IP 패킷을 보면 출발지 IP, 목적지 IP와 함께 출발지 PORT, 목적지 PORT 가 포함된 것을 알 수 있다.
- IP : 목적지 서버를 찾는 용도
- PORT : 서버 내부에서 돌아가는 애플리케이션을 구분하는 용도
🕵🏻♂️ 같은 IP 내에서 프로세스 구분
같은 IP 내에서 프로세스를 구분하는 게 PORT 이다.
- [클라이언트] 게임 : 8090 ↔ [서버] 게임 : 11200
- [클라이언트] 화상통화 : 21000 ↔ [서버] 화상통화 : 32202
- [클라이언트] 웹 브라우저 : 10010 ↔ [서버] 웹 브라우저 : 80
위와 같이 예시처럼 각각 클라이언트와 서버 안에 맞는 PORT 번호를 찾아서 연결하면 된다.
여기서 패킷을 보낼 때 IP와 PORT를 포함해서 보낸다.
🕳 PORT 번호
IP가 인터넷 세계에서 논리적인 내 컴퓨터의 주소라면, PORT는 내 컴퓨터내의 수많은 애플리케이션의 식별자가 되는 경로이다.
- 0 ~ 65535 : 할당 가능
- 0 ~ 1023 : 잘 알려진 포트라 사용하지 않는 것이 좋음
- FTP : 20, 21 / TELNET : 23 / HTTP : 80 / HTTPS : 443
🙋🏻♂️ Q&A
Q. 웹 서버(HTTP)는 80번 포트로 연결된다고 알고 있는데, 스프링 부트에서 동작하는 톰켓은 왜 8080 포트로 연결되는 것인가?
A. 보통 웹 어플리케이션을 개발할 때 앞에 웹 서버(nginx)를 포트 80으로 띄우고, 그 뒤에 톰켓 같은 WAS 서버를 띄우는 구조로 많이 사용한다. 그게 관례가 되어 톰켓같은 WAS 서버는 80 포트 대신 다른 포트를 주로 사용한다.
[출처] https://www.inflearn.com/questions/130303
Q. 목적지(서버) 포트 번호는 어떻게 지정해야하는가?
A. 대부분 서버의 포트 번호는 지정되어 있어 생략 가능한 경우가 많다. 그러나 서버가 임의의 포트에 서비스를 등록한 경우, 반드시 그 포트 번호를 명시하여야 접속이 가능하다.
예를 들어, 웹 서버는 기본적으로 80번 포트를 이용하는 것이 관례이다. 그래서 별도의 포트를 지정하지 않고 HTTP 요청을 할 경우, 80번 포트로 접속을 시도하게 된다. 우리가 어떤 사이트에 접속하기 위해 URL을 입력할 때, 사실은 URL 뒤에 서버의 포트 번호를 지정하는 부분을 생략한 것이다.
만약 사용자가 직접 서버의 포트 번호를 지정할 경우, 해당 포트로 접속을 시도하게 된다. 예를 들어, 웹 브라우저에 inflearn.com:80 으로 입력을 해도 정상적으로 사이트에 접속이 된다.
[출처] https://www.inflearn.com/questions/251738
[출처] https://www.inflearn.com/questions/259875
[출처] https://shaeod.tistory.com/389
Q. 웹 브라우저에서 유튜브, 네이버를 사용중인 상태에서 각각 서버에 요청을 보내면 클라이언트 ,서버의 포트는 어떤 식으로 지정된 상태인가?
A.웹 브라우저 = 클라이언트, 웹 서버 = 서버
HTTPS 를 사용하므로 서버(웹 서버)의 포트 번호는 443이다.
클라이언트(웹 브라우저)는 유튜브, 네이버를 위한 임의의 포트 2개를 만들어(포트 번호를 할당하여) 연결한다.
[출처] https://www.inflearn.com/questions/268141
[참고] https://blog.daum.net/hsjeong106/2
참고 : https://hseungyeon.tistory.com/426?category=1060297
위 자료는 김영한님의 ‘스프링 핵심 원리 - 기본편’ 강의를 참고하여 작성하였습니다.
https://www.inflearn.com/course/http-웹-네트워크/dashboard
'HTTP' 카테고리의 다른 글
6. 모든 개발자를 위한 HTTP 웹 기본 지식 - [URI와 웹 브라우저 요청 흐름] - URI (0) | 2022.09.11 |
---|---|
5. 모든 개발자를 위한 HTTP 웹 기본 지식 - [01 인터넷 네트워크] - DNS (0) | 2022.09.08 |
3. 모든 개발자를 위한 HTTP 웹 기본 지식 - [01 인터넷 네트워크] - TCP/ UDP (2) | 2022.09.02 |
2. 모든 개발자를 위한 HTTP 웹 기본 지식 - [01 인터넷 네트워크] - IP(인터넷 프로토콜) (0) | 2022.08.31 |
1. 모든 개발자를 위한 HTTP 웹 기본 지식 - [01 인터넷 네트워크] - 인터넷 통신 (0) | 2022.08.30 |