OSI 모델
OSI Model
네트워크 통신을 7개 계층으로 구분한 국제 표준 참조 모델. 물리-데이터링크-네트워크-전송-세션-표현-응용 계층으로 구성되어 네트워크 문제 해결과 프로토콜 설계의 기준이 됩니다.
OSI Model
네트워크 통신을 7개 계층으로 구분한 국제 표준 참조 모델. 물리-데이터링크-네트워크-전송-세션-표현-응용 계층으로 구성되어 네트워크 문제 해결과 프로토콜 설계의 기준이 됩니다.
OSI(Open Systems Interconnection) 모델은 1984년 국제표준화기구(ISO)가 발표한 네트워크 통신 표준 참조 모델입니다. 네트워크에서 데이터가 어떻게 전송되는지를 7개의 계층으로 나누어 설명하며, 각 계층은 특정 기능을 담당합니다. 이 모델 덕분에 서로 다른 제조사의 장비들도 표준화된 방식으로 통신할 수 있게 되었습니다.
OSI 모델이 등장하기 전, 네트워크 장비와 프로토콜은 각 제조사마다 달랐고, 호환성 문제가 심각했습니다. IBM의 SNA, Digital의 DECnet 등 독자적인 네트워크 아키텍처들이 난립했죠. OSI 모델은 이러한 혼란을 정리하고, 모든 시스템이 상호 운용될 수 있는 공통 기준을 제시했습니다.
7계층 구조의 핵심 원리는 "캡슐화(Encapsulation)"입니다. 데이터가 상위 계층에서 하위 계층으로 내려갈 때마다 각 계층의 헤더가 추가됩니다. 예를 들어, 응용 계층의 HTTP 데이터는 전송 계층에서 TCP 헤더가, 네트워크 계층에서 IP 헤더가, 데이터 링크 계층에서 이더넷 프레임이 추가됩니다. 수신 측에서는 이 과정이 역순으로 진행됩니다.
실무에서 OSI 모델은 네트워크 문제 해결(트러블슈팅)의 표준 프레임워크로 사용됩니다. "인터넷이 안 돼요"라는 문제를 받으면, 1계층(케이블 연결)부터 7계층(애플리케이션)까지 순서대로 점검하여 문제의 원인을 체계적으로 찾을 수 있습니다. 또한 보안 솔루션, 네트워크 장비, 프로토콜 설계 시 각 계층의 역할을 명확히 구분하는 데 활용됩니다.
| 계층 | 이름 | 역할 | 프로토콜/장비 |
|---|---|---|---|
| 7 | 응용 (Application) | 사용자와 직접 상호작용하는 애플리케이션 서비스 제공 | HTTP, HTTPS, FTP, SMTP, DNS |
| 6 | 표현 (Presentation) | 데이터 형식 변환, 암호화/복호화, 압축/해제 | SSL/TLS, JPEG, MPEG, ASCII |
| 5 | 세션 (Session) | 통신 세션 설정, 유지, 종료 관리 | NetBIOS, RPC, NFS |
| 4 | 전송 (Transport) | 종단간 신뢰성 있는 데이터 전송, 포트 번호 관리 | TCP, UDP, 포트 번호 |
| 3 | 네트워크 (Network) | 논리적 주소(IP) 지정, 최적 경로 선택(라우팅) | IP, ICMP, 라우터 |
| 2 | 데이터 링크 (Data Link) | 물리적 주소(MAC) 지정, 프레임 전송, 오류 검출 | Ethernet, MAC, 스위치 |
| 1 | 물리 (Physical) | 비트 단위 전기 신호 전송, 물리적 연결 | 케이블, 허브, 리피터 |
암기 팁: 상위에서 하위로 "All People Seem To Need Data Processing" (7→1), 하위에서 상위로 "Please Do Not Throw Sausage Pizza Away" (1→7)로 외우면 됩니다.
실제 인터넷은 OSI 7계층이 아닌 TCP/IP 4계층 모델을 기반으로 작동합니다. OSI 모델은 이론적 참조 모델이고, TCP/IP는 실제 구현된 프로토콜 스택입니다.
| OSI 7계층 | TCP/IP 4계층 | 설명 |
|---|---|---|
| 7. 응용 6. 표현 5. 세션 |
응용 (Application) | HTTP, FTP, SMTP, DNS 등 |
| 4. 전송 | 전송 (Transport) | TCP, UDP |
| 3. 네트워크 | 인터넷 (Internet) | IP, ICMP, ARP |
| 2. 데이터 링크 1. 물리 |
네트워크 액세스 (Network Access) | Ethernet, Wi-Fi |
왜 TCP/IP를 더 많이 쓸까? OSI 모델은 1970년대 후반 설계되어 1984년에 완성되었지만, TCP/IP는 이미 1983년부터 ARPANET에서 실제로 사용되고 있었습니다. TCP/IP가 먼저 표준으로 자리 잡으면서, OSI는 교육과 참조용으로 남게 되었습니다.
# OSI 계층별 패킷 분석 예제 (scapy 사용)
from scapy.all import *
# 패킷 캡처 및 계층 분석
def analyze_packet(packet):
print("=" * 50)
# Layer 2: 데이터 링크 계층 (Ethernet)
if packet.haslayer(Ether):
eth = packet[Ether]
print(f"[L2 데이터 링크] MAC: {eth.src} → {eth.dst}")
# Layer 3: 네트워크 계층 (IP)
if packet.haslayer(IP):
ip = packet[IP]
print(f"[L3 네트워크] IP: {ip.src} → {ip.dst}, TTL: {ip.ttl}")
# Layer 4: 전송 계층 (TCP/UDP)
if packet.haslayer(TCP):
tcp = packet[TCP]
print(f"[L4 전송] TCP Port: {tcp.sport} → {tcp.dport}")
print(f" Flags: {tcp.flags}, Seq: {tcp.seq}")
elif packet.haslayer(UDP):
udp = packet[UDP]
print(f"[L4 전송] UDP Port: {udp.sport} → {udp.dport}")
# Layer 7: 응용 계층 (HTTP)
if packet.haslayer(Raw):
payload = packet[Raw].load.decode('utf-8', errors='ignore')
if 'HTTP' in payload or 'GET' in payload or 'POST' in payload:
print(f"[L7 응용] HTTP 요청 감지")
print(f" {payload[:100]}...")
# 패킷 캡처 (10개)
# sniff(filter="tcp port 80", prn=analyze_packet, count=10)
# 수동 패킷 생성으로 OSI 계층 이해하기
packet = Ether()/IP(dst="8.8.8.8")/TCP(dport=80)/Raw(b"GET / HTTP/1.1")
print("\n생성된 패킷 구조:")
packet.show()
# 각 계층 크기 확인
print(f"\nL2 (Ethernet): {len(Ether())} bytes")
print(f"L3 (IP): {len(IP())} bytes")
print(f"L4 (TCP): {len(TCP())} bytes")
print(f"전체 패킷: {len(packet)} bytes")
# OSI 계층별 네트워크 진단 명령어
# ===== Layer 1: 물리 계층 =====
# 네트워크 인터페이스 상태 확인
ip link show
ethtool eth0 # 링크 속도, 듀플렉스 확인
# ===== Layer 2: 데이터 링크 계층 =====
# MAC 주소 확인
ip link show | grep ether
arp -a # ARP 테이블 (IP↔MAC 매핑)
# ===== Layer 3: 네트워크 계층 =====
# IP 주소 및 라우팅 확인
ip addr show
ip route show
traceroute google.com # 경로 추적
ping -c 4 google.com # ICMP 연결 테스트
# ===== Layer 4: 전송 계층 =====
# 열린 포트 및 연결 상태 확인
ss -tuln # TCP/UDP 리스닝 포트
netstat -an | grep ESTABLISHED
# TCP 3-way handshake 확인
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'
# ===== Layer 7: 응용 계층 =====
# HTTP 연결 테스트
curl -I https://google.com # HTTP 헤더만
curl -v https://google.com # 상세 연결 정보
# DNS 조회
dig google.com
nslookup google.com
# ===== 통합 진단 =====
# 모든 계층 한번에 점검
mtr google.com # traceroute + ping 결합
# tcpdump로 패킷 계층별 분석
tcpdump -i eth0 -nn -v 'host google.com' -c 5
# Wireshark 필터로 OSI 계층별 분석
# ===== Layer 2 필터 (데이터 링크) =====
eth.addr == aa:bb:cc:dd:ee:ff # 특정 MAC 주소
eth.type == 0x0800 # IPv4 패킷만
arp # ARP 패킷만
# ===== Layer 3 필터 (네트워크) =====
ip.addr == 192.168.1.1 # 특정 IP
ip.src == 192.168.1.0/24 # 특정 서브넷 출발
ip.ttl < 10 # TTL 낮은 패킷
icmp # ICMP 패킷만
# ===== Layer 4 필터 (전송) =====
tcp.port == 80 # TCP 80 포트
tcp.flags.syn == 1 # SYN 패킷 (연결 시작)
tcp.flags.rst == 1 # RST 패킷 (연결 리셋)
tcp.analysis.retransmission # 재전송 패킷
udp.port == 53 # DNS 쿼리
# ===== Layer 7 필터 (응용) =====
http # HTTP 트래픽
http.request.method == "GET" # GET 요청만
http.response.code == 404 # 404 에러
dns # DNS 트래픽
tls.handshake # TLS 핸드셰이크
# ===== 복합 필터 예시 =====
# 특정 서버와의 HTTPS 연결 문제 분석
ip.addr == 8.8.8.8 && (tcp.port == 443 || dns)
# TCP 연결 문제 진단
tcp.analysis.flags && !tcp.analysis.window_update
"일단 OSI 계층별로 점검해봅시다. 1계층부터 보면, 케이블 연결은 정상이고 링크 LED도 켜져 있어요. 3계층 ping은 되는데 4계층 TCP 연결이 안 되네요. 방화벽에서 해당 포트가 막혀 있는 것 같습니다."
"WAF는 7계층 응용 계층에서 HTTP 트래픽을 분석하고, 일반 방화벽은 3-4계층에서 IP와 포트 기반으로 필터링합니다. SQL Injection 같은 공격을 막으려면 7계층 보안 솔루션이 필요해요."
"웹 브라우저에서 URL을 입력하면 7계층 DNS로 도메인 해석 후, 4계층 TCP 3-way handshake로 연결을 맺고, 7계층 HTTP 요청을 보냅니다. 실제로는 TCP/IP 4계층 모델을 쓰지만, 트러블슈팅할 때는 OSI 7계층으로 생각하면 더 체계적입니다."
실제 인터넷은 TCP/IP 모델 기반입니다. OSI는 교육과 트러블슈팅을 위한 참조 모델이지, 실제 구현 표준이 아닙니다.
현실에서는 계층 간 경계가 모호한 경우가 많습니다. TLS는 5-6계층에 걸쳐 있고, HTTP/3의 QUIC은 4-7계층 기능을 통합합니다.
"핑은 되는데 웹이 안 돼요"라면 3계층은 정상, 4-7계층 문제입니다. 반드시 여러 계층을 체계적으로 점검하세요.
트러블슈팅 시 1계층(물리)부터 순서대로 점검. 각 계층별 진단 도구(ping=3계층, telnet=4계층, curl=7계층)를 구분하여 사용하세요.