들어가며
웹 서비스나 클라우드 환경에서 개발하다 보면 “네트워크 문제”라는 말을 정말 자주 듣습니다.
- 로컬에서는 되는데 서버에서는 안 된다
- 배포 후 갑자기 타임아웃이 늘었다
- API는 살아있는데 특정 유저만 접속이 느리다
- Nginx/ALB/CDN 붙였더니 동작이 달라졌다
이럴 때 원인 파악을 빠르게 하려면, “HTTP는 요청/응답이지” 수준을 넘어
그 요청이 실제로 어떤 과정을 거쳐 이동하는지 감이 있어야 합니다.
그 감을 만들어주는 게 바로 TCP/IP 4계층이고 그 안에서 데이터가 이동하는 핵심 메커니즘이 캡슐화(Encapsulation) & 역캡슐화(Decapsulation) 입니다.
이번 글에서는 네트워크를 처음 접하는 사람도 이해할 수 있도록
일상 비유 + 개발 관점으로 최대한 쉽게 풀어내 보려고 합니다.
TCP/IP 4계층이란?
TCP/IP 4계층은 인터넷 통신을 다음 4단계로 나눠서 설명합니다.
- 응용 계층: “무엇을 요청/응답할까?” (HTTP, DNS 등)
- 전송 계층: “어떤 프로그램(포트)끼리 주고받을까?” (TCP/UDP)
- 인터넷 계층: “어떤 컴퓨터(IP)로 보낼까?” (IP, 라우팅)
- 네트워크 액세스 계층: “같은 동네(LAN)에서 실제로 어떻게 전달할까?” (Ethernet/Wi-Fi, MAC)

