← Posts

Network · Layers · TCP/IP

HTTP 밑에 무엇이 있나 - 네트워크 계층

HTTP는 네트워크의 맨 위 한 겹일 뿐이다. 그 밑에 데이터를 실어 나르는 TCP가 있고, 또 그 밑에 기계를 찾아가는 IP가 있다. 봉투 안의 봉투처럼 층으로 쌓인 이 구조를 보면, 왜 각 층을 따로 갈아끼울 수 있는지가 풀린다.

목차
  1. HTTP는 맨 위 한 겹일 뿐이다
  2. 봉투 안의 봉투
  3. 각 층은 아래를 모르고 위를 모른다
  4. 네 층으로 본다
  5. 보내는 쪽은 감싸고 받는 쪽은 벗긴다
  6. 왜 이렇게 나눴나
  7. 어느 층에서 보느냐가 실무를 가른다
  8. 실무에서: 문제를 층으로 나눠 짚는다
  9. 정리

주소창에 한 줄 치면 HTTP 요청이 나간다. 그런데 그 요청은 어떻게 지구 반대편 그 기계까지 닿나. HTTP는 사실 여러 층 중 맨 위 한 겹일 뿐이다. 그 밑을 보는 것으로 이 시리즈를 연다.

HTTP는 맨 위 한 겹일 뿐이다

HTTP 글들은 “연결됐다”에서 출발한다. GET / 같은 요청이 서버로 가고 응답이 온다. 하지만 그 글자들이 실제로 전선을 타고 건너가는 일은 HTTP가 하지 않는다.

HTTP는 “무엇을 주고받을지”만 정한다. 그걸 어떻게 실어 나를지, 어느 기계로 보낼지는 그 아래 층들의 몫이다. HTTP는 아래에 일을 맡기고, 아래는 그 위가 HTTP인지 뭔지 모른 채 자기 일만 한다.

봉투 안의 봉투

이 구조는 봉투 안의 봉투로 그려진다. HTTP 데이터를 편지라 하면, 그 편지를 TCP라는 봉투에 넣고, 그 봉투를 다시 IP라는 봉투에 넣어 보낸다.

diagramdiagram

각 봉투는 자기가 할 일에 필요한 정보를 겉면에 적는다 - IP 봉투엔 “어느 기계로”(주소), TCP 봉투엔 “어느 프로세스로, 몇 번째 조각”(포트·순서). 안쪽 편지 내용은 바깥 봉투가 신경 쓰지 않는다.

각 층은 아래를 모르고 위를 모른다

이 나눔의 핵심은 각 층이 자기 위아래를 몰라도 된다는 것이다.

  • HTTP는 편지 내용만 쓴다. 그게 어느 기계로, 어떤 경로로 가는지는 관심 없다.
  • TCP는 “안 끊기고 순서대로 전하기”만 한다. 실린 게 HTTP인지 뭔지 모른다.
  • IP는 “이 봉투를 저 주소로”만 한다. 안에 TCP가 있는지도 상관없다.

각자 자기 일만 하고 아래에 넘긴다. 그래서 위층을 바꿔도 아래층은 그대로고, 아래층을 바꿔도 위층은 모른다. 이 독립이 뒤에 큰 유연함을 준다.

네 층으로 본다

실무에서 자주 쓰는 그림은 네 층이다(교과서의 일곱 층을 단순화한, 실제 인터넷의 모양).

plaintext
응용 계층    HTTP · DNS   - 무엇을 주고받나
전송 계층    TCP · UDP    - 어느 프로세스로 (TCP는 안 끊기게)
인터넷 계층  IP           - 어느 기계로
링크 계층    이더넷 · WiFi - 실제 전선/전파로

위로 갈수록 “무엇을”에 가깝고, 아래로 갈수록 “어떻게 물리적으로”에 가깝다. 이 시리즈는 위 세 층 - IP·DNS·포트·TCP·UDP - 을 다룬다. 맨 아래 링크 계층(전선·전파)은 하드웨어의 몫이라 깊이 안 판다.

