OSI 7계층과 TCP/IP — 왜 네트워크를 굳이 층으로 쪼갰나
OSI 7계층과 TCP/IP 4계층의 매핑, 캡슐화·역캡슐화 과정, 각 계층의 PDU와 대표 프로토콜, 그리고 네트워크를 굳이 계층으로 나누는 이유(관심사 분리)를 그림과 함께 설명합니다.
“헤더가 왜 이렇게 여러 겹이지?”
tcpdump로 패킷 하나를 까보면 이더넷 헤더 안에 IP 헤더가 있고, 그 안에 TCP 헤더가 있고, 또 그 안에 HTTP가 들어 있습니다. 양파처럼 겹겹이 싸여 있죠. 이걸 “원래 그래”로 넘기면 MTU 문제, MSS 협상, 캡슐화 오버헤드, VPN 안의 패킷 같은 걸 만났을 때 매번 막힙니다.
이 겹겹의 구조는 우연이 아니라 설계입니다. 앞 글에서 본 “네트워크는 best-effort 전달만 하고 신뢰성은 끝단이 책임진다”는 분담을, 더 잘게 쪼개 각 층이 한 가지 관심사만 책임지게 만든 것이 계층 모델입니다. 이 글은 OSI 7계층을 외우는 게 아니라, 왜 층으로 쪼갰고, 한 바이트가 그 층들을 어떻게 내려갔다 올라오는지를 끝까지 따라갑니다.
두 모델, 하나의 현실
OSI 7계층은 개념 모델(교과서·면접·용어의 기준)이고, 실제로 인터넷이 돌아가는 건 TCP/IP 모델입니다. 둘을 나란히 놓고 봐야 혼란이 없습니다.
flowchart LR
subgraph OSI["OSI 7계층 (개념)"]
direction TB
A7["7 응용 Application"]
A6["6 표현 Presentation"]
A5["5 세션 Session"]
A4["4 전송 Transport"]
A3["3 네트워크 Network"]
A2["2 데이터링크 Data Link"]
A1["1 물리 Physical"]
end
subgraph TCP["TCP/IP (현실)"]
direction TB
B4["응용 (HTTP·DNS·TLS)"]
B3["전송 (TCP·UDP)"]
B2["인터넷 (IP·ICMP)"]
B1["링크 (Ethernet·Wi-Fi)"]
end
A7 -.-> B4
A6 -.-> B4
A5 -.-> B4
A4 -.-> B3
A3 -.-> B2
A2 -.-> B1
A1 -.-> B1
| OSI 계층 | TCP/IP | PDU(데이터 단위) | 대표 프로토콜 | 대표 장비 | 주소 |
|---|---|---|---|---|---|
| 7 응용 | 응용 | data | HTTP, DNS, gRPC | — | — |
| 6 표현 | 응용 | data | TLS, 인코딩, 압축 | — | — |
| 5 세션 | 응용 | data | 세션 관리 | — | — |
| 4 전송 | 전송 | 세그먼트(TCP)/데이터그램(UDP) | TCP, UDP, QUIC | L4 LB | 포트 |
| 3 네트워크 | 인터넷 | 패킷 | IP, ICMP, BGP | 라우터, L3 스위치 | IP |
| 2 데이터링크 | 링크 | 프레임 | Ethernet, 802.11, ARP | 스위치, 브리지 | MAC |
| 1 물리 | 링크 | 비트 | 전기/광 신호, 케이블 | 허브, 리피터 | — |
현실 체크 — “계층은 모델이지 코드가 아니다.” 리눅스 커널은 OSI를 그대로 구현하지 않습니다. 실제로는 대략 5계층(응용 / 전송 / IP / 링크 / 물리)이고, OSI의 5·6·7은 응용 프로그램과 라이브러리 안에 뭉쳐 있습니다(예: TLS는 “6계층”이라지만 실제론 응용 위 라이브러리). 계층 번호를 신성시하지 말고, 누가 무엇을 책임지는가로 이해하세요.
왜 굳이 층으로 쪼갰나 — 관심사 분리와 교체 가능성
계층화의 진짜 가치는 각 층이 위·아래 층의 내부를 몰라도 된다는 데 있습니다. 이걸 캡슐화된 인터페이스라고 부릅니다.
- 교체 가능성: Wi-Fi든 이더넷이든 LTE든, 위의 IP 입장에선 “프레임을 다음 홉으로 던져주는 무언가”일 뿐입니다. 물리 매체를 갈아끼워도 TCP·HTTP는 한 줄도 안 바뀝니다. 노트북을 Wi-Fi에서 유선으로 바꿔도 브라우저가 멀쩡한 이유입니다.
- 독립적 진화: HTTP/1.1 → HTTP/2 → HTTP/3로 응용·전송이 바뀌는 동안 IP는 그대로입니다. 반대로 IPv4 → IPv6로 3계층이 바뀌어도 위층은 거의 영향이 없습니다.
- 관심사 분리: 전송 계층은 “신뢰성·순서”만, 네트워크 계층은 “목적지까지 길 찾기”만, 링크 계층은 “옆 노드까지 한 홉”만 책임집니다. 디버깅할 때 문제를 한 층에 가둘 수 있습니다.
이게 앞 글의 “끝단 책임” 원칙을 일반화한 end-to-end 원칙입니다 — 네트워크 중간은 단순하게(전달만), 똑똑한 기능은 끝단으로.
캡슐화: 한 바이트가 옷을 껴입는 과정
송신 호스트에서 데이터는 위에서 아래로 내려가며 각 계층의 헤더를 덧입습니다(캡슐화). 수신 호스트에서는 아래에서 위로 올라가며 헤더를 한 겹씩 벗깁니다(역캡슐화). 아래 애니메이션에서 HTTP 데이터가 내려가며 TCP·IP·Ethernet 헤더를 차례로 껴입고, 다 입은 프레임이 선로로 나갑니다.
여기서 두 가지를 꼭 봐두세요. (1) 각 계층이 붙이는 헤더는 그 계층의 주소·제어 정보입니다 — TCP는 포트·순서번호, IP는 출발/목적 IP, Ethernet은 MAC·FCS. (2) 아래 계층은 위 계층이 준 덩어리를 그냥 페이로드(payload)로 취급할 뿐, 그 안을 들여다보지 않습니다. IP 입장에서 TCP 세그먼트는 “내용물”이고, Ethernet 입장에서 IP 패킷은 또 “내용물”입니다. 이 무지가 바로 계층의 힘입니다.
두 호스트 사이: 내려갔다, 라우터를 거쳐, 올라온다
종단 간 통신은 송신 호스트에서 전 계층을 내려가 비트로 나가고, 라우터들은 필요한 층까지만 올라가 처리한 뒤 다시 내려보내며, 최종 수신 호스트에서 전 계층을 올라옵니다. 라우터는 3계층 장비라 IP까지만 보고, 스위치는 2계층이라 프레임까지만 봅니다.
이 그림이 라우팅·스위칭을 이해하는 토대입니다. 라우터는 매 홉마다 IP 헤더를 보고 목적지까지 길을 정하지만(라우팅 글), 실제로 “옆 노드에게 프레임을 건네는” 일은 2계층(이더넷·스위치 글)이 합니다.
캡슐화가 만든 실전 함정: MTU와 오버헤드
계층마다 헤더가 붙는다는 건 payload가 줄어든다는 뜻입니다. 이더넷의 기본 MTU는 1500바이트인데, 여기서 IP 헤더(20) + TCP 헤더(20)를 빼면 실제 데이터(MSS)는 1460바이트뿐입니다.
1
2
[Ethernet 14] [ IP 20 ][ TCP 20 ][ ───── DATA 최대 1460 ───── ] [FCS 4]
└────────────────── MTU 1500 (IP 페이로드 기준) ──────────────────┘
이게 실무에서 자주 터지는 지점입니다.
- VPN·터널링: IPsec/GRE/VXLAN은 기존 패킷을 또 한 겹 캡슐화합니다. 헤더가 더 붙으니 MTU를 초과해 단편화(fragmentation)되거나, DF(Don’t Fragment) 비트 때문에 패킷이 조용히 드롭됩니다. 증상은 “ping은 되는데 큰 파일 전송만 멈춤” — 전형적인 MTU/MSS 블랙홀입니다.
- 해법: 경로 MTU 발견(PMTUD)에 의존하되, ICMP가 방화벽에 막히면 깨지므로 MSS clamping(
iptables ... --set-mss)으로 TCP 협상 단계에서 세그먼트 크기를 강제합니다.
1
2
3
4
5
6
# 인터페이스 MTU 확인
ip link show eth0 # mtu 1500
# 단편화 없이 통과하는 최대 크기 탐색 (DF 비트 + 크기 조절)
ping -M do -s 1472 8.8.8.8 # 1472 + ICMP 8 + IP 20 = 1500
# 패킷의 계층 구조를 눈으로 — 캡슐화가 보인다
sudo tcpdump -i eth0 -nv 'tcp port 443'
면접/리뷰 단골 질문
- Q. OSI와 TCP/IP의 차이는? → OSI는 7계층 개념 모델(용어·교육 기준), TCP/IP는 4계층 실제 구현. 현업은 TCP/IP로 돌고, 대화는 OSI 용어로 한다. 리눅스 실구현은 대략 5계층.
- Q. 캡슐화가 뭐고 왜 하나? → 각 계층이 자기 헤더를 붙여 아래로 넘기는 것. 하위 계층은 상위 PDU를 불투명한 payload로 취급 → 관심사 분리·교체 가능성을 얻는다.
- Q. 라우터와 스위치는 몇 계층 장비인가? → 라우터 3계층(IP 보고 라우팅), 스위치 2계층(MAC 보고 포워딩). L3 스위치는 둘을 합친 것.
- Q. MSS가 1460인 이유는? → MTU 1500 − IP 20 − TCP 20. 옵션이 붙으면 더 줄고, 터널링하면 더 줄어 MTU 문제가 생긴다.
- Q. 세그먼트·패킷·프레임의 차이는? → 같은 데이터의 계층별 이름. 전송=세그먼트, 네트워크=패킷, 링크=프레임.
정리
- 계층화의 본질은 관심사 분리 + 교체 가능성 — 한 층을 바꿔도 다른 층이 안 무너진다(IPv4↔IPv6, Wi-Fi↔이더넷).
- 캡슐화: 내려가며 헤더를 껴입고, 올라가며 벗는다. 하위 계층은 상위 PDU를 불투명 payload로 본다.
- 데이터 단위 이름: 전송=세그먼트, 네트워크=패킷, 링크=프레임, 물리=비트.
- 장비는 자기 계층까지만 본다: 라우터=IP(3), 스위치=MAC(2).
- 헤더 누적은 공짜가 아니다 → MTU/MSS 문제. 터널링·VPN에서 특히 조심, MSS clamping으로 해결.
다음 글: 가장 아래에서 “옆 노드에게 한 홉” 전달을 책임지는 이더넷·MAC·스위치로 내려갑니다. 위쪽으로는 TCP와 HTTP의 진화가 이어집니다.
