네트워크 기초: OSI 계층에서 pcap 바이트까지
OSI 계층, TCP와 UDP, 플래그와 TTL, 주요 포트, ARP Spoofing, DoS와 DDoS, DMZ, pcap 컨테이너와 패킷 바이트 순서를 한 편으로 정리한 개념 노트.
목차 9
2026-08-09 업데이트 — IP spoofing을 DDoS 유형으로 분류하고 여러 DoS 기법을 모두 DDoS로 묶었던 설명을 바로잡았다. pcap 컨테이너의 엔디언과 패킷 내부 프로토콜의 바이트 순서도 구분했다.
왜 계층으로 나누는가
OSI 7계층은 네트워크 통신을 7단계로 나눈 모델이다. 데이터를 보낼 때는 7계층에서 1계층 방향으로 내려가고, 받을 때는 반대로 올라간다. 계층을 나누면 문제가 어디서 생겼는지 좁힐 수 있고, 공격과 방어도 몇 계층 이야기인지로 정리된다.
| 계층 | 이름 | 핵심 역할 | 대표 예시 |
|---|---|---|---|
| 7 | 응용 | 사용자가 직접 쓰는 서비스 | HTTP, FTP, DNS, SMTP |
| 6 | 표현 | 형식 변환·암호화·압축 | SSL/TLS, JPEG, UTF-8 |
| 5 | 세션 | 연결 상태와 세션 관리 | 로그인 세션 |
| 4 | 전송 | 전송 방식 관리 | TCP, UDP |
| 3 | 네트워크 | IP 기반 경로 결정 | IP, ICMP, 라우터 |
| 2 | 데이터링크 | 같은 네트워크 내부 전달 | MAC, 스위치, ARP |
| 1 | 물리 | 실제 신호 전달 | 랜선, Wi-Fi 신호 |
https://example.com에 한 번 접속하는 동안에도 이 표를 위에서 아래로 훑는다. 브라우저가 HTTP 요청을 만들고(7), TLS로 감싸고(6), 서버와 연결을 유지하고(5), TCP로 전송을 준비하고(4), IP로 목적지를 정하고(3), MAC 주소로 내부망에 넘기고(2), 랜선이나 Wi-Fi 신호로 나간다(1).
TCP와 UDP
전송 방식은 4계층에서 갈린다. TCP는 연결을 확인하고 순서와 신뢰성을 관리해서 웹 접속, SSH, 파일 전송처럼 안정성이 중요한 통신에 쓴다. UDP는 연결 확인 없이 빠르게 보내고 DNS 조회, 스트리밍, 게임처럼 지연이 더 중요한 통신에 쓴다. DNS처럼 상황에 따라 둘 다 쓰는 서비스도 있다.
TCP 연결은 3-way handshake로 열리고 보통 4-way handshake로 닫힌다.
FIN
ACK
FIN
ACK한쪽이 FIN으로 종료 의사를 보내면 상대가 ACK로 확인하고, 반대 방향에서도 FIN과 ACK가 오가며 정리된다. 실제 패킷에서는 상태와 타이밍에 따라 여러 플래그가 함께 보이기도 한다.
파이썬 소켓 실습에서는 열린 포트의 연결 성공을 확인했다. 당시 Windows·Python 환경에서 비어 있는 loopback 포트는 약 513ms 뒤 10035를 반환했다. 이 반환값만으로 방화벽의 패킷 차단 여부를 판정할 수 없고, filtered 상태도 별도로 재현하지 못했다(connect_ex가 0이 아니라고 그 포트가 닫힌 것은 아니다).
TCP 플래그와 TTL
TCP 플래그는 연결 상태와 제어 정보를 나타낸다.
SYN— 연결 시작 요청ACK— 응답 확인FIN— 정상 종료RST— 강제 종료PSH— 데이터를 즉시 애플리케이션에 전달URG— 긴급 데이터 표시
TTL은 IP 패킷이 무한히 순환하지 않도록 두는 제한값이다. 라우터를 하나 지날 때마다 줄고 0이 되면 패킷은 버려진다. 포트 스캔의 응답, 방화벽이 패킷을 처리하는 방식, 경로가 몇 홉을 거치는지를 읽을 때 이 두 값이 단서가 된다.
자주 보는 포트
포트는 한 호스트에서 도는 여러 서비스를 구분하는 번호다. 스캔 결과에서 자주 만나는 것들은 다음과 같다.
| 포트 | 서비스 | 포트 | 서비스 |
|---|---|---|---|
| 21 / 20 | FTP 제어 / 데이터 | 443 | HTTPS |
| 22 | SSH | 445 · 137 · 135 | SMB · NetBIOS · RPC |
| 23 | Telnet | 1433 · 1521 | MSSQL · Oracle |
| 25 | SMTP | 3306 · 5432 | MySQL · PostgreSQL |
| 53 | DNS | 3389 · 5985 | RDP · WinRM |
| 80 | HTTP | 27017 | MongoDB |
| 110 · 143 | POP3 · IMAP | 161 · 162 (UDP) | SNMP |
DNS는 일반 조회에 UDP 53을 주로 쓰지만 Zone Transfer나 큰 응답에서는 TCP 53도 쓴다. 그리고 포트 번호만으로 서비스를 단정할 수 없다. 8888/tcp 같은 비표준 포트에서도 웹이나 내부 관리 도구가 돌기 때문에, 침투테스트에서는 번호와 서비스 배너를 함께 본다.
ARP Spoofing이 통하는 이유
ARP는 같은 네트워크에서 IP에 대응하는 MAC 주소를 찾는 데 쓰인다. 응답을 받은 장비는 그 매핑을 ARP 캐시에 저장하는데, ARP에는 인증 절차가 없다. 그래서 공격자가 위조된 ARP 응답을 반복해서 보내면 피해자의 캐시가 잘못된 값으로 갱신된다. 게이트웨이 IP가 공격자의 MAC에 연결되도록 속이면 피해자의 트래픽이 공격자를 거쳐 흐르고, 중간자 공격이나 스니핑, 세션 탈취, 변조로 이어진다.
탐지할 때는 매핑이 바뀌는지를 본다. 같은 IP의 MAC이 갑자기 바뀌는지, 게이트웨이 IP가 평소와 다른 MAC으로 잡히는지, 여러 IP가 한 MAC으로 몰리는지를 감시한다.
방어는 한 가지로 끝나지 않는다. 모든 단말에 정적 ARP를 거는 것은 운영 부담이 커서 게이트웨이나 서버 같은 주요 장비에만 고려하고, 일반 환경에서는 스위치의 DHCP Snooping과 Dynamic ARP Inspection을 ARP 감시와 함께 쓴다. 트래픽은 HTTPS나 SSH로 암호화해 탈취됐을 때 피해를 줄이고, 브로드캐스트 도메인을 나눠 공격이 닿는 범위를 좁힌다.
영향을 받는 계층으로 묶어 보는 DoS와 DDoS
DoS는 시스템이나 네트워크 자원을 고갈시켜 정상 사용을 방해하고 주로 가용성을 침해한다. DDoS는 이 공격을 수많은 호스트에서 분산해 수행하는 형태다. 분산 여부는 출발지 구성에 관한 특성이지 OSI 계층 구분이 아니다. 아래 목록은 공격이 주로 소모시키는 자원을 계층별로 묶어 보는 교육적 정리이며, 한 기법이 언제나 DDoS라는 뜻도, 한 계층에만 걸친다는 뜻도 아니다.
3계층 중심 — IP·ICMP와 조각 재조립 같은 패킷 처리 경로를 노린다. Ping of Death(비정상적으로 큰 패킷), Smurf(브로드캐스트 반사), Teardrop(조각 오프셋 조작), Land Attack(출발지와 목적지를 같게 위조)은 역사적인 DoS 예시이며 여러 호스트에서 수행돼야만 DDoS가 된다. IP spoofing은 이 목록과 같은 DoS 유형이 아니라 출발지 주소를 위조하는 기법이다. 공격 출처를 감추거나 반사 트래픽을 피해자에게 보내는 데 쓰일 수 있으므로, 어떤 공격이 spoofing을 이용했는지 따로 적는다.
4계층 중심 — 연결 상태와 포트 자원을 소모시킨다. SYN Flooding은 연결을 완성하지 않은 반쯤 열린 연결을 대량으로 만들어 backlog queue를 고갈시키고, UDP Flooding은 UDP 패킷으로 대역폭과 처리 자원을 소모시킨다. 한 출발지에서도 DoS가 될 수 있고 수많은 호스트가 함께 보내면 DDoS가 된다. SYN backlog를 늘리는 것은 완화책 하나일 뿐이라 SYN cookies, rate limiting, 방화벽 정책, 전용 방어 장비나 CDN을 함께 본다.
7계층 중심 — 정상 요청처럼 보이는 트래픽으로 서버 자원을 소모시킨다. GET Flooding(대량 GET), Slowloris(헤더를 천천히 보내 연결 점유), RUDY(POST 본문을 느리게 전송)가 예시다. 여기서도 여러 공격원이 참여했는지를 확인한 뒤 DoS와 DDoS를 구분한다. 정상 요청과 구분이 어려워 요청 패턴, 세션, 속도 제한, WAF 규칙을 함께 봐야 한다. 그 구분을 실제로 규칙과 임계값으로 옮기면 오탐이 어디서 생기는지가 드러난다(접근 로그에서 공격 신호를 규칙으로 잡기, 실시간 로그 모니터링 루프).
DMZ
DMZ는 외부 인터넷과 내부망 사이에 따로 둔 중간 구간이다.
인터넷 <-> DMZ <-> 내부망외부에서 접근해야 하는 서버, 그러니까 공개 웹 서버나 메일 게이트웨이, VPN 게이트웨이, 프록시, 외부 연동 API를 내부망에 직접 두지 않고 이 구역에 배치한다. DMZ의 서버가 침해되더라도 내부망으로 바로 넘어가지 못하도록 방화벽 정책과 망 분리를 걸고, DMZ에서 내부로 가는 트래픽은 필요한 포트와 대상만 허용한다.
pcap과 엔디언
pcap은 캡처한 패킷을 저장하는 파일 형식이다. Wireshark와 tcpdump가 쓰고, 구조는 헤더와 패킷의 반복이다.
Global Header
Packet Header 1
Packet Data 1
Packet Header 2
Packet Data 2
...Global Header는 파일 전체의 형식과 버전, 타임스탬프 정밀도, 링크 계층 타입을 담는다. Packet Header는 각 패킷의 캡처 시간과 길이를, Packet Data는 링크 계층 헤더를 포함해 네트워크에서 캡처한 부분의 바이트를 담는다. 여기에는 서로 다른 두 가지 바이트 순서가 있다. pcap 컨테이너의 여러 바이트 필드는 파일 엔디언으로 읽고, Packet Data 안의 IP·TCP 같은 프로토콜 필드는 각 프로토콜이 정한 순서로 읽는다.
엔디언은 여러 바이트로 된 값을 저장할 때의 배치 순서다.
0x12345678
Big Endian: 12 34 56 78
Little Endian: 78 56 34 12pcap의 magic number를 보면 File Header와 Packet Record Header의 여러 바이트 값을 어느 엔디언으로 읽어야 하는지, 타임스탬프 단위가 마이크로초인지 나노초인지 알 수 있다. 파일 엔디언을 잘못 잡으면 캡처 시각과 길이를 틀리게 읽고 다음 Packet Data의 경계도 잃는다. 그러나 magic number가 Packet Data 안의 포트와 IP 주소를 little endian이나 big endian으로 바꾸는 것은 아니다. 인터넷 프로토콜 헤더는 별도의 network byte order를 따르고, 시그니처는 캡처된 바이트열을 그 순서대로 비교한다. 바이너리 파일과 메모리 덤프도 pcap의 magic number를 가져다 쓰는 것이 아니라 각 형식의 명세와 구조에 맞춰 해석해야 한다.
여기까지는 강의와 공식 문서로 정리한 것이고, 직접 돌려서 확인한 범위는 포트 판정뿐이다. ARP Spoofing의 탐지 패턴, DoS·DDoS 기법의 실제 트래픽 모양, pcap을 바이트로 직접 파싱하는 일은 아직 해 보지 않았다. 이번 DoS·DDoS 분류와 pcap 바이트 순서 정정도 패킷을 새로 생성하거나 파서를 실행한 결과가 아니라 NIST·IETF 문서와 기존 설명을 대조한 개념 검토다.
참고 자료
- NIST Glossary: Distributed Denial of Service
- RFC 2827: Network Ingress Filtering
- IETF: PCAP Capture File Format
- RFC 2292: Advanced Sockets API for IPv6
2026-09-25 정정: 연결된 포트 실습의 관측을 즉시 거절로 설명한 문장을 당시 반환값과 대기 시간에 맞췄다. filtered 상태는 재현하지 못한 범위로 구분했다.