📚 네트워크 · 패킷 분석 › 01. TCP/IP 구조 이해 — 25편
이전 글: 24. Encapsulation · 다음 글: 26. PDU란 무엇인가
Decapsulation(역캡슐화) 은 24. Encapsulation의 반대 과정입니다. 수신 측은 가장 바깥쪽 헤더부터 검사 → 판단 → 제거를 반복하며 데이터를 위 계층으로 올립니다.
단순히 "헤더를 떼어 낸다"로만 이해하면 중요한 부분을 놓칩니다. 각 계층은 헤더를 떼기 전에 "이 데이터를 내가 받아야 하는가, 위로 올려도 되는가" 를 판단하며, 조건이 맞지 않으면 그 자리에서 조용히 폐기하거나 오류로 응답합니다. 관제에서 보는 많은 현상(응답 없음, RST, ICMP 오류)이 이 판단의 결과입니다.
일반 호스트가 이더넷으로 TCP 패킷을 받을 때의 흐름입니다.
[NIC] 신호 수신 → FCS 검사
├─ 오류 → 폐기 (인터페이스 오류 카운터 증가)
↓ 정상
[네트워크 접근] 목적지 MAC이 내 MAC / 브로드캐스트 / 가입한 멀티캐스트인가?
├─ 아니오 → 폐기 (무차별 모드 캡처 시에는 캡처만 됨)
↓ 예 → EtherType 확인 (0x0800 → IPv4)
[인터넷] IP 헤더 검사 → 목적지 IP가 내 주소인가?
├─ 아니오 → 라우터(포워딩 활성)면 전달, 일반 호스트면 폐기
↓ 예 → Protocol 확인 (6 → TCP)
[전송] 목적지 포트를 사용하는 소켓이 있는가?
├─ 없음 → TCP는 RST 응답 / UDP는 ICMP Port Unreachable
↓ 있음
[응용] 소켓을 연 프로세스(예: nginx)가 데이터를 읽음
각 계층의 판단 기준과 결과를 표로 정리하면 다음과 같습니다.
| 계층 | 확인하는 값 | 조건 불일치 시 | 관찰 가능한 흔적 |
|---|---|---|---|
| NIC | FCS | 폐기 | ip -s link의 RX errors |
| 네트워크 접근 | 목적지 MAC, EtherType | 폐기 | 거의 없음 |
| 인터넷 | 목적지 IP, 헤더 체크섬, TTL | 폐기 또는 전달 (라우터) | TTL 만료 시 ICMP Time Exceeded |
| 전송 | 목적지 포트, 체크섬, TCP 상태 | TCP RST / ICMP Port Unreachable | 패킷 캡처, 방화벽 로그 |
| 응용 | 요청 내용 | 응용 오류 응답 | 웹·서비스 로그 (예: 400, 404) |
[PC] L7→L1 캡슐화 ─→ [스위치] L2까지 확인 ─→ [라우터] L3까지 해제 후 L2 재캡슐화 ─→ [서버] L1→L7 역캡슐화
실습 예시: 본인 소유 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.]
[S.])로 응답[R.])로 응답서버 호스트 방화벽이 포트를 막고 있다면 결과가 달라집니다. firewalld의 기본 동작은 zone 설정에 따라 다르므로 firewall-cmd --list-all로 확인합니다.
| 서버 상태 | TCP 접속 시 관찰 결과 | 클라이언트 표시 예 |
|---|---|---|
| 포트 열림 (소켓 있음) | SYN/ACK 응답 | succeeded / open |
| 포트 닫힘 (소켓 없음, 방화벽 허용) | RST 응답 | Connection refused |
| 방화벽 reject | ICMP 오류(또는 설정에 따라 RST) 응답 | No route to host 등 |
| 방화벽 drop | 응답 없음 | 시간 초과 |
흔적이 남는 곳
ip -s link), 커널 통계(netstat -s, nstat)관제자가 확인할 질문
오탐 주의