Chapter 03

프로토콜과 계층

브라우저 주소창에 주소를 치고 엔터를 누르면 노트북은 수십 바이트짜리 “머리말”을 겹겹이 붙인 데이터 덩어리를 내보낸다. 그 머리말 하나하나에는 누가 읽고 무엇을 해야 하는지가 정확히 정해져 있다. 공유기는 바깥 몇 겹만 보고, 서버는 끝까지 벗겨 읽는다. 세계 수십억 대의 장비가 서로 다른 회사에서 만들어졌는데도 이렇게 말이 통하는 이유는 무엇일까? 이 장은 그 약속(프로토콜)과 약속을 쌓는 방법(계층)을 다루고, 실제 패킷 하나를 바이트 단위로 해부한다.

프로토콜: 통신의 약속

전화를 걸면 우리는 자연스럽게 정해진 순서를 따른다. 신호가 가고, 상대가 “여보세요?” 하고, 내가 누구인지 밝히고, 용건을 말하고, “끊을게요” 하고 끊는다. 상대가 아무 말이 없으면 “여보세요? 들리세요?” 하고 다시 묻는다. 이런 약속이 없다면 두 사람이 동시에 말을 시작하거나, 상대가 끊은 줄도 모르고 혼자 이야기하게 된다.

컴퓨터끼리의 약속을 프로토콜(protocol)이라 한다. 사람과 달리 컴퓨터는 눈치가 없으므로 약속을 아주 엄밀하게 정해야 한다. 모든 프로토콜은 세 가지를 정한다.

사람: 전화 예절 컴퓨터: TCP + HTTP 거는 사람받는 사람 따르릉 (연결 요청) “여보세요?” (수락) “저 민수예요” (확인) “내일 몇 시에 만나?” (요청) “7시!” (응답) “끊을게요” (종료) 브라우저웹 서버 SYN SYN + ACK ACK GET / HTTP/1.1 HTTP/1.1 200 OK FIN
그림 3-1. 사람의 전화 예절과 컴퓨터의 대화는 구조가 같다. 연결을 맺고(TCP의 3방향 악수, 9장), 요청하고 응답하고(HTTP, 10장), 끝낸다. 차이는 컴퓨터의 약속이 바이트 단위까지 문서로 정해져 있다는 점이다.
택배 송장

택배 상자에 붙는 송장에는 칸이 정해져 있다. 받는 사람 주소, 보내는 사람, 무게, 운송장 번호, “취급 주의”. 칸의 위치와 의미가 약속되어 있으니 처음 보는 분류 센터 직원도 바로 읽는다. 패킷의 헤더(header)가 바로 이 송장이다. 정해진 자리에 정해진 길이로 주소와 번호가 적혀 있어서, 처음 만나는 라우터도 몇 나노초 만에 읽고 처리한다.

왜 계층으로 나누나

웹 페이지 하나를 받는 데 풀어야 할 문제를 늘어놓아 보자. 전선 위에서 0과 1을 어떤 전압으로 표현할까? 같은 선을 쓰는 여러 장치 중 누구에게 줄까? 지구 반대편까지 어느 길로 갈까? 중간에 잃어버린 조각은 누가 다시 보내나? 받은 바이트가 웹 페이지인지 메일인지 어떻게 아나? 이걸 프로그램 하나가 전부 처리한다면 Wi-Fi가 새로 나올 때마다 세상의 모든 브라우저를 고쳐야 한다.

그래서 통신은 일을 계층(layer)으로 나눈다. 각 계층은 바로 아래 계층이 주는 서비스만 믿고 자기 문제 하나를 푼다. 이것이 관심사의 분리다. 브라우저는 “이 바이트들을 저 서버의 443번 포트로 믿을 수 있게 보내 줘”라고 TCP에 부탁할 뿐, 그 바이트가 구리선을 타는지(4장), 빛이 되는지(5장), 전파가 되는지(11장) 모른다. 그래서 집 공유기를 Wi-Fi 7로 바꿔도, 회사 회선을 광으로 바꿔도 HTTP는 한 글자도 바뀌지 않는다.

응용 HTTP · DNS · SMTP · SSH · WebRTC · 게임 · 메신저 … 전송 TCP · UDP · QUIC IP 링크 이더넷 · Wi-Fi · LTE/5G · PPP · DOCSIS 물리 구리선 · 광섬유 · 전파 · 동축 · 위성 허리: 모두가 지키는 단 하나의 약속 “IP 패킷이면 배달한다” 위로: 새 앱은IP만 믿고 만든다 아래로: 새 매체는IP만 실어 나르면 된다
그림 3-2. 인터넷의 모래시계 모델(hourglass model). 위아래는 넓게 퍼져 계속 새것이 생기지만 가운데 허리인 IP는 거의 하나다. 위의 어떤 앱도 아래의 어떤 매체 위에서 돌 수 있는 비결이다. 그 대신 허리를 바꾸기는 무척 어렵다. IPv4에서 IPv6로의 이사가 수십 년째 진행 중인 이유다(7장).
계층의 대가