1.응용 계층 (Application Layer)
역할: “우리가 의미를 주는 데이터”
응용 계층은 브라우저/앱/서버가 직접 사용하는 데이터 형식과 규칙을 정의합니다.
- HTTP/HTTPS: 웹 요청/응답 규칙
- DNS: “도메인 → IP” 변환 규칙
- SMTP: 이메일 전송 규칙
예시 1: HTTP 요청은 “주문서”다
브라우저에서 이런 요청을 보냅니다.
GET /api/users/1 HTTP/1.1 Host: [api.example.com](<http://api.example.com/>) Accept: application/json
이건 “무엇을 원한다”를 표현한 **주문서(의미 있는 문장)**예요.
하지만 이 주문서는 아직 “어떻게 배송될지”는 모릅니다.
예시 2: DNS는 “전화번호부”다
우리가 api.example.com을 치면 컴퓨터는 먼저 이렇게 생각합니다.
“이 도메인의 IP 주소가 뭐지?”
즉 DNS 질의를 먼저 하고, IP를 얻은 다음에야 HTTP 요청을 보낼 수 있습니다.
2.전송 계층 (Transport Layer)
역할: “어떤 앱 ↔ 어떤 앱” (포트) + (TCP/UDP 방식)
전송 계층은 프로세스(프로그램) 단위로 통신하게 해줍니다.
- “서버 컴퓨터”까지만 가면 끝이 아니라
- 그 서버에서 “어떤 프로그램”이 받는지도 알아야 하잖아요?
그 식별자가 포트(Port) 입니다.
예시 1: 호텔 주소 vs 객실 번호
- IP 주소 = 호텔 주소
- 포트 = 객실 번호
호텔(서버)까지는 택배가 왔는데, 객실 번호가 없으면 누구에게 줄지 모릅니다.
예시 2: TCP는 “등기 우편”, UDP는 “일반 엽서”
TCP (신뢰성)
- 순서 보장
- 누락되면 재전송
- 연결을 맺고(Handshake) 안정적으로 보냄
→ 중요한 거래 문서(결제/로그인/회원정보)는 TCP로 가는 게 자연스럽습니다.
UDP (속도)
- 빠르지만 유실/순서 꼬임 가능
- 대신 오버헤드가 적음
→ 실시간성이 중요한 음성/영상/게임에서 자주 씁니다.
3.인터넷 계층 (Internet Layer)
역할: “어느 컴퓨터(IP)로 보낼 것인가” + 라우팅
인터넷 계층은 IP 주소 기반으로 목적지까지 길을 찾는 역할을 합니다.
예시 1: “도시/도로망” 관점
- IP는 “주소”
- 라우터는 “길 안내자(교차로)”
- 라우팅은 “어떤 길로 갈지 선택”
서울에서 부산으로 가려면 중간에 대전/대구를 거칠 수도 있죠.
인터넷도 마찬가지로 여러 라우터를 거치며 목적지 IP로 갑니다.
중요한 포인트
IP는 “최대한 보내보겠다(best effort)” 성격이 강해서,
- 중간에 패킷이 유실될 수도 있고
- 순서가 바뀔 수도 있습니다
이 “신뢰성”은 전송 계층(TCP)이 해결합니다.
4.네트워크 액세스 계층
역할: “같은 동네(LAN)에서 실제 전달”
이 계층은 물리적 전송에 가장 가깝습니다.
- Ethernet (유선)
- Wi-Fi (무선)
- MAC 주소
- ARP (IP를 MAC으로 찾는 과정)
예시: 같은 아파트 단지 내 전달
같은 아파트 단지(LAN) 안에서 이동할 때는
“동/호수(MAC)” 같은 더 로컬한 식별자가 필요합니다.
- IP = “도시 주소”
- MAC = “단지 내 실제 집 주소” 느낌
스위치가 MAC을 보고 전달해줍니다.
데이터는 어떻게 전달되는가?
캡슐화 & 역캡슐화
한 번의 요청은 아래처럼 변해가며 전달됩니다:
응용 계층(데이터 생성)
→ 전송 계층(포트 번호 포함)
→ 인터넷 계층(IP 포함)
→ 네트워크 계층(MAC 포함)
그리고 실제 물리 전송이 이루어집니다.
수신측에서는 역순으로 각 계층의 헤더를 제거해가며 원래의 데이터를 복원합니다.
핵심: 캡슐화(Encapsulation) & 역캡슐화(Decapsulation)
여기부터가 진짜 “네트워크가 동작하는 방식”의 핵심입니다.
캡슐화란?
윗계층 데이터에 아랫계층이 필요한 정보를 ‘겉포장(헤더)’처럼 붙여서 내려보내는 것입니다.
비유: 택배 포장 단계가 여러 번 있는 느낌
- 상품(원본 데이터)을 만든다
- 상품을 상자에 담는다(전송 계층 정보)
- 상자에 배송 주소를 붙인다(IP)
- 택배 차량/지역 규칙에 맞게 최종 포장(MAC 등)
즉 “겉포장”이 계층별로 계속 붙습니다.
역캡슐화란?
반대로 수신 측에서는
- 바깥 포장을 하나씩 뜯으면서
- 각 계층이 자기 헤더를 읽고 처리한 뒤
- 안쪽 데이터만 다음 계층으로 넘깁니다
한 번에 이해하는 헤더가 붙는 순서
우선 브라우저가 GET /api/users/1을 보냈다고 가정해 보겠습니다.
1.응용 계층 데이터 생성
- “HTTP 요청 메시지”가 만들어짐
2.전송 계층이 헤더를 붙임 (TCP 헤더)
여기에는 이런 정보가 들어갑니다.
- 출발지 포트, 목적지 포트 (예: 51324 → 443)
- 순서 번호(Sequence), 확인 응답(Ack) 등
- 재전송/흐름제어에 필요한 정보
→ “이 메시지를 서버의 443번 프로그램에게 전달해줘” + “안전하게 순서대로” 느낌
이 시점부터 이 단위를 보통 세그먼트(TCP Segment) 라고 부릅니다.
3.인터넷 계층이 헤더를 붙임 (IP 헤더)
여기에는
- 출발지 IP, 목적지 IP
- TTL (너무 오래 헤매면 버리기)
- 조각화 관련 정보 등
→ “어떤 컴퓨터로 보낼지”가 결정됩니다.
이 단위를 패킷(Packet) 이라고 부르는 경우가 많아요.
4.네트워크 액세스 계층이 헤더를 붙임 (Ethernet 헤더)
여기에는
- 출발지 MAC, 목적지 MAC
- 프레임 타입 등
→ 같은 네트워크에서 “실제로 누구에게 줄지” 정보가 생깁니다.
이 단위를 프레임(Frame) 이라고 부릅니다.
보낼 때(캡슐화):
-
HTTP 데이터
→ TCP 헤더 붙임 (포트/신뢰성)
→ IP 헤더 붙임 (목적지 IP/라우팅)
→ Ethernet 헤더 붙임 (MAC/실제 전달)
받을 때(역캡슐화):
- Ethernet 헤더 확인 후 제거
- IP 헤더 확인 후 제거
- TCP 헤더 확인 후 제거
- 최종적으로 HTTP 데이터를 앱에게 전달
즉 “겉포장 뜯기”라고 생각하면 됩니다.
각 계층은 자기 포장지만 확인하고 처리한 뒤 다음으로 넘깁니다.
개발자가 실무에서 체감하는 포인트
1) “요청은 했는데 응답이 없어요” → 어느 계층 문제일까?
- DNS가 안 됨: 응용 계층(DNS)
- 연결이 안 됨: 전송 계층(TCP 연결)
- 라우팅이 안 됨: 인터넷 계층(IP/라우팅 테이블)
- 같은 망에서 충돌/단절: 네트워크 액세스(MAC/스위치)
이렇게 분해해서 보면 “막연한 네트워크 문제”가 훨씬 구체적으로 보입니다.
2) 클라우드에서 특히 도움 되는 이유
AWS를 예로 들면:
- Security Group / NACL → 전송계층(포트) + IP 제어
- Subnet / Route Table / IGW / NAT → 인터넷 계층(라우팅)
- ALB/NLB → 전송 계층/응용 계층과 맞닿음
즉 “계층”을 알면 인프라 구성도 구조적으로 이해가 될 수 있습니다.
마치며
TCP/IP 4계층은 단순히 “이론”이라기보다
우리가 웹개발을 하며 흔하게 주고 받는 API 요청이 현실에서 어떻게 이동하는지를 설명하는 지도라고 표현할 수 있을것도 같습니다.
- 응용 계층: 무엇을(의미/규칙)
- 전송 계층: 누구에게(포트) + 어떻게 안전하게(TCP/UDP)
- 인터넷 계층: 어디로(IP) + 어떤 길로(라우팅)
- 네트워크 액세스: 실제 전달(MAC/물리 전송)
그리고 이 모든 과정의 핵심이 캡슐화(포장)와 역캡슐화(포장 해제)라고 생각을 하는데요 이 흐름을 한 번 머릿속에 그릴 수 있게 되면, 네트워크 이슈를 만났을 때 “감”이 아니라 구조적으로 문제에 접근하게 수월하지 않을까 생각합니다.
읽어주셔서 감사합니다.

