📚 네트워크 · 패킷 분석 › 01. TCP/IP 구조 이해 — 23편
이전 글: 22. TCP/IP 4계층 · 다음 글: 24. Encapsulation
선행 글(리눅스 시스템 기초): Linux 네트워크 구조 · IP / TCP / UDP / Port
보안관제에서 보는 모든 증거는 특정 계층의 정보입니다.
계층을 모르면 "이 로그로 무엇을 알 수 있고, 무엇은 알 수 없는가"를 판단할 수 없습니다.
예를 들어 방화벽 로그에 외부 IP → 내부 서버:443 허용이 찍혀 있어도, 그 안에서 어떤 요청이 오갔는지는 방화벽 로그만으로 알 수 없습니다. 다음 계층의 증거(웹 로그, IDS, 패킷)를 찾아야 합니다.
이 글은 이후 모든 시리즈(포트·프로토콜 → Wireshark → 장비 → 스캔 → 방화벽 → IDS → 관제 통합)의 공통 지도 역할을 합니다.
| OSI 7계층 | TCP/IP 4계층 | 데이터 단위(PDU) | 식별자 | 대표 프로토콜 | 관제에서 보는 곳 |
|---|---|---|---|---|---|
| 7 응용 · 6 표현 · 5 세션 | 응용 | 데이터(메시지) | URL, 도메인, 계정 | HTTP, DNS, SSH, TLS, SMTP | 웹·DNS 로그, IDS 페이로드 |
| 4 전송 | 전송 | 세그먼트(TCP) / 데이터그램(UDP) | 포트 | TCP, UDP | 방화벽 로그, ss |
| 3 네트워크 | 인터넷 | 패킷 | IP 주소 | IP, ICMP | 방화벽·라우터 로그 |
| 2 데이터링크 · 1 물리 | 네트워크 접근 | 프레임 / 비트 | MAC 주소 | Ethernet, ARP | ARP 테이블, 스위치 MAC 테이블 |
TLS는 교재에 따라 표현·세션 계층 역할로 설명되기도 합니다. TCP/IP 모델에서는 응용 계층에 묶어 보는 것이 일반적입니다.
| 구분 | OSI 7계층 | TCP/IP 4계층 |
|---|---|---|
| 성격 | 설명·표준화를 위한 참조 모델 | 실제 인터넷이 동작하는 구현 모델 |
| 실무 사용 | 장비·공격 분류 용어 (L2 스위치, L3 라우터, L4 방화벽, L7 WAF) | 패킷 구조 해석, 프로토콜 동작 |
실무에서는 "몇 계층 장비/공격인가"는 OSI 번호로 말하고, 실제 패킷은 TCP/IP 구조로 읽는다고 생각하면 됩니다.
보내는 쪽은 위에서 아래로 헤더를 붙이고(캡슐화), 받는 쪽은 아래에서 위로 헤더를 떼어냅니다(역캡슐화).
[송신 측]
응용 : GET / HTTP/1.1 ... ← 데이터
↓ + TCP 헤더 (Src Port 51544 → Dst Port 80)
전송 : [TCP | 데이터] ← Segment
↓ + IP 헤더 (192.168.10.20 → 서버 IP)
인터넷 : [IP | TCP | 데이터] ← Packet
↓ + Ethernet 헤더 (내 MAC → 게이트웨이 MAC) + FCS
링크 : [Eth | IP | TCP | 데이터 | FCS] ← Frame
↓
물리 : 0101… (전기/광 신호)
[수신 측] 물리 → 링크 → 인터넷 → 전송 → 응용 (헤더를 하나씩 제거)
꼭 기억할 세 가지:
스위치(L2) : Ethernet 헤더(MAC)까지
라우터(L3) : + IP 헤더
Stateful 방화벽 : + TCP/UDP 헤더(포트, 연결 상태)
IDS/IPS · WAF(L7) : + 페이로드(애플리케이션 데이터)
→ 이것이 "방화벽 로그에는 없고 IDS Alert에는 있는 정보"가 생기는 이유입니다.
실습 환경: Linux VM 1대 (Rocky Linux 또는 Ubuntu), 인터넷 연결.
ens33은 예시 인터페이스 이름입니다. ip -br link로 확인한 본인 인터페이스 이름으로 바꿔서 실행하세요.
# L2 : 인터페이스와 MAC 주소
ip -br link
# L3 : IP 주소와 서브넷
ip -br addr
# L3 : 외부(8.8.8.8)로 가려면 어떤 게이트웨이를 거치는가
ip route get 8.8.8.8
# L2 : 게이트웨이의 MAC 주소 (ARP 캐시)
ip neigh
📷 [실습 화면 삽입]
ip -br addr,ip route get 8.8.8.8,ip neigh실행 결과
# 터미널 1 : -e 옵션으로 L2(MAC) 헤더까지 출력, 6개만 캡처
sudo tcpdump -i ens33 -nn -e -c 6 'tcp port 80'
# 터미널 2 : 평문 HTTP 요청 발생
curl -s -o /dev/null http://example.com
sudo tcpdump -i ens33 -nn -w layers.pcap 'tcp port 80'
# 다른 터미널에서 curl 실행 후 Ctrl+C
layers.pcap을 Wireshark로 열고 HTTP 요청 패킷(GET /)을 선택합니다.
📷 [실습 화면 삽입] Wireshark Packet Details 창 —
Frame / Ethernet II / Internet Protocol Version 4 / Transmission Control Protocol / Hypertext Transfer Protocol5단 구조가 보이는 화면
tcpdump -e 출력 한 줄은 대략 아래 형식입니다. (주소·포트는 예시 값이며, 실제 값은 환경마다 다릅니다.)
00:0c:29:aa:bb:cc > 00:50:56:dd:ee:ff, ethertype IPv4 (0x0800), length 74:
192.168.10.20.51544 > 93.184.215.14.80: Flags [S], seq 1234567890, win 64240, length 0
| 출력 부분 | 계층 | 의미 |
|---|---|---|
00:0c:29:aa:bb:cc > 00:50:56:dd:ee:ff | L2 | 출발지 MAC → 목적지 MAC |
ethertype IPv4 (0x0800) | L2→L3 | 프레임 안에 IPv4 패킷이 들어 있음 |
192.168.10.20 > 93.184.215.14 | L3 | 출발지 IP → 목적지 IP |
.51544 > .80 | L4 | 출발지 포트(임시 포트) → 목적지 포트(HTTP) |
Flags [S] | L4 | TCP SYN — 연결 시작 (3-Way Handshake 첫 단계) |
확인 체크리스트
ip neigh에 나온 게이트웨이 MAC과 같은가? (같다면 1번 원리 확인)하나의 통신을 여러 장비가 각자 볼 수 있는 계층만큼 기록합니다.
| 증거 출처 | 주 계층 | 알 수 있는 것 | 알 수 없는 것 |
|---|---|---|---|
| ARP 테이블 / 스위치 MAC 테이블 | L2 | 같은 네트워크 안의 어떤 장비(MAC)인지 | 외부 공격자의 실제 위치 |
| 방화벽 로그 | L3~L4 | Src/Dst IP, Port, 허용·차단 | 요청 내용(URL, 페이로드) |
| tcpdump / Wireshark | L2~L7 | 헤더 전체 + 평문 페이로드 | TLS로 암호화된 내용 |
| IDS/IPS Alert (Snort, Suricata) | L3~L7 | 룰(시그니처)과 일치한 패턴 | 룰에 없는 행위 |
| 웹서버 / DNS 로그 | L7 | URL, 상태코드, 질의 도메인 | 네트워크 경로, 차단 여부 |
분석 흐름 예시
방화벽 로그: 외부 IP → 내부 웹서버:80 허용 (L3~L4 확인)
↓ "무엇을 요청했는가?" → 방화벽 로그로는 알 수 없음
IDS Alert / 웹 로그: 요청 URL·페이로드 확인 (L7 확인)
↓ "실제로 어떤 패킷이 오갔는가?"
패킷(pcap): 요청·응답 전체 확인 (L2~L7 검증)
| 계층 | 공격 예시 | 주로 보는 증거 |
|---|---|---|
| L2 | ARP Spoofing | ARP 테이블, 패킷 |
| L3 | ICMP 스윕, IP 스푸핑 | 방화벽 로그, 패킷 |
| L4 | 포트 스캔, SYN Flood | 방화벽 로그, IDS Alert |
| L7 | SQL Injection, 웹셸, DNS 터널링 | 웹·DNS 로그, IDS Alert, 패킷 |
데이터 → 세그먼트 → 패킷 → 프레임 순서로 캡슐화된다.