많은 웹 서비스는 HTTP 프로토콜 위에서 데이터를 주고 받는다. 웹 개발 공부를 하다보면 HTTP 용어가 많이 등장하는 데, 이 때 깊이있는 이해를 위해서는 HTTP에 대한 이해가 필요하다. 그리고 웹 개발을 하다보면 API URL, PUT, POST, HTTP 상태코드와 관련된 고민을 하게 되는 데, 이때 HTTP에 대한 지식이 활용된다.
그래서 웹 개발만 한다고 해서 HTTP와 같은 CS 공부를 무시할 수 없다.
이론적인 공부라 정말 하기 힘들지만 해야되는 이유를 되새기며 정리를 시작해본다.
애플리케이션 계층에 있는 HTTP를 이해하기 위해서는 그 아래 계층에 있는 인터넷 네트워크에 대한 이해가 필요하다.
따라서, 먼저 인터넷 네트워크와 관련된 내용을 정리하고자 한다.
클라이언트와 서버가 직접적으로 연결이 되어 있다면, 중간과정 없이 클라이언트에서 요청을 보내면 서버에서 보낸 응답을 직접 받게 된다. 하지만, 다수의 클라이언트와 서버, 멀리 떨어진 클라이언트와 서버들과 통신을 하기 위해 중간에 인터넷이라는 것을 거치면서 요청과 응답을 처리할 수 있게 되었다.
여기서 인터넷망은 여러개의 노드들로 되게 복잡하게 이루어져 있는데, 통신을 어떻게 하는 것인가?
그렇게 등장한 것이 IP 이다.
클라이언트와 서버가 인터넷 망을 거쳐서 통신을 하기위해서 각각 IP 주소를 부여받아야한다.
IP의 역할
지정한 IP 주소(IP Address)에 데이터 전달
패킷(Packet)이라는 통신 단위로 데이터 전달
이 때, IP 패킷에는 출발지 IP, 목적지 IP 정보가 포함되어 있으며 다음과 같은 과정에서 활용된다.
노드끼리 목적지를 위한 경로를 찾아주며 목적지 IP에 전송 데이터가 도달된다.
도착 이후 목적지에서는 성공적으로 받았다는 응답을 역으로 출발지 IP로 던져준다.
데이터를 주고받는 데 문제가 없어보이지만, IP로만 통신하기에는 다음과 같은 한계점이 존재한다.
IP 프로토콜의 한계점
- 비연결성
패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷이 전송된다.
ex) 클라이언트는 서버의 상태를 모르는 상태에서 패킷을 보낸다.- 비신뢰성
중간에 패킷이 사라질 경우
패킷이 순서대로 안오는 경우
ex) 인터넷 망 중간 노드가 문제가 생길 경우 패킷이 그대로 소실된다.- 프로그램 구분
같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 경우
ex) 1500byte가 넘어가게 되면 패킷을 쪼개서 보내는 데, 이 때 각각의 패킷이 다른 노드를 거치게 되면서 순서가 바뀔 수도 있다.
그래서 등장한 것이 TCP 이다.
TCP는 IP 프로토콜이 가진 문제점들을 해결해준다.
TCP를 이해를 위해 인터넷 프로토콜 스택의 4계층은 다음과 같다.
- 애플리케이션 계층 - HTTP, FTP
- 전송 계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층 - LAN 장비, LAN 드라이버
한눈에 들어어는 것은 애플리케이션, OS, 네트워크 인터페이스가 끝이다.
채팅 프로그램을 예시로 들면 다음과 같다.

참고: 이더넷 프레임은 MAC 주소와 같이 물리적인 주소를 포함하고 있다.
출발지 IP, 목적지 IP 정보가 있는 IP 패킷 안에 TCP 세그먼트 정보가 들어가는데, 여기에 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등이 있다.
이렇게 IP 프로토콜을 보완해주는 TCP 특징은 다음과 같다.
TCP 특징
연결지향 - TCP 3 way handshake (가상 연결)
데이터 전달 보증
순서 보장
connect, 연결과정은 다음과 같다.

3번째 과정에서 ACK와 함께 데이터 전송이 가능하다.
SYN: 접속 요청
ACK: 요청 수락
다음과 같은 순서로 보증이 된다.
1. 클라이언트 - 데이터 전송
2. 서버 - 데이터 잘 받았음
다음과 같은 순서로 보장이 된다.
1. 클라이언트 - 패킷1, 패킷2, 패킷3 순서로 전송
2. 서버 - 패킷1, 패킷3, 패킷2 순서로 도착
3. 서버 - 패킷2부터 다시 보내
UDP는 TCP와는 달리 거의 기능이 없어 특징이 다음과 같다.
UDP 특징
연결 지향 X
데이터 전달 보증 X
순서 보장 X
단순하고 빠르다.
IP와 비교하면 기능이 거의 같지만, PORT, Checksum 정도만 추가된다.
PORT는 하나의 IP에서 여러 애플리케이션이 동작하고 있을 때, 패킷이 도달할 애플리케이션을 구분할 때 활용된다.
Checksum은 전송된 데이터가 제대로 된 데이터인지 확인할 때 활용된다.
TCP는 이미 많은 것이 구축되어 있어 연결 지향 과정에서 오래걸리고, 패킷이 크다해서 무언가 건드리기 힘들다.
UDP는 아무것도 안되어 있기 때문에, 애플리케이션 단에서 UDP를 처리할 무언가를 만들면 된다.
한번에 둘 이상 연결해야하는 경우, 여러 애플리케이션을 활용하고 있는 경우, IP만 활용하면 패킷을 구분하기 힘들다.
그래서 TCP/IP 패킷정보는 출발지 IP, PORT와 도착지 IP, PORT 정보를 담고 있다.
같은 IP 내에서 프로세스를 구분하는 역할을 수행한다. 즉, IP가 아파트이면 PORT는 동, 호수 이다.
PORT 잡지식
0 ~ 65535 할당 가능
0 ~ 1023: 많이 쓰는 포트, 임의로 사용하지 않는 것이 좋음
FTP - 20, 21
TELNET - 23
HTTP - 80
HTTPS - 443
IP 주소는 기억하기 힘들고, 변경이 될 수 있다.
그래서 도메인 네임시스템이 등장하였고, 이는 전화번호부처럼 IP 주소에 대한 도메인 명을 등록해서 해당하는 IP 주소를 찾아준다.
IP 주소 변경이 될 경우 DNS 서버에 등록된 정보만 수정해주면 된다.
이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗
https://inf.run/YZxop