iBetter Books
수정

캡슐화 — 봉투에 봉투를 넣다

계층이 머릿속 개념에 그치지 않고 실제 데이터에 흔적을 남기는 방식이 바로 캡슐화입니다. 캡슐화를 이해하면 다음 장에서 Wireshark로 패킷을 열어 볼 때 '아, 이게 그 봉투구나' 하고 곧바로 알아볼 수 있습니다.

내려갈 때마다 봉투가 하나씩

여러분이 웹사이트에 'GET /index.html'이라는 요청을 보낸다고 합시다. 이 요청은 응용 계층에서 출발해 한 층씩 아래로 내려갑니다. 그리고 한 층을 내려갈 때마다 그 층은 자기 정보를 담은 봉투, 곧 헤더를 데이터 앞에 덧붙입니다.

  • 응용 계층은 HTTP 요청 내용을 만듭니다.
  • 전송 계층은 그 앞에 TCP 헤더를 붙입니다. 여기에는 출발 포트와 도착 포트, 순서 번호 등이 담깁니다.
  • 네트워크 계층은 다시 그 앞에 IP 헤더를 붙입니다. 여기에는 출발지와 목적지의 IP 주소가 담깁니다.
  • 데이터링크 계층은 마지막으로 그 앞뒤에 이더넷 헤더와 꼬리를 붙입니다. 여기에는 바로 옆 장비의 MAC 주소가 담깁니다.

그림으로 그리면 다음과 같습니다.

[이더넷 | IP | TCP | HTTP 요청 데이터 | 이더넷 꼬리]
   2계층   3계층  4계층    7계층 데이터

마치 편지를 봉투에 넣고, 그 봉투를 다시 더 큰 봉투에 넣고, 또 그것을 택배 상자에 담는 것과 같습니다. 가장 안쪽에는 우리가 진짜 보내려는 내용(HTTP 데이터)이 있고, 바깥으로 갈수록 운반에 필요한 정보가 한 겹씩 더해집니다.

받는 쪽에서는 반대로

상대 컴퓨터에 도착하면 이 과정이 정확히 거꾸로 일어납니다. 가장 바깥 봉투부터 한 겹씩 벗겨 냅니다. 데이터링크 계층이 이더넷 헤더를 떼어 내고, 네트워크 계층이 IP 헤더를 보고 '나에게 온 게 맞군' 확인한 뒤 떼어 내고, 전송 계층이 TCP 헤더를 보고 어느 프로그램에 줄지 정한 뒤 떼어 냅니다. 마침내 응용 계층에 도착하면 우리가 보낸 'GET /index.html'이 고스란히 남습니다. 이 과정을 역캡슐화라고 부릅니다.

각 층의 데이터에는 이름이 있다

같은 데이터라도 어느 층에 있느냐에 따라 부르는 이름이 다릅니다. 시험에 자주 나오는 부분이니 한 번 정리하고 갑니다.

계층 그 층에서 부르는 이름
응용 계층 메시지(message)
전송 계층 세그먼트(segment, TCP) 또는 데이터그램(datagram, UDP)
네트워크 계층 패킷(packet)
데이터링크 계층 프레임(frame)
물리 계층 비트(bit)

이 이름들은 결국 같은 데이터에 봉투가 몇 겹 둘러졌는지를 나타낼 뿐입니다. 핵심은 하나입니다. 내려가면 붙고, 올라가면 떼어진다. 이 단순한 규칙이 이 책 전체를 관통합니다.

이제 말로만 듣던 이 봉투들을 진짜로 열어 볼 시간입니다. 다음 장에서 Wireshark를 켜고 첫 패킷을 잡아 보겠습니다.