Web, HTTP 모두 인터넷 네트워크망에 기반하여 동작합니다. 따라서, HTTP 학습을 위한 사전 기본 학습의 개념으로 인터넷 통신, IP, TCP, UDP, PORT, DNS에 대해 간단하게 알아봅시다.
만약 클라이언트와 서버가 바로 옆에 붙어 있다면 단순하게 케이블을 연결해 요청을 보내고 응답을 받는 방식을 사용하면 될 것이다. 하지만, 둘이 멀리 떨어져 있어 인터넷 망을 거쳐야 한다면 중간에 수많은 노드(서버)를 거쳐야 한다.
이때 어떤 규칙을 사용해서 넘어가게 될까? 이를 이해하기 위해 IP에 대한 학습이 필요하다.
복잡한 인터넷 망에서 데이터(메시지)를 보내기 위해서는 최소한의 규칙이 필요하다. 이때 IP 주소를 사용하게 되는데, 클라이언트가 IP 주소를 부여 받아야 한다. 또한 메시지를 받는 서버 또한 IP 주소가 필요하다.
이때 IP의 역할은
클라이언트는 출발지 주소를 가지고 해당하는 목적지 주소를 향해 패킷을 전달한다.
이 패킷을 전달 받은 서버는 요청에 대해 OK라는 응답을 하기 위해 클라이언트에서의 과정과 마찬가지로 패킷을 생성하여 클라이언트로 전송한다.
요청(클라이언트)과 응답(서버)의 메시지 전송 과정에서 둘의 경로는 다를 수 있다.
하지만, 위와 같은 방식(IP)만으로는 다음과 같은 한계가 있다.
우선 인터넷 프로토콜 스택의 4계층으로 나타내면 다음과 같다.
전송 절차는 다음과 같다.
Web과 HTTP를 공부하는데는 IP 프로토콜까지만 이해해도 충분하다.
TCP/IP 패킷의 정보는 아래와 같이 구성된다.
이렇게 해서 보내기 때문에 TCP는 이 정보들을 가지고 IP의 문제를 해결할 수 있다.
TCP는 전송 제어 프로토콜로 여러 특징들이 있다.
이것은 개념적으로만 연결이 된 것이지, 물리적으로 연결된 상태는 아니다. 논리적인 연결이다.
클라이언트가 데이터를 보냈는데 서버에서 아무런 응답이 없다면, 문제가 발생한 것으로 생각한다.
UDP는 TCP와 같은 계층에 있는 프로토콜로 기능이 거의 없고 아래와 같은 특징이 있다.
그렇다면 아래처럼 한 번에 둘 이상 연결해야 한다면 어떻게 할까?
위와 같은 상황에서 클라이언트는 한 번에 여러 서버와의 통신이 필요하다. 그럼 이때 날아오는 여러 패킷을 어떻게 구분할까?
이 상황에 사용하는 것이 PORT이다. 쉽게 말하면, IP는 목적지 서버를 찾는 것이고, Port는 서버 안에서 돌아가는 애플리케이션을 구분하는 것이라 생각하면 되고 아래의 그림처럼 이루진다.
정리하면, Port는 같은 IP 내에서 프로세스를 구분하는 용도이고 아래와 같은 예시를 보일 수 있다.
Port는 보통 0 ~ 65535번까지 할당이 가능하지만, 0~1023번대는 잘 알려진 포트(Well-known Port)라 부르며 그 용도가 정해져있어 사용하지 않는 것이 좋다.
IP는 200.200.200.xxx와 같은 형식으로 되어있고 이는 기억하기 힘들다. 또한, IP는 변경될 여지가 있다. 그래서 DNS라는 것을 사용한다. 도메인 명을 등록을 하고 이를 IP 주소로 변경해주는 것이다.
인프런 김영한님의 강의 - 모든 개발자를 위한 HTTP 웹 기본 지식