계층은 공짜가 아니다. 계층마다 헤더가 붙어 바이트가 늘고(다음 절에서 계산한다), 아래 계층이 무슨 일을 하는지 모르니 최적화 기회를 놓치기도 한다. 예를 들어 TCP는 무선 구간의 일시적 손실을 혼잡으로 오해해 속도를 줄이곤 한다(9장). 그래서 실제 시스템은 가끔 계층을 넘나드는 “반칙”을 한다. 그래도 수십억 대가 함께 쓰는 망을 쪼개서 발전시킬 수 있게 해 준 이득이 훨씬 크다.

OSI 7계층과 TCP/IP

계층을 나누는 방법에는 두 가지 유명한 지도가 있다. 국제표준화기구(ISO)가 1984년에 정리한 OSI 7계층(OSI reference model)은 꼼꼼한 교과서용 지도이고, 실제 인터넷이 쓰는 것은 그보다 단순한 TCP/IP 모델(Internet protocol suite)이다. OSI 방식의 프로토콜은 시장에서 졌지만 “L2 스위치”, “L4 로드밸런서”, “L7 방화벽”처럼 계층 번호는 OSI 것을 그대로 쓴다. 그래서 둘 다 알아야 한다.

OSITCP/IP하는 일데이터 단위대표 프로토콜대표 장비
L7 응용응용앱끼리의 대화 규칙메시지HTTP, DNS, SMTP, SSHL7 로드밸런서, 프록시, WAF
L6 표현문자 인코딩, 압축, 암호화TLS(일부), UTF-8, JPEG
L5 세션대화의 시작·재개(대부분 앱·TLS가 맡음)
L4 전송전송프로그램 구분(포트), 신뢰성, 혼잡 제어세그먼트 / 데이터그램TCP, UDP, QUICL4 로드밸런서, 방화벽, NAT
L3 네트워크인터넷전 세계 주소와 길 찾기패킷IPv4, IPv6, ICMP라우터
L2 데이터 링크링크
(5계층 모델은 링크·물리로 나눔)
한 구간(옆 장치까지) 전달, 오류 검출프레임이더넷, Wi-Fi(802.11), PPP스위치, 브리지, 무선 AP
L1 물리비트를 전압·빛·전파로비트(심볼)1000BASE-T, 광 트랜시버리피터, 허브, 케이블, 모뎀

이 책은 실무에서 가장 흔한 5계층 모델(응용·전송·네트워크·링크·물리)로 설명한다. 단위 이름도 기억해 두자. 같은 바이트 덩어리라도 TCP 입장에서는 세그먼트(segment), IP 입장에서는 패킷(packet), 이더넷 입장에서는 프레임(frame)이라 부른다. 무엇을 기준으로 보느냐에 따라 이름이 달라질 뿐이다.

GAME

이 프로토콜은 몇 층에 살까?

—
카드에 적힌 프로토콜이 5계층 중 어디에 속하는지 골라 보자.
맞힌 개수0
푼 카드0 / 14
정답률—
ARP, ICMP, QUIC, TLS처럼 경계에 걸친 프로토콜도 섞여 있다. 계층 모델은 자연법칙이 아니라 정리용 지도라서 깔끔하게 안 맞는 경우가 있다. 해설에서 “왜 여기로 보는가”를 확인하자.

캡슐화: 상자 속 상자

보내는 쪽에서는 데이터가 위에서 아래로 내려가며 계층마다 자기 헤더(때로는 꼬리말, 트레일러(trailer))를 붙인다. 이를 캡슐화(encapsulation)라 한다. 받는 쪽은 아래에서 위로 한 겹씩 벗기며 각 계층이 자기 헤더만 읽는다(역캡슐화). 각 계층에게 위 계층의 헤더와 데이터는 그냥 내용물, 즉 페이로드(payload)다.

