📚 네트워크 · 패킷 분석 › 01. TCP/IP 구조 이해 — 25편
이전 글: 24. Encapsulation · 다음 글: 26. PDU란 무엇인가

1. 개념

Decapsulation(역캡슐화) 은 24. Encapsulation의 반대 과정입니다. 수신 측은 가장 바깥쪽 헤더부터 검사 → 판단 → 제거를 반복하며 데이터를 위 계층으로 올립니다.

단순히 "헤더를 떼어 낸다"로만 이해하면 중요한 부분을 놓칩니다. 각 계층은 헤더를 떼기 전에 "이 데이터를 내가 받아야 하는가, 위로 올려도 되는가" 를 판단하며, 조건이 맞지 않으면 그 자리에서 조용히 폐기하거나 오류로 응답합니다. 관제에서 보는 많은 현상(응답 없음, RST, ICMP 오류)이 이 판단의 결과입니다.


2. 동작 원리

일반 호스트가 이더넷으로 TCP 패킷을 받을 때의 흐름입니다.

[NIC] 신호 수신 → FCS 검사
      ├─ 오류 → 폐기 (인터페이스 오류 카운터 증가)
      ↓ 정상
[네트워크 접근] 목적지 MAC이 내 MAC / 브로드캐스트 / 가입한 멀티캐스트인가?
      ├─ 아니오 → 폐기 (무차별 모드 캡처 시에는 캡처만 됨)
      ↓ 예 → EtherType 확인 (0x0800 → IPv4)
[인터넷] IP 헤더 검사 → 목적지 IP가 내 주소인가?
      ├─ 아니오 → 라우터(포워딩 활성)면 전달, 일반 호스트면 폐기
      ↓ 예 → Protocol 확인 (6 → TCP)
[전송] 목적지 포트를 사용하는 소켓이 있는가?
      ├─ 없음 → TCP는 RST 응답 / UDP는 ICMP Port Unreachable
      ↓ 있음
[응용] 소켓을 연 프로세스(예: nginx)가 데이터를 읽음

각 계층의 판단 기준과 결과를 표로 정리하면 다음과 같습니다.

계층확인하는 값조건 불일치 시관찰 가능한 흔적
NICFCS폐기ip -s link의 RX errors
네트워크 접근목적지 MAC, EtherType폐기거의 없음
인터넷목적지 IP, 헤더 체크섬, TTL폐기 또는 전달 (라우터)TTL 만료 시 ICMP Time Exceeded
전송목적지 포트, 체크섬, TCP 상태TCP RST / ICMP Port Unreachable패킷 캡처, 방화벽 로그
응용요청 내용응용 오류 응답웹·서비스 로그 (예: 400, 404)

3. 주요 특징

[PC] L7→L1 캡슐화 ─→ [스위치] L2까지 확인 ─→ [라우터] L3까지 해제 후 L2 재캡슐화 ─→ [서버] L1→L7 역캡슐화
  • 호스트 방화벽은 역캡슐화 도중에 끼어듭니다. Linux의 netfilter(firewalld·iptables·nftables)는 인터넷·전송 계층 처리 단계에서 패킷을 검사하므로, 차단된 패킷은 응용 계층까지 올라가지 않습니다. 그 결과 응용 로그에는 흔적이 없고 방화벽 로그에만 남습니다.
  • 캡처 위치는 역캡슐화 이전입니다. tcpdump·Wireshark는 호스트 방화벽이 판단하기 전의 패킷을 보기 때문에, "캡처에는 있는데 서비스 로그에는 없다"는 상황이 정상적으로 생길 수 있습니다.

4. 예시

실습 예시: 본인 소유 VM 두 대(클라이언트 192.168.10.20, 서버 192.168.10.50)에서 "열린 포트"와 "닫힌 포트"에 접속했을 때 전송 계층의 판단 결과를 비교합니다. 명령은 Rocky Linux와 Ubuntu가 같으며 nc가 없으면 설치합니다(Rocky: sudo dnf install -y nmap-ncat, Ubuntu: sudo apt install -y netcat-openbsd).

