개요
Request는 어떻게 ‘전송 가능한 형태’가 될까?
웹에서 Request(요청)를 던진다고 했을 때, 그 데이터는 처음에는 “아주 원시적인 형태”로 생각하면 된다.
즉, 사용자가 브라우저에서 어떤 동작을 했다고 해서 그 순간부터 바로 인터넷 회선으로 흘러가는 것이 아니라, 단계적으로(계층적으로) 필요한 정보들이 덧붙여지면서 전송 가능한 형태가 되어 간다.

이런 과정이 표준화되면서 “프로토콜”들이 쌓이기 시작했고, 그 결과 오늘날에는 계층 모델(TCP/IP 4계층, OSI 7계층) 기반으로 네트워크 통신을 이해한다.
메시지 생성의 논리적 과정
TCP/IP 4계층 모델

핵심은 이거다:
- 메시지는 사용자가 사용하는 프로그램(예: 크롬)에서 시작된다.
- 그리고 아래 계층으로 내려갈수록 더 “low level(낮은 계층, 과거부터 쓰이던 전송 방식에 가까운 계층)”로 내려가며,
- 각 계층은 자기 역할에 맞는 정보를 메시지에 추가한 뒤 다음 계층으로 넘긴다.
즉, 사용자가 사용하는 프로그램부터 만들어지는 데이터가 최종적으로 인터넷에 던져지는 논리적 흐름은 다음처럼 이해하면 된다.
예를 들어, 사용자가 크롬에서 naver.com을 입력해 접속한다고 하자.
- 응용 계층(Application)
- 여기서 HTTP 메시지가 생성된다.
- “크롬에서 naver.com 치면 이동해주듯이” 크롬이 응용 계층 역할을 하는 셈이다.
- 전송 계층(Transport)
- 네트워크 계층(Network)
- 마지막 단계(물리 계층/링크 계층 관점)
- 최종적으로 LAN 카드(네트워크 카드)를 통해 인터넷으로 나갈 수 있게 전기 신호로 변환되어 인터넷 회선에 전달된다.
- (표현상 “물리계층 - Link Layer”로 묶어서 이해)
그리고 이 순서는 보내는(송신) 과정의 예시다.
받는(수신) 경우에는 반대의 과정(아래 계층 → 위 계층)으로 올라가면서, 덧붙여졌던 정보들이 해석되고 최종적으로 응용 프로그램이 이해할 수 있는 형태가 된다.
OSI 7계층

TCP/IP 4계층 말고도 OSI 7계층 모델이 있다.
실무에서 TCP/IP 관점으로 설명하는 경우가 많지만, OSI 7계층은 네트워크 개념을 더 세분화해서 이해할 때 자주 등장한다.
IP 프로토콜
특징
- 복잡한 인터넷망에서 목적지로 보내기 위해 IP 주소(IP Address) 를 사용하여 데이터 전달을 한다.
문제점
IP는 “목적지로 보내는 방법”은 제공하지만, 아래 문제가 발생한다.
1) 패킷을 받을 대상 서버가 불능이거나, 중간에 패킷이 소실될 수 있음(비연결성)
- 즉, 보내는 쪽이 “상대가 살아있는지 / 중간에 유실되지 않는지”를 IP만으로는 보장하기 어렵다.
- (사용자가 적어준 표현 그대로) “1줄짜리로 서버가 살아있는지 확인(health check)하는 메시지를 보내보고, 이를 3 way handshake라고 함”
2) 패킷의 순서가 보장되지 않음
- “어떤 기지국을 탔는지, 뭐 이런 건 순서 보장이 안 되는 게 당연”하다고 이해하면 된다.
- 즉, 여러 경로를 거치는 동안 도착 순서가 바뀔 수 있다.
3) 서버에 여러 애플리케이션이 떠 있을 때 구분의 문제( PORT를 사용하지 않음으로 발생하는 문제 )
- IP만 있으면 “그 서버”까지는 갈 수 있어도, 서버 안에서 어떤 프로세스/애플리케이션으로 가야 하는지 구분이 약하다.
DNS(Domain Name System)의 등장
IP는 사용자 입장에서 기억하기 어려운 문제 존재
또한, IP 주소는 서버의 사정으로 언제든 변경될 수 있는 문제점 존재한다.
이에 따라 DNS가 등장하게 되었다.
특징:
- 글로벌한 네임서버에 IP주소를 등록해두고 사용자에게는 도메인만 알려주는 방식
- 사용자가 도메인을 통해 요청하면, DNS서버에서 도메인 명을 IP 주소로 변환
TCP 프로토콜
TCP는 위 IP의 문제들을 보완하기 위해 등장했고, 지금도 대부분의 통신에서 핵심으로 쓰인다.
특징(무엇을 해결하나)
- PORT 정보를 담아 전송함으로써, 한 서버 내에서 애플리케이션 구분 문제를 해결한다.
- 전송 순서를 담고 있는 규약을 통해 전송의 순서를 보장한다.
PORT 정리
- PORT란 같은 IP 내에서 프로세스 구분의 역할을 한다.
- PORT는
0 ~ 65535 범위에서 할당 가능하다.
0 ~ 1023은 Well Known Port(잘 알려진 포트)다.
- 이미 정해져 있는 포트이므로 별도로 사용하지 않는 것이 좋다.
- 예시:
- FTP - 20(파일전송), 21
- TELNET - 23
- SSH - 22(원격)
- HTTP – 80
- HTTPS - 443
비연결 문제 해결: TCP 3-way handshake

TCP는 “비연결성 문제”를 해결하기 위해 3-way handshake를 사용한다.
사용자가 정리한 흐름을 그대로 풀면 다음이다.
- 보내는 쪽에서 서버 헬스체크를 위해 SYN 메시지를 보낸다.
- 받는 쪽에서 “내가 살아있다”는 응답(ACK)과 함께 SYN+ACK를 보내준다.
- 보내는 쪽에서 응답을 보고 “알겠다”는 응답 ACK를 다시 보낸다.
여기서:
- SYN은 접속 요청
- ACK는 요청 수락(또는 확인 응답)
TCP를 많이 쓰는 이유와 단점
- TCP 프로토콜을 통해 IP 프로토콜의 3가지 문제점을 해결함으로써, 현재는 대부분의 통신에서 TCP를 사용한다.
- HTTP는 TCP 기반의 프로토콜이므로, “HTTP를 쓴다 = TCP의 특징을 대부분 가진다”고 보면 된다.
- 다만, TCP는 “왔다 갔다(핸드셰이크/확인 과정)”가 있어 성능이 저하되는 특징이 있다.
- 그래서 채팅 서비스와 같은 곳들은 TCP 프로토콜을 사용하지 않는다.
UDP 프로토콜
TCP가 안정성을 가져오는 대신 비용(왕복/검증)이 있다면, UDP는 그걸 과감히 줄여 속도를 택한 쪽에 가깝다.
특징
- TCP 3-way handshake가 없어 데이터 전달이 보증되지 않지만 빠른 전송 속도를 가진다.
- IP 프로토콜과 거의 같고, + PORT 정보가 있는 정도로 이해하면 된다.
- 최근 빠른 속도 때문에 사용이 많이 되려고 하는 추세다.