- Published on
HTTP 캡슐화와 역캡슐화를 직접 구현하며 네트워크 통신의 본질 이해하기
- Authors
- Name
- 김민석
Introduction

상황
HTTP는 인터넷 통신의 프로토콜
로, 클라이언트와 서버 간 데이터를 교환하기 위해 TCP/IP
계층 위에서 동작한다. 이 과정에서 캡슐화
와 역캡슐화
는 중요한 역할을 한다.
하지만 HTTP 레벨의 데이터 전송에만 집중하기 때문에, 네트워크 계층에서 데이터가 실제로 어떻게 처리되는지에 대한 이해가 부족하다고 생각했다.
이번 프로젝트에서는 HTTP 데이터를 TCP/IP 계층에서 캡슐화하고
, 다시 역캡슐화하는 과정을 직접 구현
하며 네트워크 통신의 기본 구조를 학습하고자 했다.
데이터를 전송하고 복원하는 실제 과정에서 발생할 수 있는 문제점과 그 해결 방식을 익히는 데 목적이 있다.
문제
HTTP는 TCP/IP 계층 위
에서 작동하지만, 실제로 데이터를 TCP 세그먼트
와 IP 패킷
으로 변환하는 과정을 생략한다. 이러한 과정이 이해되지 않으면 패킷 분할
, 데이터 손실
, 또는 전송 병목 현상
등 네트워크 문제를 해결하기 힘들것이다.
캡슐화와 역캡슐화 과정은 데이터를 계층별로 나누는 것이 아니라, 헤더 생성 및 데이터 통합
, 프로토콜 규격
같은 세부적인 처리 과정을 포함한다.
특히, 아래와 같은 복잡성이 존재했다
캡슐화:
HTTP 데이터를TCP 세그먼트
로, 이후 IP 패킷과 이더넷 프레임으로 변환하며 계층별 헤더를 추가해야 한다.역캡슐화:
이더넷 프레임에서 헤더를 제거한 후,순차적
으로 IP 패킷과 TCP 세그먼트를 분석하여 HTTP 데이터를 추출해야 한다.
시퀀스 다이어그램

구현
캡슐화 과정
캡슐화는 데이터를 송신 측에서 전송 계층부터 물리 계층까지 변환하며 헤더를 추가하는 과정이다.
class Encapsulation {
public static String encapsulate(String httpData) {
String tcpSegment = "TCP Header + " + httpData;
String ipPacket = "IP Header + " + tcpSegment;
String ethernetFrame = "Ethernet Header + " + ipPacket;
return ethernetFrame;
}
public static void main(String[] args) {
String httpData = "GET / HTTP/1.1\\r\\nHost: localhost\\r\\n";
String encapsulatedData = encapsulate(httpData);
System.out.println("캡슐화된 데이터: " + encapsulatedData);
}
}
역캡슐화 과정
역캡슐화는 수신 측에서 각 계층의 헤더를 제거하고 데이터를 복원하는 과정이다.
class Decapsulation {
public static String decapsulate(String encapsulatedData) {
// Ethernet Header 제거
String ipPacket = encapsulatedData.replace("Ethernet Header + ", "");
// IP Header 제거
String tcpSegment = ipPacket.replace("IP Header + ", "");
// TCP Header 제거
String httpData = tcpSegment.replace("TCP Header + ", "");
return httpData;
}
public static void main(String[] args) {
String encapsulatedData = "Ethernet Header + IP Header + TCP Header + GET / HTTP/1.1\\r\\nHost: localhost\\r\\n";
String httpData = decapsulate(encapsulatedData);
System.out.println("역캡슐화된 데이터: " + httpData);
}
}
실행 결과
- 캡슐화
캡슐화된 데이터: Ethernet Header + IP Header + TCP Header + GET / HTTP/1.1 Host: localhost
- 역캡슐화
역캡슐화된 데이터: GET / HTTP/1.1 Host: localhost
해결
캡슐화 학습
HTTP 데이터를 송신하기 위해 TCP/IP 계층에서 어떻게 헤더를 추가하고 패킷으로 변환하는지 이해했다. 캡슐화 과정에서 TCP 헤더
, IP 헤더
, 이더넷 헤더
가 순차적으로 추가되며, 최종적으로 네트워크 상에 데이터가 전송된다.
역캡슐화 학습
수신 측에서 데이터를 복원하기 위해 헤더를 제거하고 원본 데이터를 추출하는 과정을 구현했다. 각 계층의 역할을 구분하고, 데이터 흐름의 구조를 이해할 수 있었다.
초기에는 캡슐화 과정에서 데이터가 손실되거나 역캡슐화 과정에서 잘못된 데이터를 반환하는 문제가 발생했다.
이를 해결하기 위해 각 계층의 데이터를 구분
하고, 헤더와 데이터의 경계를 정의하여 무결성을 보장했다.
결말
이번 프로젝트를 통해 HTTP 요청과 응답 데이터를 송수신하는 과정에서 TCP/IP 계층의 캡슐화
와 역캡슐화
가 어떻게 작동하는지 명확히 이해할 수 있었다. 이 과정을 직접 코드로 구현하면서 HTTP가 TCP/IP 위에서 어떻게 동작하는지
학습할 수 있었다.
특히, 네트워크 통신의 본질을 이해함으로써 네트워크 문제를 해결할 수 있는 능력
을 키웠다.