왜 HTTP를 공부해야 할까?
- 모든 것이 HTTP 기반 위에서 동작한다.
- 우리가 잘 아는 HTML, 이미지, 영상 파일뿐만 아니라, 앱과 서버나 서버와 서버가 통신할 때도 HTTP 프로토콜 위에서 데이터를 주고 받는다.
- 웹 기술, 웹 프레임워크가 HTTP를 기반으로 작성된 것이 많기 때문에 모바일 앱, 웹 프론트앤드, 백앤드 개발자는 모두 HTTP를 필수로 알고 잘 사용할 줄 알아야 한다.
- 개발자는 평생 HTTP 기반 위에서 개발하게 된다.
인터넷 통신
인터넷에서 컴퓨터 둘은 어떻게 통신할까?

- 클라이언트와 서버 사이에는 인터넷이 존재한다.
- 인터넷이라는 공간은 위와 같이 매우 복잡한 인터넷 망으로 이루어져 있으며 수많은 중간 노드들이 존재한다.
- 그렇다면 인터넷이라는 광범위한 공간에서 어떻게 특정 서버와 통신을 수행할 수 있을까?
이를 위해서는 우선 IP(인터넷 프로토콜)
에 대해 알아야 한다.
IP(인터넷 프로토콜)

클라이언트와 서버 간 인터넷 통신을 위해서는 IP 주소
를 부여받아야 한다.
IP(인터넷 프로토콜)의 역할
- 지정한 IP 주소(IP Address)에 데이터 전달
- 패킷(Packet)이라는 통신 단위로 데이터 전달

- 전송할 데이터를 출발지 IP, 목적 IP 등이 담긴 IP 패킷으로 보내게 된다.
- 위와 같은 패킷이 복잡한 노드망을 떠돌아다니며 목적지 IP를 찾아가게 된다.
클라이언트 패킷 전달

서버 패킷 전달

IP 프로토콜의 한계
- 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
- 비신뢰성
- 중간에 패킷이 사라질 수 있음
- 패킷이 순서대로 도착하지 않을 수 있음
- 프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 경우
- (ex. 하나의 pc에서 음악을 듣거나 게임을 하는 것처럼 동시 다발적으로 어플리케이션을 사용할 때 IP만으로 어플리케이션을 구분하기 어렵다.)
이러한 한계를 해결해주는 것이 TCP 프로토콜이다.
TCP, UDP
인터넷 프로토콜 스택의 4계층

프로토콜 계층 동작 예시

TCP
- 전송 제어 프로토콜(Transmission Control Protocol)이다.
- 다음과 같이 대표적인 3가지 특징이 있다.
- 연결지향(TCP 3 way handshake, 가상연결)
- 데이터 전달 보증
- 순서 보장
TCP/IP 패킷 정보

- IP 프로토콜만으로 해결되지 않았던 문제들이 해결 가능해짐
TCP의 대표적인 3가지 특징
- TCP 3 way handshake

- 클라이언트와 서버 간 연결을 하고 데이터를 전송하기 때문에 IP 비신뢰성의 한계를 극복할 수 있다.
- 과정 3에서 ACK과 함께 데이터를 전송하는 것이 가능하다.
- 데이터 전달 보증

- 중간에 누락된 패킷이 있는지 파악할 수 있다.
- 순서 보장

UDP
- 사용자 데이터그램 프로토콜(User Datagram Protocol)이다.
- 흔히 하얀 도화지에 비유(기능이 거의 없음)된다.
- 연결지향 X, 데이터 전달 보증 X, 순서 보장 X
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠르다.
- IP와 거의 비슷한 수준으로, PORT와 체크섬 정도만 추가되었다.
PORT
한번에 둘 이상의 서버와 연결해야 한다면?

- 클라이언트 IP로 날아오는 패킷이 게임 애플리케이션을 위한 패킷인지 화상통화 애플리케이션을 위한 패킷인지 구분하기 어려운 상황 발생
TCP/IP 패킷에 담겨있는 PORT 정보

- IP는 서버의 출발지와 목적지를 의미한다.
- PORT는 서버 안의 애플리케이션 출발지와 목적지를 의미한다.
PORT - 같은 IP 내에서 프로세스 구분

- PORT: 하나의 IP에서 다중으로 실행되고 있는 애플리케이션의 구분을 도와주는 것.
- 예를 들어 PC가 하나의 아파트라면, 동은 IP, 호수는 PORT로 볼 수 있다.
PORT 번호
- 0 ~ 65535 할당 가능
- 0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋음
- FTP: 20, 21
- TELNET: 23
- HTTP: 80
- HTTPS: 443
DNS
- 도메인 네임 시스템(Domain Name System)
- 도메인 명을 IP 주소로 변환해주는 분산형 데이터베이스 시스템
- 인터넷의 전화번호부라고 불린다.
- IP 주소의 기억하기 어렵고 변경될 수 있다는 단점을 해결해준다.
DNS 사용

- 나중에 등록해둔 IP 주소가 변경된다면, IP 주소 변경에 대한 RR(Resource Record)을 DNS 서버에 날리면 된다.
Reference
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
와 ! 그림도 많고 잘 정리되어 있네요ㅎㅎ