# 서버: 역캡슐화 과정을 관찰
sudo tcpdump -i ens160 -nn "host 192.168.10.20 and (tcp or icmp)"

# 클라이언트: 열린 포트(22)와 닫힌 포트(8081)에 각각 접속 시도
nc -vz -w 2 192.168.10.50 22
nc -vz -w 2 192.168.10.50 8081

tcpdump 출력 예시(값은 환경마다 다름, 일부 필드 생략):

192.168.10.20.51514 > 192.168.10.50.22:   Flags [S]
192.168.10.50.22 > 192.168.10.20.51514:   Flags [S.]
192.168.10.20.51516 > 192.168.10.50.8081: Flags [S]
192.168.10.50.8081 > 192.168.10.20.51516: Flags [R.]
  • 22번: 소켓이 있으므로 SYN/ACK([S.])로 응답
  • 8081번: 소켓이 없으므로 커널이 RST([R.])로 응답

서버 호스트 방화벽이 포트를 막고 있다면 결과가 달라집니다. firewalld의 기본 동작은 zone 설정에 따라 다르므로 firewall-cmd --list-all로 확인합니다.

서버 상태TCP 접속 시 관찰 결과클라이언트 표시 예
포트 열림 (소켓 있음)SYN/ACK 응답succeeded / open
포트 닫힘 (소켓 없음, 방화벽 허용)RST 응답Connection refused
방화벽 rejectICMP 오류(또는 설정에 따라 RST) 응답No route to host 등
방화벽 drop응답 없음시간 초과

5. 보안 관점

  • 응답 여부 자체가 정보입니다. "RST가 온다 = 호스트는 살아 있고 포트는 닫힘", "무응답 = 필터링되었거나 호스트가 없음"처럼, 역캡슐화 단계의 반응 차이로 대상 상태를 추정할 수 있습니다. 포트 스캔이 이 차이를 이용합니다(216. TCP Port Scan 특징에서 다룸).
  • 앞 계층 검사를 통과한 패킷만 응용에 도달합니다. 방어 관점에서는 불필요한 패킷을 가능한 한 아래 계층(방화벽)에서 버리는 것이 공격 표면을 줄이는 방법입니다.
  • 파서 취약점: 각 계층의 헤더를 해석하는 코드(커널, IDS, 캡처 도구의 해석기)도 비정상 헤더를 받으면 오동작할 수 있습니다. 탐지 장비·분석 도구의 업데이트가 필요한 이유입니다.

6. SOC 관점

흔적이 남는 곳

  • NIC 오류 카운터(ip -s link), 커널 통계(netstat -s, nstat)
  • 호스트·경계 방화벽 로그: 전송 계층 이전에 차단된 흔적
  • 응용 로그: 모든 계층을 통과한 요청만 기록

관제자가 확인할 질문

  • 이 요청은 어느 계층까지 도달했는가? 방화벽 로그만 있는가, 응용 로그까지 있는가?
  • 대상이 RST·ICMP 오류로 응답했는가, 무응답이었는가? 응답 패턴이 여러 포트에 걸쳐 반복되는가?
  • 캡처에는 있는데 서비스 로그에 없다면, 중간(호스트 방화벽)에서 버려진 것은 아닌가?

오탐 주의

  • 닫힌 포트에 대한 RST 한두 개는 설정 오류, 오래된 클라이언트 설정 등 정상 상황에서도 흔합니다. 빈도·대상 범위와 함께 판단합니다.

7. 핵심 정리

  • Decapsulation은 수신 측이 바깥 헤더부터 검사·판단·제거하며 데이터를 위 계층으로 올리는 과정입니다.
  • 각 계층은 MAC, IP, 포트를 확인해 조건이 맞지 않으면 폐기하거나 RST·ICMP 오류로 응답합니다.
  • 스위치는 2계층, 라우터는 3계층까지만 역캡슐화하며, 라우터는 새 이더넷 헤더로 다시 캡슐화합니다.
  • 캡처는 역캡슐화 이전, 응용 로그는 모든 계층을 통과한 이후의 기록입니다.
  • 관제에서는 요청이 어느 계층까지 도달했는지를 로그 위치로 판단합니다.
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글