캡슐화와 역캡슐화

캡슐화와 역캡슐화

캡슐화와 역캡슐화

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수신 확인
플래그6bitSYN, ACK, FIN 등

IP 헤더 (네트워크 계층)

┌──────────────────────────────────────────────────────────┐
│ 버전│헤더길이│  서비스타입  │         전체 길이          │
├──────────────────────────────────────────────────────────┤
│      식별자        │플래그│     프래그먼트 오프셋        │
├──────────────────────────────────────────────────────────┤
│    TTL    │  프로토콜  │         헤더 체크섬           │
├──────────────────────────────────────────────────────────┤
│                   출발지 IP 주소 (32bit)                  │
├──────────────────────────────────────────────────────────┤
│                   목적지 IP 주소 (32bit)                  │
└──────────────────────────────────────────────────────────┘
필드크기설명
버전4bitIPv4 = 4, IPv6 = 6
TTL8bit패킷 수명 (라우터 통과 횟수)
프로토콜8bit상위 프로토콜 (TCP=6, UDP=17)
출발지 IP32bit송신자 IP 주소
목적지 IP32bit수신자 IP 주소

이더넷 헤더 (데이터 링크 계층)

┌────────────┬────────────┬──────────┬──────────────┬───────┐
│ 목적지 MAC │ 출발지 MAC │   타입   │    데이터    │  FCS  │
│  (6byte)   │  (6byte)   │ (2byte)  │ (46-1500byte)│(4byte)│
└────────────┴────────────┴──────────┴──────────────┴───────┘
필드크기설명
목적지 MAC6byte수신 장치의 MAC 주소
출발지 MAC6byte송신 장치의 MAC 주소
타입2byte상위 프로토콜 (IPv4=0x0800)
FCS4byte오류 검출용 체크섬

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  FCS

MTU (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 망)                              │
│  ┌─────┐                                    ┌─────┐        │
│  │ 본사 │ ═══════════════════════════════ │ 지사 │        │
│  └─────┘     레이블 스위칭 (고속)           └─────┘        │
│                                                             │
│  인터넷을 경유하지 않아 보안성 높음                           │
└─────────────────────────────────────────────────────────────┘
특징인터넷 VPNIP-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 - 레이블 기반 고속 패킷 전달