헤더 크기는 프로토콜마다 정해져 있다. TCP 20바이트(옵션이 붙으면 최대 60), UDP 8바이트, IPv4 20바이트(최대 60), IPv6 40바이트, 이더넷 헤더 14바이트에 끝의 오류 검사값 FCS(frame check sequence) 4바이트. 선로 위에서는 프레임 앞에 동기용 프리앰블 8바이트가 붙고, 프레임 사이에 최소 12바이트만큼 쉬는 간격(IFG)을 둔다. 또 이더넷 프레임은 최소 64바이트여야 해서, 내용이 짧으면 0으로 채운다(패딩). 이렇게 실제 데이터가 아닌데 함께 실려 가는 바이트의 비율을 오버헤드(overhead)라 한다.

SIMULATOR

캡슐화와 헤더 오버헤드

전송 계층
네트워크 계층
 
응용 데이터—
이더넷 프레임—
선로 위 전체 (프리앰블·IFG 포함)—
오버헤드—
1 Gbps 회선의 실제 응용 속도—
해볼 것: 메시지를 한 글자로 줄여 보고, 슬라이더를 1460까지 올려 보자. 1460바이트는 IPv4+TCP에서 표준 이더넷(MTU 1500바이트)에 꽉 차는 최대 크기다. 아래 그래프는 응용 데이터 크기에 따른 선로 효율이다. 단순화: TCP·IP 옵션은 없다고 가정했다(실제 TCP는 타임스탬프 옵션으로 보통 12바이트가 더 붙는다). 한글은 UTF-8에서 한 글자에 3바이트다.
예측해 보기

게임이 TCP/IPv4로 1바이트짜리 “키 눌림” 신호를 보낸다. 이더넷 선로 위에서 이 1바이트가 차지하는 비율(효율)은 대략 얼마일까?

위 시뮬레이터에서 데이터 크기를 1로 줄여 확인해 보자.

TCP 20 + IPv4 20 = 40바이트에 데이터 1바이트를 더해도 이더넷 최소 크기를 못 채워 5바이트를 패딩한다. 여기에 이더넷 헤더·FCS 18바이트로 64바이트 프레임, 프리앰블·IFG 20바이트를 더하면 84바이트다. 1/84 ≈ 1.2%. 그래서 작은 메시지를 많이 보내는 프로그램은 여러 개를 모아 보내거나(네이글 알고리즘, 9장) 헤더를 압축한다(이동통신의 ROHC, 14장).

패킷 해부: 바이트 하나하나 읽기

이제 진짜 패킷을 열어 보자. 아래는 노트북(192.168.0.7)이 웹 서버(203.0.113.10)의 80번 포트로 보내는 HTTP 요청 프레임이다. 와이어샤크(Wireshark) 같은 패킷 분석기가 보여 주는 화면을 본떴다. 왼쪽은 계층별 필드 목록, 오른쪽은 실제로 선을 타는 바이트의 16진 덤프다. 바이트나 필드에 마우스를 올리거나 눌러 보자. 특히 두 가지를 눈여겨보자. 라우터를 지날 때마다 1씩 줄어드는 TTL(time to live), 그리고 헤더가 깨지지 않았는지 검사하는 체크섬(checksum)이다. 체크섬은 바이트들을 정해진 방식으로 더한 값으로, 한 비트만 바뀌어도 값이 달라진다.

SIMULATOR

HTTP GET 프레임 해부 (이더넷 + IPv4 + TCP + HTTP)

이더넷 (L2)IPv4 (L3)TCP (L4)HTTP (L7)
프레임 길이—
IP 전체 길이 필드—
IP 헤더 체크섬—
TCP 체크섬—
해볼 것: 경로를 바꾸면 IP 전체 길이와 두 체크섬이 다시 계산된다. TTL만 바꿔도 IP 체크섬이 바뀌지만 TCP 체크섬은 그대로다(TCP 체크섬은 TTL을 포함하지 않는다). 주소는 예시용 대역(RFC 5737의 203.0.113.0/24)이다. 분석기 화면처럼 선로의 프리앰블과 끝의 FCS 4바이트는 빼고 보여 준다. 실제 웹은 대부분 HTTPS(443번)라 HTTP 부분이 암호문으로 보인다.
16진수로 읽는 요령

16진수 두 자리가 1바이트다. 0x0800(이더넷 타입: 다음은 IPv4), 0x45(IPv4, 헤더 20바이트), 0x06(다음은 TCP), 0x0050(포트 80), 0x01BB(포트 443)처럼 자주 보는 값을 외워 두면 덤프만 보고도 구조가 보인다. 네트워크의 여러 바이트 숫자는 큰 자리부터 적는다(빅 엔디언, “네트워크 바이트 순서”).

표준은 누가 만드나

서로 다른 회사의 칩·장비·소프트웨어가 말이 통하려면 약속을 문서로 남기고 모두 따라야 한다. 이 문서를 표준(standard)이라 하고, 분야마다 표준을 만드는 기구가 다르다.

