인터넷 프로토콜 스위트
고친 사람 github-actions[bot]
인터넷 프로토콜 스위트는 인터넷에 붙은 컴퓨터들이 서로 데이터를 주고받게 해 줍니다. 한 프로토콜이 모든 일을 떠맡지 않고 여러 프로토콜이 일을 나눠 맡습니다. 이 프로토콜들은 네 계층으로 쌓여 위아래로 일을 넘깁니다. 브라우저가 보내는 요청 하나도 이 프로토콜들을 거쳐 서버에 닿습니다.
쉽고 빠른 이해
인터넷 프로토콜 스위트는 인터넷으로 통신하는 데 드는 일을 여러 약속에 나눠 맡깁니다. 브라우저가 웹 페이지를 받아 올 때도 요청을 적는 약속, 빠짐없이 나르는 약속, 길을 찾는 약속, 옆 장비로 신호를 내보내는 약속이 차례로 쓰입니다. 이 네 약속은 위아래로 쌓여 층을 이룹니다. 이 층을 계층이라고 부릅니다.
약속을 하나로 뭉쳐 두면 선의 종류가 바뀔 때마다 전부 새로 만들어야 합니다. 일을 나눠 두면 바뀐 부분만 갈아 끼우면 됩니다. 그래서 같은 브라우저가 와이파이에서도 유선 랜에서도 똑같이 돕니다.
- 보내는 프로그램이 데이터를 맨 위 계층에 넘깁니다
- 계층마다 배달에 필요한 정보를 앞에 붙여 아래로 넘깁니다
- 받는 쪽은 아래에서부터 그 정보를 하나씩 떼어 내며 위로 올립니다
대가는 덧붙는 정보입니다. 아주 작은 데이터를 보내도 계층마다 붙인 정보가 함께 나갑니다.
상세
쇼핑몰에서 물건 하나를 보낼 때 한 사람이 모든 일을 하지 않습니다. 주문을 받는 사람, 상자에 담아 송장을 붙이는 사람, 어느 물류센터를 거칠지 정하는 사람, 트럭을 모는 사람이 따로 있습니다. 저마다 자기 일만 압니다. 앞사람이 넘긴 상자는 열어 보지 않습니다.
인터넷 프로토콜 스위트(Internet protocol suite)는 인터넷에서 통신하는 데 쓰는 프로토콜들의 묶음입니다. 프로토콜은 두 컴퓨터가 데이터를 주고받을 때 지키기로 한 약속입니다. 무엇을 어떤 모양으로 보내고 어떻게 답할지를 정합니다. 스위트(suite)는 함께 쓰도록 맞춰 둔 한 벌이라는 뜻입니다.
인터넷에 붙은 컴퓨터는 만든 회사도 운영체제도 제각각입니다. 그래도 모두 같은 묶음을 따르므로 서로의 데이터를 알아듣습니다. 이 묶음이 없으면 같은 회사의 장비끼리만 이야기할 수 있습니다.
이 묶음은 흔히 TCP/IP 라고도 부릅니다. 가장 널리 쓰이는 두 프로토콜인 TCP(Transmission Control Protocol, 전송 제어 프로토콜)와 IP(Internet Protocol, 인터넷 프로토콜)의 이름을 이어 붙인 것입니다. 이름에는 둘만 들어 있지만 묶음에는 훨씬 많은 프로토콜이 들어 있습니다.
여러 프로토콜로 나눈 까닭
통신 한 번에도 할 일이 여럿입니다. 신호를 선이나 전파에 실어 옆 장비까지 보내야 합니다. 여러 네트워크를 건너 목적지 컴퓨터까지 길을 찾아야 합니다. 도중에 빠진 데이터는 다시 보내야 합니다. 받은 데이터가 무슨 뜻인지도 읽어 내야 합니다.
이 일을 프로토콜 하나가 전부 맡으면 무엇 하나 바뀔 때마다 전체를 다시 만들어야 합니다. 유선 랜에서 돌던 프로그램이 와이파이로 옮겨 가면 프로그램까지 고쳐야 하는 식입니다.
그래서 일을 여러 계층으로 나눕니다. 계층마다 한 가지 일만 맡습니다. 바로 위 계층에는 늘 같은 방식으로 서비스를 내줍니다. 위 계층은 아래 계층이 그 일을 어떻게 하는지 몰라도 됩니다. 아래 계층을 갈아 끼워도 위 계층은 고칠 것이 없습니다.
네 계층과 대표 프로토콜
인터넷 프로토콜 스위트는 일을 네 계층으로 나눕니다. 위에서부터 응용 계층 · 전송 계층 · 인터넷 계층 · 링크 계층입니다. 이 네 계층의 틀만 따로 가리킬 때는 TCP/IP 모델이라고 부릅니다.
아래 표는 계층마다 맡는 일과 그 계층의 대표 프로토콜입니다. 위 계층일수록 프로그램이 다루는 내용에 가깝습니다. 아래 계층일수록 전선과 전파에 가깝습니다.
| 계층 | 맡는 일 | 대표 프로토콜 |
|---|---|---|
| 응용 계층 | 주고받는 데이터가 무슨 뜻인지 정합니다 | HTTP(HyperText Transfer Protocol, 하이퍼텍스트 전송 프로토콜) · DNS(Domain Name System, 도메인 이름 시스템) |
| 전송 계층 | 목적지 컴퓨터 안의 어느 프로그램에 줄지 정합니다 | TCP · UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜) |
| 인터넷 계층 | 여러 네트워크를 건너 목적지 컴퓨터까지 길을 잇습니다 | IP · ICMP(Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜) |
| 링크 계층 | 선이나 전파로 바로 이어진 옆 장비까지 데이터를 건넵니다 | 이더넷 · 와이파이 |
표의 전송 계층처럼 한 계층에는 프로토콜이 여럿 있습니다. 프로그램은 필요에 맞는 것을 고릅니다. 빠짐없이 받아야 하면 TCP 를 씁니다. 조금 잃더라도 빨리 받는 편이 낫다면 UDP 를 씁니다.
요청 하나가 계층을 내려가는 길
이 소절은 브라우저가 웹 서버에 요청 하나를 보내는 과정을 따라갑니다. 계층마다 무엇을 덧붙여 아래로 넘기는지를 봅니다.
브라우저는 먼저 「이 페이지를 달라」는 요청을 HTTP 약속대로 적습니다. 이것이 응용 계층의 일입니다. 브라우저는 이 요청을 운영체제에 넘깁니다. 나머지는 운영체제가 맡습니다.
전송 계층의 TCP 는 요청 앞에 TCP 헤더를 붙입니다. 헤더는 데이터 앞에 붙이는 배달용 정보입니다. 받는 쪽은 안의 데이터를 열지 않고 헤더만 읽어서 그 데이터를 어디로 넘길지 정합니다.
TCP 헤더에는 포트 번호가 들어갑니다. 포트 번호는 받는 컴퓨터 안의 어느 프로그램에 줄지 가리키는 번호입니다.
보낼 데이터가 길면 TCP 는 이것을 여러 조각으로 나눕니다. TCP 헤더는 조각마다 따로 붙습니다. 헤더에는 이 조각이 전체 데이터의 어디쯤인지 가리키는 순서 번호도 들어갑니다. 받는 쪽은 이 번호로 조각의 순서를 맞춥니다.
인터넷 계층의 IP 는 그 앞에 IP 헤더를 한 겹 더 붙입니다. IP 헤더에는 출발지와 목적지의 IP 주소가 들어갑니다. IP 주소는 인터넷에서 컴퓨터 한 대를 가리키는 번호입니다.
IP 헤더까지 붙은 조각을 패킷이라고 부릅니다. 인터넷 계층은 이 패킷을 한 단위로 삼아 목적지까지 나릅니다.
링크 계층은 맨 앞에 자기 헤더를 또 붙여 선으로 내보냅니다. 유선 랜이면 이더넷 헤더가 붙습니다. 이더넷 헤더에는 바로 옆 장비의 주소가 적힙니다. 옆 장비는 대개 집이나 회사의 공유기입니다.
flowchart TD
A["응용 계층 · HTTP 요청"] --> B["전송 계층 · TCP 헤더 + HTTP 요청"]
B --> C["인터넷 계층 · IP 헤더 + TCP 헤더 + HTTP 요청"]
C --> D["링크 계층 · 이더넷 헤더 + IP 헤더 + TCP 헤더 + HTTP 요청"]
그림처럼 한 계층을 내려갈 때마다 헤더가 한 겹씩 늘어납니다. 아래 계층은 위에서 받은 조각을 열어 보지 않고 자기 헤더만 앞에 씌웁니다. 이렇게 씌우는 방식을 캡슐화라고 부릅니다.
캡슐화 덕분에 계층들은 서로의 속사정을 몰라도 됩니다. IP 는 안에 든 것이 HTTP 요청인지 영상 데이터인지 따지지 않고 똑같이 나릅니다.
대가는 늘어난 헤더입니다. 헤더 몇 겹이 수십 바이트를 차지합니다. 키 입력 한 번처럼 한두 바이트짜리 데이터를 보내도 수십 바이트의 헤더가 함께 나갑니다.
받는 쪽에서 거꾸로 올라가는 길
받는 서버는 이 과정을 거꾸로 밟습니다. 아래 계층부터 자기 헤더를 읽고 떼어 냅니다. 그리고 남은 조각을 위 계층에 올립니다.
올릴 곳은 헤더에 적힌 번호가 정합니다. 이더넷 헤더에는 안에 IP 패킷이 들었다는 표시가 있습니다. IP 헤더에는 안에 든 조각이 TCP 것인지 UDP 것인지 가리키는 프로토콜 번호가 있습니다. TCP 헤더의 포트 번호는 그 조각을 받을 프로그램을 가리킵니다.
이렇게 헤더의 번호를 보고 받은 데이터를 알맞은 위 계층으로 나눠 올리는 일을 역다중화라고 부릅니다. 그래서 한 서버에서 웹 서버와 데이터베이스가 함께 돌아도 데이터가 섞이지 않습니다.
TCP 는 받은 조각을 순서대로 맞춘 뒤에 프로그램에 넘깁니다. 받았다는 확인이 돌아오지 않은 조각은 보낸 쪽 TCP 가 다시 보냅니다. 프로그램은 빠짐없이 순서대로 이어진 데이터만 봅니다.
가운데가 좁은 모래시계 모양
네 계층의 프로토콜을 늘어놓으면 모양이 모래시계를 닮았습니다. 맨 위 응용 계층에는 웹의 HTTP, 메일의 SMTP(Simple Mail Transfer Protocol, 간이 메일 전송 프로토콜), 이름 조회의 DNS처럼 프로토콜이 많습니다. 맨 아래 링크 계층에도 유선 랜, 와이파이, 휴대폰 망처럼 종류가 많습니다. 그런데 가운데 인터넷 계층에서는 거의 모든 통신이 IP 하나로 모입니다.
아래 그림에서 화살표는 위 프로토콜이 아래 프로토콜에 실려 나간다는 뜻입니다. 연결은 대표적인 것만 그렸습니다.
flowchart TD
subgraph APP["응용 계층"]
H["HTTP · 웹"]
S["SMTP · 메일"]
D["DNS · 이름 조회"]
end
subgraph TRN["전송 계층"]
T["TCP"]
U["UDP"]
end
subgraph NET["인터넷 계층"]
I["IP"]
end
subgraph LNK["링크 계층"]
E["이더넷 · 유선 랜"]
W["와이파이"]
M["휴대폰 망"]
end
H --> T
S --> T
D --> U
T --> I
U --> I
I --> E
I --> W
I --> M
이 모양을 모래시계 모델이라고 부릅니다. 가운데가 하나로 좁혀져 있어서 위의 어떤 프로그램도 아래의 어떤 네트워크 위에서 돌 수 있습니다. 새 네트워크 기술은 IP 패킷을 나를 수만 있으면 곧바로 인터넷에 붙습니다. 새 응용 프로토콜도 IP 위에서 돌기만 하면 모든 네트워크에 닿습니다.
대가도 같은 데서 나옵니다. 모두가 IP 에 기대므로 IP 자신을 바꾸기가 가장 어렵습니다. 주소가 모자라 새 판인 IPv6가 나왔습니다. 그런데도 옛 판인 IPv4가 오랫동안 함께 쓰이는 것은 이 때문입니다.
OSI 모델과 맞춰 본 계층 번호
백엔드 일을 하다 보면 L4(Layer 4, 4계층) 로드 밸런서나 L7(Layer 7, 7계층) 로드 밸런서 같은 말을 듣습니다. 여기 붙은 숫자는 인터넷 프로토콜 스위트의 계층 번호가 아닙니다. OSI 모델(Open Systems Interconnection, 개방형 시스템 상호 연결)의 계층 번호입니다.
OSI 모델은 통신을 일곱 계층으로 나눈 참조 모델입니다. 두 모델은 계층을 가르는 선이 다릅니다. 그래서 OSI 의 여러 계층이 이 묶음의 한 계층에 겹칩니다.
| OSI 모델의 계층 | 인터넷 프로토콜 스위트의 계층 |
|---|---|
| 7 응용 · 6 표현 · 5 세션 | 응용 계층 |
| 4 전송 | 전송 계층 |
| 3 네트워크 | 인터넷 계층 |
| 2 데이터 링크 · 1 물리 | 링크 계층 |
표로 맞춰 보면 L4 는 전송 계층이고 L7 은 응용 계층입니다. 그래서 L4 로드 밸런서는 IP 주소와 포트 번호까지만 보고 요청을 나눕니다. L7 로드 밸런서는 HTTP 요청의 경로와 헤더까지 읽고 나눕니다.
두 모델이 어긋나는 까닭은 생겨난 순서에 있습니다. OSI 모델은 계층 구분을 먼저 짰습니다. 거기에 맞출 프로토콜은 나중에 만들었습니다. 인터넷 쪽은 돌아가는 프로토콜이 먼저 있었습니다. 계층 구분은 그 프로토콜들을 설명하려고 뒤에 붙었습니다. 오늘날 널리 쓰이는 것은 인터넷 쪽 프로토콜입니다. OSI 모델은 계층을 부르는 번호로 남았습니다.
교재에 따라서는 링크 계층을 물리 계층과 데이터 링크 계층으로 갈라 다섯 계층으로 그리기도 합니다. 선 위로 신호를 보내는 일과 옆 장비까지 데이터를 건네는 일을 따로 떼어 본 것입니다.
백엔드 코드가 이 묶음을 만나는 곳
백엔드 코드가 직접 다루는 것은 대개 응용 계층뿐입니다. 그 아래 세 계층은 코드 바깥에서 처리됩니다. 아래 표는 계층마다 그 일을 누가 맡는지 보여 줍니다.
| 계층 | 맡는 쪽 |
|---|---|
| 응용 계층 | 프로그램 — 브라우저 · 웹 서버 · 백엔드 코드 |
| 전송 계층 · 인터넷 계층 | 운영체제의 커널 |
| 링크 계층 | 네트워크 인터페이스 카드와 그 [[디바이스 드라이버 |
커널은 운영체제의 중심부입니다. 여러 프로그램이 함께 쓰는 장치와 자원을 프로그램 대신 다룹니다.
네트워크 인터페이스 카드는 컴퓨터를 선이나 전파에 잇는 부품입니다. 드라이버는 운영체제가 이 부품을 부릴 수 있게 해 주는 프로그램입니다.
커널 안에서 이 프로토콜들을 돌리는 코드를 흔히 TCP/IP 스택이라고 부릅니다. TCP/IP 는 프로토콜 묶음의 이름입니다. TCP/IP 모델은 그 묶음을 네 계층으로 나눈 틀입니다. TCP/IP 스택은 그 묶음을 실제로 돌리는 코드입니다.
프로그램은 소켓을 열어 이 스택을 씁니다. 소켓은 운영체제가 내주는 통신 통로입니다. 소켓을 열 때 TCP 를 쓸지 UDP 를 쓸지 고릅니다. 그다음 목적지 IP 주소와 포트 번호를 넘깁니다. 헤더를 붙이고 길을 찾는 일은 그 아래에서 운영체제가 합니다.
장애를 좇을 때는 계층을 아래에서부터 짚어 올라갑니다. ping은 ICMP 로 상대에게 답을 청하는 도구입니다. 답이 오면 인터넷 계층까지 길이 이어진 것입니다. 포트에 연결이 되면 전송 계층까지 통한 것입니다. 그다음은 HTTP 응답을 보고 응용 계층을 살핍니다.
관련 항목
인터넷 프로토콜 스위트가 속하는 상위 분류
인터넷 프로토콜 스위트를 이루는 계층
응용 계층 · 전송 계층 · 인터넷 계층 · 링크 계층 · 계층
응용 계층에서 이 묶음에 얹히는 프로토콜
HTTP · HTTPS · DNS · SMTP · FTP · SSH · DHCP · TLS
전송 계층에서 프로그램 사이를 잇는 프로토콜
인터넷 계층에서 네트워크 사이를 잇는 프로토콜
IP · IPv4 · IPv6 · ICMP · IGMP · IPsec
링크 계층에서 옆 장비까지 나르는 기술
이더넷 · 와이파이 · ARP · MAC 주소 · 프레임
계층 사이를 오가는 데이터의 단위와 번호
헤더 · 캡슐화 · 역다중화 · 패킷 · 세그먼트 · 데이터그램 · 포트 · IP 주소 · 프로토콜 번호 · MTU
이 묶음의 설계를 설명하는 모델과 원칙
OSI 모델 · TCP-IP 모델 · 모래시계 모델 · 프로토콜 스택 · 종단 간 원칙
이 묶음을 구현하고 부르는 운영체제 부품
소켓 · 커널 · 네트워크 인터페이스 카드 · 디바이스 드라이버 · 운영체제
이 묶음의 계층 번호로 갈리는 네트워크 장비
로드 밸런서 · L4 로드 밸런서 · L7 로드 밸런서 · 라우터 · 스위치 · 방화벽
이 묶음의 계층을 살피는 진단 도구
ping · traceroute · tcpdump · netstat · Wireshark
이 묶음의 프로토콜을 정하는 표준과 단체
다른 이름: Internet protocol suite · TCP/IP · TCP/IP 프로토콜 스위트 · 인터넷 프로토콜 모음