네트워크 — 왜 계층으로 나누나
지금 이 글자가 당신 화면에 뜨기까지, 데이터는 서버의 디스크에서 나와 — 케이블과 공기를 타고, 수십 개의 라우터를 거쳐, 당신의 랜카드를 지나 브라우저까지 왔다. 이 여정에는 전기 신호를 어떻게 0과 1로 바꿀지부터 어느 길로 보낼지, 중간에 빠진 조각을 어떻게 다시 받을지, 남이 못 읽게 어떻게 암호화할지까지 — 성격이 전혀 다른 문제들이 한가득 얽혀 있다. 이걸 한 덩어리 코드로 풀려고 하면 손도 못 댄다. 그래서 네트워크는 이 문제들을 계층(layer)으로 나눠 각 층이 자기 일만 하게 한다. 이 한 가지 발상 — 계층화 — 을 이해하면 TCP도 HTTP도 라우팅도 모두 "몇 층의 일인가"로 정리된다. 이 노트 전체가 그 위에 선다.
두 개의 모델 — OSI와 TCP/IP
계층을 나누는 방식은 두 가지가 표준처럼 쓰인다. 개념을 가르칠 때 쓰는 OSI 7계층과, 실제 인터넷이 도는 TCP/IP 4(5)계층이다. 둘은 같은 일을 다른 칸 수로 나눈 것뿐이다.
실무에서 더 자주 쓰는 건 TCP/IP 모델인데, 대략 — 응용 계층(HTTP·DNS·TLS), 전송 계층(TCP·UDP), 인터넷 계층(IP), 링크 계층(이더넷·Wi-Fi)으로 묶는다(OSI의 5·6·7을 '응용'으로 합친 셈이다). 이름이 무엇이든 핵심은 같다 — 위로 갈수록 사람·앱에 가까운 추상적인 일(이 페이지를 보여 줘), 아래로 갈수록 기계·물리에 가까운 구체적인 일(이 전압을 1로 읽어)을 맡는다.
데이터가 계층을 내려가며 옷을 입는다 — 캡슐화
계층이 어떻게 협력하는지는 *캡슐화(encapsulation)*를 보면 한눈에 들어온다. 내가 "안녕"이라는 HTTP 응답을 보낸다고 하자. 이 데이터는 위층에서 아래층으로 내려가면서 각 층이 자기 헤더를 앞에 붙인다 — 마치 편지를 봉투에 넣고, 그 봉투를 더 큰 봉투에 넣는 것과 같다.
전송 계층은 어느 프로그램의 몇 번 포트로 갈지와 순서 번호를 적은 TCP 헤더를 붙이고, 인터넷 계층은 어느 컴퓨터(IP)로 갈지를 적은 IP 헤더를 붙이고, 링크 계층은 *바로 옆 장비(MAC)*로 넘기기 위한 이더넷 헤더를 붙인다. 받는 쪽에서는 정확히 거꾸로 — 아래층부터 위로 올라가며 자기 헤더를 떼어내고(역캡슐화) 알맹이를 위층에 건넨다. 각 층은 자기 헤더만 읽고 나머지는 그냥 알맹이로 취급한다 — IP는 TCP 헤더 안을 들여다보지 않고, TCP는 HTTP 본문을 해석하지 않는다. 이 "위층의 내용은 그냥 짐짝으로 본다"가 계층 독립의 핵심이다.
왜 굳이 나누나 — 관심사 분리와 독립 교체
이렇게 나누면 무엇이 좋을까? 핵심은 관심사 분리다. 각 층이 자기 문제만 풀고 위아래와는 약속된 인터페이스로만 주고받으니, 한 층을 통째로 갈아 끼워도 나머지가 안 흔들린다. 같은 IP 패킷이 유선 이더넷을 타든 Wi-Fi를 타든 광케이블을 타든 — IP 계층은 아래가 무엇인지 몰라도 된다. TCP는 IPv4든 IPv6든 신경 쓰지 않고 신뢰성만 책임진다. 브라우저(응용 계층)는 데이터가 어떤 길로 왔는지 전혀 모른 채 HTTP만 말한다. 만약 이 모든 게 한 덩어리였다면 Wi-Fi 하나 추가하는 데 브라우저까지 고쳐야 했을 것이다.
왜 이게 강력한가 — 이건 추상화 계층의 발상이다. 어떤 부품이 내부 구현은 숨기고 사용법(인터페이스)만 노출하듯, 각 네트워크 계층은 내부 동작은 감추고 위층엔 단순한 서비스만 제공한다. "TCP는 바이트 스트림을 신뢰성 있게 전달한다"는 약속만 지키면, 그 아래에서 재전송을 몇 번 하든 위층은 알 필요가 없다. 복잡함을 층마다 가두는 것이다.
실무에서는 — 문제도 계층으로 쪼개 본다
이 계층 구조는 장애를 디버깅할 때 진가를 발휘한다. "사이트가 안 열려요"라는 한 문장의 문제를, 엔지니어는 아래 계층부터 위로 하나씩 끊어 확인한다. 먼저 케이블·Wi-Fi가 붙었나(물리·링크), ping이 가나(IP 계층이 상대 컴퓨터까지 닿나), 포트가 열렸나(telnet/nc로 전송 계층 연결), DNS가 이름을 푸나(응용 계층), 마지막으로 curl로 HTTP 응답을 본다. 한 계층씩 통과 여부를 확인하면 "어디까지는 멀쩡하고 어디서 끊겼다"가 좁혀진다 — 전체를 한꺼번에 노려보는 것보다 훨씬 빠르다. 그래서 문제를 계층으로 쪼개 보는 습관이 네트워크 디버깅의 첫걸음이다.
정리하면, 네트워크는 전기 신호부터 암호화까지 성격이 다른 문제들을 계층으로 나눠 각 층이 자기 일만 하게 한 구조다(OSI 7 / TCP/IP 4). 데이터는 내려가며 각 층의 헤더를 입고(캡슐화) 보내지고, 받는 쪽은 올라가며 벗긴다. 이 분리 덕에 한 층을 갈아 끼워도 나머지가 안 흔들리고(이더넷↔Wi-Fi, IPv4↔IPv6), 문제도 층별로 끊어 빠르게 좁힌다. 이 노트의 나머지 — 링크·IP·TCP·DNS·HTTP·TLS — 는 모두 *"이건 몇 층의 일이고, 위아래와 어떤 약속을 주고받나"*를 따라가는 이야기다.