보내는 쪽은 감싸고 받는 쪽은 벗긴다

편지가 오갈 때 층들이 하는 일은 대칭이다.

plaintext
보내는 쪽:  HTTP 편지 → TCP로 감쌈 → IP로 감쌈 → 전선으로
받는 쪽:    전선에서 → IP 벗김 → TCP 벗김 → HTTP 편지

보낼 땐 위에서 아래로 내려오며 봉투를 하나씩 씌우고, 받을 땐 아래에서 위로 올라가며 하나씩 벗긴다. 받는 쪽 HTTP는 자기 앞에 놓인 편지만 볼 뿐, 그게 어떤 봉투들을 거쳐 왔는지 모른다 - 이미 다 벗겨졌으니까.

왜 이렇게 나눴나

층을 나눈 값은 한 층만 갈아끼울 수 있다는 데 있다. 전송 계층을 TCP에서 다른 것으로 바꿔도, 그 위의 HTTP와 그 아래의 IP는 안 바뀐다.

이게 HTTP/3이 “아래층을 바꿨다”의 정체다. HTTP/3은 전송 계층을 TCP에서 UDP 기반으로 갈아끼웠는데, HTTP라는 편지 내용은 거의 그대로다. 층이 나뉘어 있어 아래만 교체할 수 있었다. WiFi로 쓰던 걸 유선으로 바꿔도 HTTP가 안 바뀌는 것도 같은 이유다 - 링크 계층만 달라졌을 뿐이다.

어느 층에서 보느냐가 실무를 가른다

이 계층이 추상적인 이야기가 아니다. load-balancer 글의 “어느 층에서 보는가”가 바로 이 층이다.

  • 전송 계층(L4)에서 보는 장비 - 바깥 봉투들의 겉면(IP 봉투의 주소, TCP 봉투의 포트)만 보고 넘긴다. 빠르지만 안의 HTTP는 모른다.
  • 응용 계층(L7)에서 보는 장비 - 봉투를 다 벗겨 HTTP 편지 내용(경로·헤더)까지 읽고 판단한다. 똑똑하지만 무겁다.

“L4냐 L7이냐”는 결국 어느 봉투까지 뜯어보느냐다. 계층을 알면 이 실무 선택이 당연해진다.

실무에서: 문제를 층으로 나눠 짚는다

  • “연결이 안 된다”를 층으로 쪼갠다 - 이름을 못 찾나(DNS), 기계에 못 닿나(IP), 포트가 막혔나, TLS에서 막혔나. 층으로 나누면 어디가 문제인지 좁혀진다.
  • 아래층이 멀쩡한지부터 - 위층(HTTP) 문제로 보이는 게 실은 아래층(TCP 끊김·DNS 실패)인 경우가 많다. 밑에서부터 확인하는 습관이 시간을 아낀다.
  • 각 층의 도구가 다르다 - 층마다 들여다보는 도구가 따로다. 어느 층 문제인지 알아야 맞는 도구를 든다.

정리

  • HTTP는 네트워크의 맨 위 한 겹 - 무엇을 주고받을지만 정하고, 나르는 일은 아래층에 맡긴다.
  • 데이터는 봉투 안의 봉투로 감싸여 간다 - HTTP를 TCP가, TCP를 IP가 감싼다. 보낼 땐 씌우고 받을 땐 벗긴다.
  • 각 층은 위아래를 몰라도 자기 일만 한다 - 그래서 한 층만 갈아끼울 수 있다(HTTP/3이 전송 계층을 바꾼 것처럼).
  • “어느 층에서 보느냐”(L4/L7)가 실무를 가른다 - 어느 봉투까지 뜯어보느냐다.

다음 글은 그 IP 봉투가 가리키는 것 - 패킷이 어느 기계로 가는지를 정하는 IP 주소로 간다.

관련 글