캡슐화와 역캡슐화
캡슐화와 역캡슐화
1. 캡슐화 (Encapsulation) 란?
정의
- 데이터를 전송할 때 각 계층에서 필요한 정보(헤더)를 추가하는 과정
- 상위 계층에서 하위 계층으로 내려가면서 헤더가 붙음
- 데이터를 “캡슐"처럼 감싸는 것
왜 캡슐화가 필요한가?
헤더 없이 데이터만 보내면?
송신자: [안녕하세요] ─────────────→ 수신자: ???
- 누가 보낸 건지 모름
- 어디로 보내야 하는지 모름
- 어떤 순서로 조립해야 하는지 모름
- 오류가 있는지 확인 불가
헤더를 붙이면?
송신자: [발신:A, 수신:B, 순서:1][안녕하세요] ───→ 수신자: OK!헤더 (Header)와 트레일러 (Trailer)
| 구성 요소 | 위치 | 역할 |
|---|---|---|
| 헤더 (Header) | 데이터 앞 | 제어 정보, 주소, 프로토콜 정보 |
| 페이로드 (Payload) | 중간 | 실제 데이터 |
| 트레일러 (Trailer) | 데이터 뒤 | 오류 검출 (데이터 링크 계층) |
2. 캡슐화 과정 상세
계층별 캡슐화 흐름
[송신 측 - 캡슐화 과정]
┌─────────────────────────────────────────────────────────────┐
│ 응용 계층 (Application) │
│ │
│ 사용자 데이터 생성 │
│ 예: HTTP 요청 "GET /index.html" │
│ │
│ [ DATA ] │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 전송 계층 (Transport) │
│ │
│ TCP/UDP 헤더 추가 │
│ - 출발지/목적지 포트 번호 │
│ - 순서 번호, 확인 응답 번호 │
│ │
│ [TCP Header][ DATA ] → 세그먼트 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 네트워크 계층 (Network) │
│ │
│ IP 헤더 추가 │
│ - 출발지/목적지 IP 주소 │
│ - TTL, 프로토콜 번호 │
│ │
│ [IP Header][TCP Header][ DATA ] → 패킷 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 데이터 링크 계층 (Data Link) │
│ │
│ 이더넷 헤더 + 트레일러 추가 │
│ - 출발지/목적지 MAC 주소 │
│ - FCS (오류 검출) │
│ │
│ [ETH Header][IP][TCP][DATA][FCS] → 프레임 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 물리 계층 (Physical) │
│ │
│ 전기/광 신호로 변환 │
│ │
│ 10110100101001010010100... → 비트 │
└─────────────────────────────────────────────────────────────┘각 계층 헤더의 주요 정보
TCP 헤더 (전송 계층)
┌──────────────────────────────────────────────────────────┐
│ 0 1 2 │
│ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 │
├──────────────────────────────────────────────────────────┤
│ 출발지 포트 (16bit) │ 목적지 포트 (16bit) │
├──────────────────────────────────────────────────────────┤
│ 순서 번호 (32bit) │
├──────────────────────────────────────────────────────────┤
│ 확인 응답 번호 (32bit) │
├──────────────────────────────────────────────────────────┤
│ 헤더길이│예약│플래그│ 윈도우 크기 │
├──────────────────────────────────────────────────────────┤
│ 체크섬 │ 긴급 포인터 │
└──────────────────────────────────────────────────────────┘| 필드 | 크기 | 설명 |
|---|---|---|
| 출발지 포트 | 16bit | 송신 애플리케이션 식별 |
| 목적지 포트 | 16bit | 수신 애플리케이션 식별 |
| 순서 번호 | 32bit | 데이터 순서 보장 |
| 확인 응답 번호 | 32bit | 수신 확인 |
| 플래그 | 6bit | SYN, ACK, FIN 등 |
IP 헤더 (네트워크 계층)
┌──────────────────────────────────────────────────────────┐
│ 버전│헤더길이│ 서비스타입 │ 전체 길이 │
├──────────────────────────────────────────────────────────┤
│ 식별자 │플래그│ 프래그먼트 오프셋 │
├──────────────────────────────────────────────────────────┤
│ TTL │ 프로토콜 │ 헤더 체크섬 │
├──────────────────────────────────────────────────────────┤
│ 출발지 IP 주소 (32bit) │
├──────────────────────────────────────────────────────────┤
│ 목적지 IP 주소 (32bit) │
└──────────────────────────────────────────────────────────┘| 필드 | 크기 | 설명 |
|---|---|---|
| 버전 | 4bit | IPv4 = 4, IPv6 = 6 |
| TTL | 8bit | 패킷 수명 (라우터 통과 횟수) |
| 프로토콜 | 8bit | 상위 프로토콜 (TCP=6, UDP=17) |
| 출발지 IP | 32bit | 송신자 IP 주소 |
| 목적지 IP | 32bit | 수신자 IP 주소 |
이더넷 헤더 (데이터 링크 계층)
┌────────────┬────────────┬──────────┬──────────────┬───────┐
│ 목적지 MAC │ 출발지 MAC │ 타입 │ 데이터 │ FCS │
│ (6byte) │ (6byte) │ (2byte) │ (46-1500byte)│(4byte)│
└────────────┴────────────┴──────────┴──────────────┴───────┘| 필드 | 크기 | 설명 |
|---|---|---|
| 목적지 MAC | 6byte | 수신 장치의 MAC 주소 |
| 출발지 MAC | 6byte | 송신 장치의 MAC 주소 |
| 타입 | 2byte | 상위 프로토콜 (IPv4=0x0800) |
| FCS | 4byte | 오류 검출용 체크섬 |
3. 역캡슐화 (Decapsulation)
정의
- 수신 측에서 각 계층의 헤더를 제거하며 원본 데이터를 추출하는 과정
- 하위 계층에서 상위 계층으로 올라가면서 헤더 제거
- 캡슐화의 반대 과정
역캡슐화 과정
[수신 측 - 역캡슐화 과정]
┌─────────────────────────────────────────────────────────────┐
│ 물리 계층 (Physical) │
│ │
│ 전기/광 신호 수신 │
│ 10110100101001010010100... → 디지털 데이터 변환 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 데이터 링크 계층 (Data Link) │
│ │
│ [ETH Header][IP][TCP][DATA][FCS] │
│ │
│ 1. FCS로 오류 검사 │
│ 2. 목적지 MAC 주소 확인 (자신의 MAC?) │
│ 3. 이더넷 헤더, FCS 제거 │
│ │
│ 결과: [IP][TCP][DATA] → 네트워크 계층으로 전달 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 네트워크 계층 (Network) │
│ │
│ [IP Header][TCP][DATA] │
│ │
│ 1. 목적지 IP 주소 확인 (자신의 IP?) │
│ 2. 프로토콜 필드 확인 (TCP=6) │
│ 3. IP 헤더 제거 │
│ │
│ 결과: [TCP][DATA] → 전송 계층으로 전달 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 전송 계층 (Transport) │
│ │
│ [TCP Header][DATA] │
│ │
│ 1. 목적지 포트 번호 확인 (80 = HTTP) │
│ 2. 순서 번호로 데이터 재조립 │
│ 3. TCP 헤더 제거 │
│ │
│ 결과: [DATA] → 응용 계층으로 전달 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 응용 계층 (Application) │
│ │
│ [DATA] = "GET /index.html HTTP/1.1" │
│ │
│ 웹 서버가 HTTP 요청 처리 │
└─────────────────────────────────────────────────────────────┘역캡슐화 시 검증 사항
| 계층 | 검증 항목 | 불일치 시 동작 |
|---|---|---|
| 데이터 링크 | MAC 주소, FCS | 프레임 폐기 |
| 네트워크 | IP 주소, 체크섬 | 패킷 폐기 또는 라우팅 |
| 전송 | 포트 번호, 체크섬 | 세그먼트 폐기 |
4. 캡슐화/역캡슐화 전체 흐름
실제 통신 예시: 웹 페이지 요청
[클라이언트 PC] [웹 서버]
192.168.1.10 10.0.0.5
MAC: AA:AA:AA:AA:AA:AA MAC: BB:BB:BB:BB:BB:BB
┌─────────────────────────────────────────────────────┐
응용 │ HTTP 요청: "GET /index.html" │
└────────────────────────┬────────────────────────────┘
↓ 캡슐화
┌────────────────────────┴────────────────────────────┐
전송 │ [TCP:50000→80][HTTP 요청] │
└────────────────────────┬────────────────────────────┘
↓ 캡슐화
┌────────────────────────┴────────────────────────────┐
네트워크 │ [IP:192.168.1.10→10.0.0.5][TCP][HTTP] │
└────────────────────────┬────────────────────────────┘
↓ 캡슐화
┌────────────────────────┴────────────────────────────┐
데이터 │ [ETH:AA→BB][IP][TCP][HTTP][FCS] │
링크 └────────────────────────┬────────────────────────────┘
↓
┌────────────────────────┴────────────────────────────┐
물리 │ 101011001010010100101... │
└────────────────────────┬────────────────────────────┘
│
[네트워크 전송]
│
↓
┌────────────────────────┴────────────────────────────┐
물리 │ 신호 수신 → 디지털 변환 │
└────────────────────────┬────────────────────────────┘
↓ 역캡슐화
┌────────────────────────┴────────────────────────────┐
데이터 │ MAC 확인 → 헤더/FCS 제거 │
링크 └────────────────────────┬────────────────────────────┘
↓ 역캡슐화
┌────────────────────────┴────────────────────────────┐
네트워크 │ IP 확인 → 헤더 제거 │
└────────────────────────┬────────────────────────────┘
↓ 역캡슐화
┌────────────────────────┴────────────────────────────┐
전송 │ 포트 80 → 웹 서버로 전달 │
└────────────────────────┬────────────────────────────┘
↓ 역캡슐화
┌────────────────────────┴────────────────────────────┐
응용 │ HTTP 요청 처리 → 응답 생성 │
└─────────────────────────────────────────────────────┘5. PDU (Protocol Data Unit) 정리
계층별 PDU 명칭
┌───────────────┬─────────────────┬──────────────────────────┐
│ 계층 │ PDU │ 구성 │
├───────────────┼─────────────────┼──────────────────────────┤
│ 응용 계층 │ 데이터 │ 순수 사용자 데이터 │
│ │ (Data) │ │
├───────────────┼─────────────────┼──────────────────────────┤
│ 전송 계층 │ 세그먼트 │ TCP 헤더 + 데이터 │
│ │ (Segment) │ (UDP는 데이터그램) │
├───────────────┼─────────────────┼──────────────────────────┤
│ 네트워크 계층 │ 패킷 │ IP 헤더 + 세그먼트 │
│ │ (Packet) │ │
├───────────────┼─────────────────┼──────────────────────────┤
│ 데이터링크 계층│ 프레임 │ ETH 헤더 + 패킷 + FCS │
│ │ (Frame) │ │
├───────────────┼─────────────────┼──────────────────────────┤
│ 물리 계층 │ 비트 │ 0과 1의 전기/광 신호 │
│ │ (Bit) │ │
└───────────────┴─────────────────┴──────────────────────────┘데이터 크기 변화
데이터 크기
응용 계층 [ 1460 bytes ]
전송 계층 [20B][ 1460 bytes ] = 1480 bytes
TCP
네트워크 계층 [20B][20B][ 1460 bytes ] = 1500 bytes (MTU)
IP TCP
데이터링크 [14B][20B][20B][1460B][4B] = 1518 bytes
ETH IP TCP Data FCSMTU (Maximum Transmission Unit)
- 네트워크에서 전송할 수 있는 최대 패킷 크기
- 이더넷 MTU: 1500 bytes
- MTU 초과 시 단편화 (Fragmentation) 발생
6. VPN과 추가 캡슐화
VPN (Virtual Private Network)
정의
- 가상 사설망
- 공용 네트워크(인터넷)를 통해 암호화된 터널을 만들어 안전하게 통신
- 마치 전용선처럼 사용
VPN 동작 원리
일반 통신:
[PC] ─── [인터넷 (공개)] ─── [서버]
↑ 도청 가능
VPN 통신:
[PC] ═══════════════════════════════ [서버]
╔══════════════════════════════╗
║ 암호화된 터널 (인터넷 통과) ║
╚══════════════════════════════╝
↑ 도청해도 암호화되어 있음VPN 캡슐화
원본 패킷:
[IP Header][TCP Header][Data]
(원본)
VPN 캡슐화 후:
[New IP][VPN Header][암호화된 원본 패킷]
│
└─ 새로운 헤더로 감싸서 전송VPN 종류
1. 인터넷 VPN
거점 간 접속 (Site-to-Site VPN)
[본사 네트워크] [지사 네트워크]
192.168.1.0/24 192.168.2.0/24
│ │
└── [VPN 라우터] ════ 인터넷 ════ [VPN 라우터] ──┘
IPsec 터널원격 접속 VPN (Remote Access VPN)
[재택 근무자 PC]
│
└── [VPN 클라이언트] ════ 인터넷 ════ [회사 VPN 서버] ─── [사내망]
SSL/TLS 터널| 유형 | 프로토콜 | 용도 |
|---|---|---|
| 거점 간 | IPsec | 본사-지사 연결 |
| 원격 접속 | SSL/TLS | 재택근무, 외근 |
2. IP-VPN (MPLS VPN)
┌─────────────────────────────────────────────────────────────┐
│ 통신사업자 폐쇄망 │
│ (MPLS 망) │
│ ┌─────┐ ┌─────┐ │
│ │ 본사 │ ═══════════════════════════════ │ 지사 │ │
│ └─────┘ 레이블 스위칭 (고속) └─────┘ │
│ │
│ 인터넷을 경유하지 않아 보안성 높음 │
└─────────────────────────────────────────────────────────────┘| 특징 | 인터넷 VPN | IP-VPN (MPLS) |
|---|---|---|
| 사용 망 | 공용 인터넷 | 통신사 전용망 |
| 암호화 | 필수 (IPsec/SSL) | 선택 (폐쇄망이라 안전) |
| 비용 | 저렴 | 비쌈 |
| 품질 보장 | 없음 | QoS 보장 |
IPsec 프로토콜
IPsec 구성:
┌─────────────────────────────────────────────────────────────┐
│ IPsec │
├─────────────────────────┬───────────────────────────────────┤
│ AH │ ESP │
│ (Authentication Header) │ (Encapsulating Security Payload) │
│ │ │
│ - 인증만 제공 │ - 인증 + 암호화 제공 │
│ - 데이터 무결성 │ - 기밀성 보장 │
└─────────────────────────┴───────────────────────────────────┘
IPsec 모드:
- 전송 모드: 원본 IP 헤더 유지, 페이로드만 암호화
- 터널 모드: 전체 패킷 암호화 후 새 IP 헤더 추가7. 패킷 분석 도구로 캡슐화 확인
Wireshark로 확인
Frame 1: 74 bytes on wire (592 bits)
├── Ethernet II
│ ├── Destination: bb:bb:bb:bb:bb:bb
│ ├── Source: aa:aa:aa:aa:aa:aa
│ └── Type: IPv4 (0x0800)
│
├── Internet Protocol Version 4
│ ├── Source: 192.168.1.10
│ ├── Destination: 10.0.0.5
│ ├── Protocol: TCP (6)
│ └── TTL: 64
│
├── Transmission Control Protocol
│ ├── Source Port: 50000
│ ├── Destination Port: 80
│ └── Flags: SYN
│
└── [Payload Data]
└── HTTP Request명령어로 확인 (Windows)
:: 패킷 캡처
netsh trace start capture=yes
:: ARP 테이블 (MAC 주소)
arp -a
:: 라우팅 테이블 (IP 경로)
route print
:: 연결 상태 (포트)
netstat -an핵심 정리
| 개념 | 설명 |
|---|---|
| 캡슐화 | 송신 시 각 계층에서 헤더를 추가하는 과정 |
| 역캡슐화 | 수신 시 각 계층에서 헤더를 제거하는 과정 |
| 헤더 | 데이터 앞에 붙는 제어 정보 |
| 트레일러 | 데이터 뒤에 붙는 오류 검출 정보 (FCS) |
| PDU | 각 계층의 데이터 단위 (세그먼트, 패킷, 프레임, 비트) |
| MTU | 최대 전송 단위 (이더넷: 1500 bytes) |
| VPN | 암호화된 가상 터널을 통한 안전한 통신 |
캡슐화 순서
송신: 응용 → 전송 → 네트워크 → 데이터링크 → 물리 (헤더 추가)
수신: 물리 → 데이터링크 → 네트워크 → 전송 → 응용 (헤더 제거)용어 정리
- VPN: Virtual Private Network (가상 사설망) - 암호화된 터널로 안전한 통신
- 인터넷 VPN: 공용 인터넷망 사용, IPsec 또는 SSL/TLS로 암호화
- IP-VPN: MPLS 기술로 통신사업자 전용 폐쇄망 사용, 암호화 불필요
- IPsec: IP 계층에서 보안을 제공하는 프로토콜 (AH, ESP)
- MPLS: Multi-Protocol Label Switching - 레이블 기반 고속 패킷 전달