기구성격주로 만드는 것예
IETF
Internet Engineering Task Force
누구나 메일링 리스트로 참여하는 개방형 모임. “대략적 합의와 돌아가는 코드”인터넷 계층 이상: IP, TCP, DNS, HTTP, TLS, QUICRFC 791(IPv4), RFC 8200(IPv6), RFC 9293(TCP), RFC 9000(QUIC), RFC 9110(HTTP)
IEEE 802전기전자공학자협회의 표준 위원회LAN의 링크·물리 계층802.3(이더넷), 802.11(Wi-Fi), 802.1Q(VLAN), 802.15.1(블루투스 원형)
3GPP세계 이동통신 표준 단체들의 연합. 릴리스(Release) 단위로 발표이동통신 무선·코어망LTE(Rel-8), 5G NR(Rel-15), 5G-Advanced(Rel-18~)
ITU
국제전기통신연합(UN 산하)
국가 단위 회원. ITU-T(유선), ITU-R(전파)전화망, DSL, 광 전송, 영상 코덱, 주파수 분배, 이동통신 요구 조건G.992(ADSL), G.993.2(VDSL2), G.652(광섬유), H.264, IMT-2020(5G 요건)
W3C · WHATWG웹 기술 표준 단체HTML, CSS, 웹 APIHTML Living Standard, WebRTC API
IANA / ICANN번호와 이름의 등록소IP 주소 블록, 포트 번호, 프로토콜 번호, 최상위 도메인포트 80 = HTTP, 프로토콜 번호 6 = TCP

IETF의 문서 이름 RFC(Request for Comments)는 1969년 아파넷 시절 “의견을 구합니다”라는 겸손한 메모에서 시작했다. 지금은 9,000번이 넘었고, 한번 번호가 붙으면 고치지 않고 새 번호의 문서로 대체한다. 예를 들어 1981년의 TCP 명세 RFC 793은 2022년 RFC 9293으로 대체되었다.

종단 간 원칙: 중간은 단순하게

인터넷 설계의 중요한 철학이 종단 간 원칙(end-to-end principle)이다(Saltzer·Reed·Clark, 1981). 신뢰성, 암호화, 순서 맞추기 같은 기능은 결국 양 끝의 컴퓨터만 완벽하게 해낼 수 있으니, 망 중간은 “최선을 다해 패킷을 나를 뿐(best effort)” 단순하게 두고 똑똑한 일은 끝에서 하자는 생각이다. 덕분에 라우터는 빠르고 값싸게 만들 수 있었고, 새 앱을 내놓을 때 망 사업자의 허락이 필요 없었다. 웹, 스카이프, 비트토렌트가 모두 이렇게 태어났다.

내 PC스위치라우터방화벽·NATL7 프록시서버 응용전송네트워크링크물리 응용전송네트워크링크물리 MAC 보기IP·TTL포트·연결URL·쿠키 종단 간 대화 (원칙상 중간은 안 본다)
그림 3-3. 중간 장비가 패킷을 어디까지 열어 보는가. 스위치는 링크 헤더(L2), 라우터는 IP 헤더(L3), 방화벽·NAT은 포트와 연결 상태(L4)까지, 프록시·L7 로드밸런서는 HTTP 내용(L7)까지 본다. 깊이 볼수록 할 수 있는 일은 많지만 느려지고, 새 프로토콜을 막기 쉬워진다.
SIMULATOR

중간 장비는 무엇을 읽고, 무엇을 고쳐 쓰나

패킷이 지나는 장비
열어 보는 깊이—
읽는 필드—
고쳐 쓰는 필드—
테두리가 진한 칸은 장비가 읽는 필드, 빨간 점선 칸은 고쳐 쓰는 필드다. 흐린 칸은 그냥 통과시킨다. 실제 장비는 설정에 따라 더 깊이 보기도 한다(예: 라우터의 ACL은 포트까지 본다). L7 프록시가 HTTPS 내용을 보려면 TLS를 중간에서 풀어야 하므로 인증서 설정이 필요하다(22장).
예측해 보기

패킷이 평범한 라우터 하나를 지나갈 때 바뀌는 것은 무엇일까?

위 시뮬레이터에서 “라우터”를 골라 빨간 칸을 확인해 보자.

