포스트

OSI 7계층과 TCP/IP — 왜 네트워크를 굳이 층으로 쪼갰나

OSI 7계층과 TCP/IP 4계층의 매핑, 캡슐화·역캡슐화 과정, 각 계층의 PDU와 대표 프로토콜, 그리고 네트워크를 굳이 계층으로 나누는 이유(관심사 분리)를 그림과 함께 설명합니다.

OSI 7계층과 TCP/IP — 왜 네트워크를 굳이 층으로 쪼갰나

“헤더가 왜 이렇게 여러 겹이지?”

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/IPPDU(데이터 단위)대표 프로토콜대표 장비주소
7 응용응용dataHTTP, DNS, gRPC——
6 표현응용dataTLS, 인코딩, 압축——
5 세션응용data세션 관리——
4 전송전송세그먼트(TCP)/데이터그램(UDP)TCP, UDP, QUICL4 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 헤더를 차례로 껴입고, 다 입은 프레임이 선로로 나갑니다.

응용 (HTTP) DATA 전송 (TCP) TCP DATA 네트워크 (IP) IP TCP DATA 링크 (Ethernet) ETH IP TCP DATA FCS ↑ 헤더는 앞에, 트레일러(FCS)는 뒤에 붙는다 → 완성된 "프레임"이 선로로

여기서 두 가지를 꼭 봐두세요. (1) 각 계층이 붙이는 헤더는 그 계층의 주소·제어 정보입니다 — TCP는 포트·순서번호, IP는 출발/목적 IP, Ethernet은 MAC·FCS. (2) 아래 계층은 위 계층이 준 덩어리를 그냥 페이로드(payload)로 취급할 뿐, 그 안을 들여다보지 않습니다. IP 입장에서 TCP 세그먼트는 “내용물”이고, Ethernet 입장에서 IP 패킷은 또 “내용물”입니다. 이 무지가 바로 계층의 힘입니다.

두 호스트 사이: 내려갔다, 라우터를 거쳐, 올라온다

종단 간 통신은 송신 호스트에서 전 계층을 내려가 비트로 나가고, 라우터들은 필요한 층까지만 올라가 처리한 뒤 다시 내려보내며, 최종 수신 호스트에서 전 계층을 올라옵니다. 라우터는 3계층 장비라 IP까지만 보고, 스위치는 2계층이라 프레임까지만 봅니다.

송신 호스트 라우터 (L3) 수신 호스트 응용 전송 네트워크 링크 물리 네트워크 링크 물리 IP까지만 보고 다음 홉 결정 응용 전송 네트워크 링크 물리 ↓ 내려가며 캡슐화 · 물리선로 통과 · ↑ 올라가며 역캡슐화

이 그림이 라우팅·스위칭을 이해하는 토대입니다. 라우터는 매 홉마다 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의 진화가 이어집니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

시리즈 · 네트워크 A-Z (20편)

  1. 네트워크란 무엇인가 — 회선 교환 vs 패킷 교환, 왜 인터넷은 패킷을 선택했나
  2. OSI 7계층과 TCP/IP — 왜 네트워크를 굳이 층으로 쪼갰나 지금 보는 글
  3. 이더넷·MAC·스위치 — 스위치는 어떻게 "어느 포트로 보낼지" 스스로 배우나
  4. IP 주소와 서브넷팅 — /24를 /26으로 쪼갠다는 게 비트 단위로 무슨 뜻인가
  5. 라우팅은 어떻게 길을 찾나 — 라우팅 테이블, Longest Prefix Match, 그리고 BGP
  6. ARP와 L2/L3 경계 — IP는 아는데 왜 MAC을 또 묻나
  7. TCP는 어떻게 신뢰를 만드나 — 3-way handshake, 상태 머신, 그리고 TIME_WAIT
  8. TCP는 얼마나 빨리 보낼까 — 흐름 제어 vs 혼잡 제어, 그리고 톱니파의 비밀
  9. UDP와 QUIC — TCP를 버려야 더 빨라지는 순간
  10. DNS는 어떻게 이름을 주소로 바꾸나 — 루트부터 권한 서버까지, 그리고 캐시의 마법
  11. HTTP의 진화 — 1.1의 줄 서기에서 HTTP/2 멀티플렉싱, HTTP/3까지
  12. TLS/HTTPS는 어떻게 도청 불가능한 채널을 만드나 — 핸드셰이크부터 인증서 체인까지
  13. NAT와 사설망 — 주소 하나로 수백 대가 인터넷을 쓰는 법, 그리고 P2P가 막히는 이유
  14. 로드 밸런싱 — L4와 L7은 무엇이 다르며, 왜 헬스체크가 서비스를 살리고 죽이나
  15. 프록시·리버스 프록시·CDN — 콘텐츠를 사용자 코앞으로 옮기는 기술
  16. 방화벽·보안그룹·네트워크 ACL — stateful과 stateless가 가르는 모든 것
  17. VPC & 클라우드 네트워킹 — 라우팅 테이블 한 줄이 퍼블릭과 프라이빗을 가른다
  18. 소켓과 커널 네트워크 스택 — accept 한 줄 뒤에서 벌어지는 일
  19. 네트워크 성능 — 대역폭은 왜 빠름이 아닌가 (RTT·BDP·처리량의 진실)
  20. 현대 네트워킹 — 사이드카, eBPF, 그리고 경계가 사라진 신뢰