프로토콜과 계층
브라우저 주소창에 주소를 치고 엔터를 누르면 노트북은 수십 바이트짜리 “머리말”을 겹겹이 붙인 데이터 덩어리를 내보낸다. 그 머리말 하나하나에는 누가 읽고 무엇을 해야 하는지가 정확히 정해져 있다. 공유기는 바깥 몇 겹만 보고, 서버는 끝까지 벗겨 읽는다. 세계 수십억 대의 장비가 서로 다른 회사에서 만들어졌는데도 이렇게 말이 통하는 이유는 무엇일까? 이 장은 그 약속(프로토콜)과 약속을 쌓는 방법(계층)을 다루고, 실제 패킷 하나를 바이트 단위로 해부한다.
- 프로토콜이 정하는 세 가지(형식·순서·오류 시 행동)를 일상의 예로 설명한다.
- 통신을 계층으로 나누는 이유와 IP가 “모래시계의 허리”인 까닭을 이해한다.
- OSI 7계층과 TCP/IP 계층을 대응시키고, 계층별 데이터 단위와 장비를 구분한다.
- 캡슐화로 붙는 헤더의 크기를 계산하고, 작은 패킷일수록 오버헤드가 커지는 이유를 안다.
- 실제 HTTP 요청 프레임의 16진 덤프에서 MAC 주소, TTL, 포트, 순서 번호 같은 필드를 찾아 읽는다.
- IETF·IEEE·3GPP·ITU 같은 표준 기구의 역할을 구분한다.
- 종단 간 원칙과, 라우터·방화벽·프록시가 패킷을 어디까지 열어 보는지 설명한다.
프로토콜: 통신의 약속
전화를 걸면 우리는 자연스럽게 정해진 순서를 따른다. 신호가 가고, 상대가 “여보세요?” 하고, 내가 누구인지 밝히고, 용건을 말하고, “끊을게요” 하고 끊는다. 상대가 아무 말이 없으면 “여보세요? 들리세요?” 하고 다시 묻는다. 이런 약속이 없다면 두 사람이 동시에 말을 시작하거나, 상대가 끊은 줄도 모르고 혼자 이야기하게 된다.
컴퓨터끼리의 약속을 프로토콜(protocol)이라 한다. 사람과 달리 컴퓨터는 눈치가 없으므로 약속을 아주 엄밀하게 정해야 한다. 모든 프로토콜은 세 가지를 정한다.
- 형식(syntax): 메시지의 몇 번째 바이트에 무엇을 적는가. “앞 2바이트는 받는 쪽 포트 번호, 큰 자리부터.”
- 순서(timing·sequence): 누가 먼저 무엇을 보내고, 무엇을 받은 뒤에야 다음으로 넘어가는가. “연결 요청 → 수락 → 확인을 주고받은 뒤에만 데이터를 보낸다.”
- 오류 시 행동(semantics): 답이 안 오거나 이상한 값이 오면 어떻게 하는가. “1초 안에 확인이 없으면 다시 보낸다. 체크섬이 틀리면 버린다.”
택배 상자에 붙는 송장에는 칸이 정해져 있다. 받는 사람 주소, 보내는 사람, 무게, 운송장 번호, “취급 주의”. 칸의 위치와 의미가 약속되어 있으니 처음 보는 분류 센터 직원도 바로 읽는다. 패킷의 헤더(header)가 바로 이 송장이다. 정해진 자리에 정해진 길이로 주소와 번호가 적혀 있어서, 처음 만나는 라우터도 몇 나노초 만에 읽고 처리한다.
왜 계층으로 나누나
웹 페이지 하나를 받는 데 풀어야 할 문제를 늘어놓아 보자. 전선 위에서 0과 1을 어떤 전압으로 표현할까? 같은 선을 쓰는 여러 장치 중 누구에게 줄까? 지구 반대편까지 어느 길로 갈까? 중간에 잃어버린 조각은 누가 다시 보내나? 받은 바이트가 웹 페이지인지 메일인지 어떻게 아나? 이걸 프로그램 하나가 전부 처리한다면 Wi-Fi가 새로 나올 때마다 세상의 모든 브라우저를 고쳐야 한다.
그래서 통신은 일을 계층(layer)으로 나눈다. 각 계층은 바로 아래 계층이 주는 서비스만 믿고 자기 문제 하나를 푼다. 이것이 관심사의 분리다. 브라우저는 “이 바이트들을 저 서버의 443번 포트로 믿을 수 있게 보내 줘”라고 TCP에 부탁할 뿐, 그 바이트가 구리선을 타는지(4장), 빛이 되는지(5장), 전파가 되는지(11장) 모른다. 그래서 집 공유기를 Wi-Fi 7로 바꿔도, 회사 회선을 광으로 바꿔도 HTTP는 한 글자도 바뀌지 않는다.
계층은 공짜가 아니다. 계층마다 헤더가 붙어 바이트가 늘고(다음 절에서 계산한다), 아래 계층이 무슨 일을 하는지 모르니 최적화 기회를 놓치기도 한다. 예를 들어 TCP는 무선 구간의 일시적 손실을 혼잡으로 오해해 속도를 줄이곤 한다(9장). 그래서 실제 시스템은 가끔 계층을 넘나드는 “반칙”을 한다. 그래도 수십억 대가 함께 쓰는 망을 쪼개서 발전시킬 수 있게 해 준 이득이 훨씬 크다.
OSI 7계층과 TCP/IP
계층을 나누는 방법에는 두 가지 유명한 지도가 있다. 국제표준화기구(ISO)가 1984년에 정리한 OSI 7계층(OSI reference model)은 꼼꼼한 교과서용 지도이고, 실제 인터넷이 쓰는 것은 그보다 단순한 TCP/IP 모델(Internet protocol suite)이다. OSI 방식의 프로토콜은 시장에서 졌지만 “L2 스위치”, “L4 로드밸런서”, “L7 방화벽”처럼 계층 번호는 OSI 것을 그대로 쓴다. 그래서 둘 다 알아야 한다.
| OSI | TCP/IP | 하는 일 | 데이터 단위 | 대표 프로토콜 | 대표 장비 |
|---|---|---|---|---|---|
| L7 응용 | 응용 | 앱끼리의 대화 규칙 | 메시지 | HTTP, DNS, SMTP, SSH | L7 로드밸런서, 프록시, WAF |
| L6 표현 | 문자 인코딩, 압축, 암호화 | TLS(일부), UTF-8, JPEG | |||
| L5 세션 | 대화의 시작·재개 | (대부분 앱·TLS가 맡음) | |||
| L4 전송 | 전송 | 프로그램 구분(포트), 신뢰성, 혼잡 제어 | 세그먼트 / 데이터그램 | TCP, UDP, QUIC | L4 로드밸런서, 방화벽, NAT |
| L3 네트워크 | 인터넷 | 전 세계 주소와 길 찾기 | 패킷 | IPv4, IPv6, ICMP | 라우터 |
| L2 데이터 링크 | 링크 (5계층 모델은 링크·물리로 나눔) | 한 구간(옆 장치까지) 전달, 오류 검출 | 프레임 | 이더넷, Wi-Fi(802.11), PPP | 스위치, 브리지, 무선 AP |
| L1 물리 | 비트를 전압·빛·전파로 | 비트(심볼) | 1000BASE-T, 광 트랜시버 | 리피터, 허브, 케이블, 모뎀 |
이 책은 실무에서 가장 흔한 5계층 모델(응용·전송·네트워크·링크·물리)로 설명한다. 단위 이름도 기억해 두자. 같은 바이트 덩어리라도 TCP 입장에서는 세그먼트(segment), IP 입장에서는 패킷(packet), 이더넷 입장에서는 프레임(frame)이라 부른다. 무엇을 기준으로 보느냐에 따라 이름이 달라질 뿐이다.
이 프로토콜은 몇 층에 살까?
캡슐화: 상자 속 상자
보내는 쪽에서는 데이터가 위에서 아래로 내려가며 계층마다 자기 헤더(때로는 꼬리말, 트레일러(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)라 한다.
캡슐화와 헤더 오버헤드
게임이 TCP/IPv4로 1바이트짜리 “키 눌림” 신호를 보낸다. 이더넷 선로 위에서 이 1바이트가 차지하는 비율(효율)은 대략 얼마일까?
위 시뮬레이터에서 데이터 크기를 1로 줄여 확인해 보자.
패킷 해부: 바이트 하나하나 읽기
이제 진짜 패킷을 열어 보자. 아래는 노트북(192.168.0.7)이 웹 서버(203.0.113.10)의 80번 포트로 보내는 HTTP 요청 프레임이다. 와이어샤크(Wireshark) 같은 패킷 분석기가 보여 주는 화면을 본떴다. 왼쪽은 계층별 필드 목록, 오른쪽은 실제로 선을 타는 바이트의 16진 덤프다. 바이트나 필드에 마우스를 올리거나 눌러 보자. 특히 두 가지를 눈여겨보자. 라우터를 지날 때마다 1씩 줄어드는 TTL(time to live), 그리고 헤더가 깨지지 않았는지 검사하는 체크섬(checksum)이다. 체크섬은 바이트들을 정해진 방식으로 더한 값으로, 한 비트만 바뀌어도 값이 달라진다.
HTTP GET 프레임 해부 (이더넷 + IPv4 + TCP + HTTP)
16진수 두 자리가 1바이트다. 0x0800(이더넷 타입: 다음은 IPv4), 0x45(IPv4, 헤더 20바이트), 0x06(다음은 TCP), 0x0050(포트 80), 0x01BB(포트 443)처럼 자주 보는 값을 외워 두면 덤프만 보고도 구조가 보인다. 네트워크의 여러 바이트 숫자는 큰 자리부터 적는다(빅 엔디언, “네트워크 바이트 순서”).
표준은 누가 만드나
서로 다른 회사의 칩·장비·소프트웨어가 말이 통하려면 약속을 문서로 남기고 모두 따라야 한다. 이 문서를 표준(standard)이라 하고, 분야마다 표준을 만드는 기구가 다르다.
| 기구 | 성격 | 주로 만드는 것 | 예 |
|---|---|---|---|
| IETF Internet Engineering Task Force | 누구나 메일링 리스트로 참여하는 개방형 모임. “대략적 합의와 돌아가는 코드” | 인터넷 계층 이상: IP, TCP, DNS, HTTP, TLS, QUIC | RFC 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, 웹 API | HTML 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)” 단순하게 두고 똑똑한 일은 끝에서 하자는 생각이다. 덕분에 라우터는 빠르고 값싸게 만들 수 있었고, 새 앱을 내놓을 때 망 사업자의 허락이 필요 없었다. 웹, 스카이프, 비트토렌트가 모두 이렇게 태어났다.
중간 장비는 무엇을 읽고, 무엇을 고쳐 쓰나
패킷이 평범한 라우터 하나를 지나갈 때 바뀌는 것은 무엇일까?
위 시뮬레이터에서 “라우터”를 골라 빨간 칸을 확인해 보자.
현실의 인터넷에는 NAT, 방화벽, 캐시, 통신사의 트래픽 관리 장비처럼 원칙을 어기고 깊이 들여다보는 중간 장비(미들박스(middlebox))가 많다. 이들은 자기가 모르는 TCP 옵션이나 새 프로토콜을 버리기 일쑤라서, 새 전송 프로토콜을 만들기가 매우 어려워졌다(“프로토콜 경직화”). QUIC(9장)이 UDP 위에 올라타고 헤더 대부분을 암호화한 이유가 바로 이것이다. 중간 장비가 볼 수 없으니 간섭할 수도 없다.
핵심 정리
- 프로토콜은 형식(바이트 배치), 순서(누가 먼저 무엇을), 오류 시 행동(재전송·폐기)을 정한 약속이다. 헤더는 택배 송장처럼 정해진 칸에 정보를 적는다.
- 통신을 계층으로 나누면 각 계층이 자기 문제만 풀고, 아래(매체)가 바뀌어도 위(앱)는 그대로다. 그 중심에 모래시계의 허리인 IP가 있다.
- OSI는 7계층, 실제 인터넷은 TCP/IP(4~5계층). 단위는 메시지 → 세그먼트 → 패킷 → 프레임 → 비트, 장비는 허브(L1), 스위치(L2), 라우터(L3), 방화벽·L4 LB, 프록시·L7 LB.
- 캡슐화로 TCP 20 + IPv4 20 + 이더넷 18바이트(선로에선 +20)가 붙는다. 작은 메시지일수록 오버헤드 비율이 커져, 1바이트는 효율이 약 1%에 그친다.
- 실제 프레임은 목적지 MAC → 출발지 MAC → EtherType(0x0800) → IPv4 헤더(TTL, 프로토콜 6, 체크섬, 주소) → TCP 헤더(포트, 순서 번호, 플래그) → HTTP 순서로 놓인다.
- 표준은 IETF(RFC, 인터넷), IEEE 802(이더넷·Wi-Fi), 3GPP(이동통신), ITU(전화망·DSL·주파수)가 나눠 만든다.
- 종단 간 원칙: 똑똑한 기능은 양 끝에, 망 중간은 단순하게. 깊이 들여다보는 미들박스는 새 프로토콜의 발목을 잡는다.
확인 퀴즈
집 공유기를 유선에서 Wi-Fi 7로 바꿨다. 브라우저의 HTTP 프로그램은 어떻게 해야 할까?
OSI 계층과 데이터 단위·장비의 짝이 틀린 것은?
이더넷 프레임의 EtherType 필드가 0x0800이고, IPv4 헤더의 프로토콜 필드가 6이다. 무슨 뜻일까?
같은 데이터 1,000바이트를 보낼 때 오버헤드 비율이 가장 큰 방법은?
Wi-Fi(802.11)의 표준을 만드는 곳과 TCP의 표준(RFC)을 만드는 곳을 바르게 짝지은 것은?
종단 간 원칙에 가장 가까운 설계는?