라우터는 링크 헤더를 벗기고 IP 헤더를 읽은 다음, TTL을 1 줄이고(0이 되면 버리고 ICMP로 알린다) 체크섬을 갱신해 새 링크 헤더를 씌운다. IP 주소는 끝에서 끝까지 그대로이고(NAT은 예외), TCP 헤더는 건드리지 않는다. “IP 주소는 최종 목적지, MAC 주소는 바로 다음 구간”이라는 구분이 핵심이다(6·7장).

현실의 인터넷에는 NAT, 방화벽, 캐시, 통신사의 트래픽 관리 장비처럼 원칙을 어기고 깊이 들여다보는 중간 장비(미들박스(middlebox))가 많다. 이들은 자기가 모르는 TCP 옵션이나 새 프로토콜을 버리기 일쑤라서, 새 전송 프로토콜을 만들기가 매우 어려워졌다(“프로토콜 경직화”). QUIC(9장)이 UDP 위에 올라타고 헤더 대부분을 암호화한 이유가 바로 이것이다. 중간 장비가 볼 수 없으니 간섭할 수도 없다.

핵심 정리

  1. 프로토콜은 형식(바이트 배치), 순서(누가 먼저 무엇을), 오류 시 행동(재전송·폐기)을 정한 약속이다. 헤더는 택배 송장처럼 정해진 칸에 정보를 적는다.
  2. 통신을 계층으로 나누면 각 계층이 자기 문제만 풀고, 아래(매체)가 바뀌어도 위(앱)는 그대로다. 그 중심에 모래시계의 허리인 IP가 있다.
  3. OSI는 7계층, 실제 인터넷은 TCP/IP(4~5계층). 단위는 메시지 → 세그먼트 → 패킷 → 프레임 → 비트, 장비는 허브(L1), 스위치(L2), 라우터(L3), 방화벽·L4 LB, 프록시·L7 LB.
  4. 캡슐화로 TCP 20 + IPv4 20 + 이더넷 18바이트(선로에선 +20)가 붙는다. 작은 메시지일수록 오버헤드 비율이 커져, 1바이트는 효율이 약 1%에 그친다.
  5. 실제 프레임은 목적지 MAC → 출발지 MAC → EtherType(0x0800) → IPv4 헤더(TTL, 프로토콜 6, 체크섬, 주소) → TCP 헤더(포트, 순서 번호, 플래그) → HTTP 순서로 놓인다.
  6. 표준은 IETF(RFC, 인터넷), IEEE 802(이더넷·Wi-Fi), 3GPP(이동통신), ITU(전화망·DSL·주파수)가 나눠 만든다.
  7. 종단 간 원칙: 똑똑한 기능은 양 끝에, 망 중간은 단순하게. 깊이 들여다보는 미들박스는 새 프로토콜의 발목을 잡는다.

확인 퀴즈

집 공유기를 유선에서 Wi-Fi 7로 바꿨다. 브라우저의 HTTP 프로그램은 어떻게 해야 할까?

계층 구조의 핵심 이점이다. 각 계층은 바로 아래 계층의 서비스만 이용하므로, 아래가 바뀌어도 위는 그대로다.

OSI 계층과 데이터 단위·장비의 짝이 틀린 것은?

L1(물리)의 단위는 비트(심볼)이고 장비는 리피터·허브·케이블이다. 세그먼트는 L4(TCP)의 단위다.

이더넷 프레임의 EtherType 필드가 0x0800이고, IPv4 헤더의 프로토콜 필드가 6이다. 무슨 뜻일까?

각 헤더는 “다음 껍질이 무엇인지”를 알려 주는 칸을 가진다. EtherType 0x0800 = IPv4(0x86DD = IPv6), IP 프로토콜 6 = TCP(17 = UDP). 이 사슬 덕분에 받는 쪽이 올바른 프로그램에게 데이터를 넘긴다.

같은 데이터 1,000바이트를 보낼 때 오버헤드 비율이 가장 큰 방법은?

헤더는 패킷마다 붙으므로 패킷이 작고 많을수록 헤더가 차지하는 비율이 커진다. 10바이트 패킷은 이더넷 최소 크기 때문에 패딩까지 붙는다.

Wi-Fi(802.11)의 표준을 만드는 곳과 TCP의 표준(RFC)을 만드는 곳을 바르게 짝지은 것은?

LAN의 링크·물리 계층(이더넷 802.3, Wi-Fi 802.11)은 IEEE 802 위원회가, IP·TCP·HTTP 같은 인터넷 프로토콜은 IETF가 RFC로 만든다.

종단 간 원칙에 가장 가까운 설계는?

신뢰성·보안처럼 끝에서만 완전히 보장할 수 있는 기능은 끝에 두고, 망 중간은 단순하게 유지한다는 것이 종단 간 원칙이다.