호스트
고친 사람 github-actions[bot]
호스트는 네트워크에서 데이터를 직접 보내고 받는 컴퓨터입니다. 남이 보낸 데이터를 옆으로 넘겨주기만 하는 라우터는 호스트로 치지 않습니다. 가상화나 그래픽 카드 쪽에서는 같은 낱말이 다른 것을 가리킵니다.
쉽고 빠른 이해
호스트는 통신의 양 끝에 선 컴퓨터입니다. 브라우저를 띄운 내 노트북과 그 요청을 받는 웹 서버가 둘 다 호스트입니다.
이 이름이 필요한 까닭은 네트워크에 두 부류의 기계가 섞여 있어서입니다. 하나는 데이터를 만들고 받아 쓰는 기계입니다. 다른 하나는 중간에서 길만 찾아 넘겨주는 기계입니다. 둘을 가르지 않으면 「누가 무엇을 책임지나」를 말할 수 없습니다.
어떻게 도나:
- 호스트가 보낼 데이터를 작은 묶음으로 나눕니다
- 중간 기계들이 묶음을 받아 목적지 쪽으로 넘깁니다
- 받는 호스트가 묶음을 모아 원래 데이터로 되돌립니다. 빠진 것이 있으면 다시 보내 달라고 합니다
대가가 있습니다. 순서를 맞추고 빠진 것을 챙기는 일이 전부 양 끝 호스트의 몫이 됩니다. 중간은 단순해지는 대신 끝이 무거워집니다.
네트워크 밖에서는 같은 낱말이 다른 것을 가리킵니다. 가상화에서는 가상 머신을 돌리는 실제 컴퓨터를, 그래픽 카드로 계산할 때는 중앙 처리 장치(CPU, Central Processing Unit) 쪽을 호스트라고 합니다.
상세
우편으로 비유하면 호스트는 편지를 쓰고 받는 집입니다. 라우터는 편지를 받아 다음 우체국으로 넘기는 분류소입니다. 분류소는 봉투 겉면의 주소만 봅니다. 안에 든 편지를 읽거나 답장을 쓰지 않습니다.
이 절은 먼저 호스트와 라우터를 가르는 기준을 세웁니다. 그다음 호스트가 맡는 일, 호스트를 가리키는 이름과 주소를 봅니다. 마지막으로 가상화·그래픽 카드·주소 문자열에서 이 낱말이 무엇을 뜻하는지 가릅니다.
노드 · 라우터 · 호스트
네트워크에 붙어 통신하는 장치를 통틀어 노드라고 합니다. 노트북도 서버도 공유기도 네트워크 주소를 갖고 통신하면 노드입니다. 노드는 가장 넓은 이름이라 여기서 둘로 나뉩니다.
패킷은 네트워크를 지나가는 데이터 한 묶음입니다. 패킷 머리에는 목적지 주소가 적혀 있습니다.
라우터는 자기 앞으로 오지 않은 패킷을 받아 다른 쪽으로 넘겨주는 노드입니다. 패킷 머리의 목적지 주소를 보고 어느 방향으로 보낼지 고릅니다.
호스트는 남의 패킷을 넘겨주지 않는 역할의 노드입니다. 자기 앞으로 오지 않은 패킷이 들어오면 넘겨주지 않고 버립니다. 호스트와 라우터를 가르는 기준은 기계의 크기나 쓰임이 아니라 「남의 패킷을 넘겨주나」 하나입니다. 앞에서 호스트를 「컴퓨터」라고 한 것도 이 역할을 맡은 컴퓨터를 가리킵니다.
flowchart TD
N["노드 · 네트워크에 붙어 통신하는 장치"]
N --> R["라우터 · 남의 패킷을 넘겨준다"]
N --> H["호스트 · 자기 패킷만 보내고 받는다"]
H --> H1["노트북 · 휴대폰"]
H --> H2["웹 서버 · 데이터베이스 서버"]
그래서 서버와 클라이언트는 둘 다 호스트입니다. 서버냐 클라이언트냐는 누가 먼저 요청하느냐의 구분입니다. 호스트냐 라우터냐는 남의 패킷을 넘겨주느냐의 구분입니다. 두 구분은 서로 다른 축에 있습니다.
호스트가 맡는 일
인터넷은 중간을 단순하게 두고 똑똑한 일을 양 끝에 맡기는 방식으로 짜여 있습니다. 이 생각이 종단 간 원칙입니다. 중간의 라우터는 패킷을 최대한 목적지 쪽으로 넘길 뿐입니다. 패킷이 사라지거나 순서가 뒤바뀌어도 라우터는 책임지지 않습니다.
그 책임은 호스트가 집니다. 호스트 안에서 이 일을 맡는 프로그램이 TCP입니다(Transmission Control Protocol, 전송 제어 프로토콜). TCP 는 빠진 패킷을 다시 보내게 합니다. 뒤섞인 순서도 TCP 가 바로잡습니다.
속도를 맞추는 일도 호스트끼리 합니다. 받는 쪽이 한꺼번에 감당하지 못할 만큼 보내면 데이터가 넘쳐 버려집니다. 그래서 받는 쪽이 감당할 만큼만 보내도록 조절합니다. 이 조절이 흐름 제어입니다.
아래 그림은 호스트 둘 사이에 라우터 하나가 낀 모습입니다. 라우터는 넘겨주기만 합니다. 잘 받았다는 확인은 두 호스트가 주고받습니다.
sequenceDiagram
participant A as 호스트 A
participant R as 라우터
participant B as 호스트 B
A->>R: 패킷 1
R->>B: 패킷 1을 넘긴다
B-->>R: 1번 잘 받았다
R-->>A: 확인을 넘긴다
Note over A,B: 확인이 안 오면 A 가 다시 보낸다
이 역할 차이는 소프트웨어 구조에서도 드러납니다. 네트워크 소프트웨어는 통신 일을 여러 층으로 나눠 짭니다. 각 층이 한 가지 일만 맡고 아래 층에 나머지를 맡깁니다. 이 층 하나를 계층이라고 합니다.
맨 위는 브라우저 같은 애플리케이션입니다. 그 아래 전송 계층에서 TCP 가 빠진 패킷과 순서를 챙깁니다. 그 아래 IP 계층은 목적지 주소를 보고 길을 고릅니다(Internet Protocol, 인터넷 프로토콜). 맨 아래 링크 계층은 선이나 전파로 신호를 실어 보냅니다.
호스트는 이 층을 맨 위 애플리케이션까지 전부 갖습니다. 라우터는 길을 고르는 데 필요한 IP 계층까지만 들여다봅니다. 그 위의 TCP 나 애플리케이션 데이터는 열어 보지 않고 넘깁니다.
| 호스트 | 라우터 | |
|---|---|---|
| 남의 패킷 | 버린다 | 목적지 쪽으로 넘긴다 |
| 데이터를 만들고 쓰나 | 그렇다 | 넘기기만 한다 |
| 빠진 패킷 다시 보내기 | 맡는다 | 안 맡는다 |
| 보는 계층 | 애플리케이션까지 전부 | IP 계층까지 |
호스트를 가리키는 주소와 이름
패킷을 호스트에 보내려면 그 호스트를 가리킬 방법이 있어야 합니다. 네트워크가 쓰는 것은 IP 주소입니다. IP 주소는 호스트 자체가 아니라 호스트가 네트워크에 붙는 입구 하나하나에 붙습니다. 이 입구가 네트워크 인터페이스입니다.
그래서 호스트 하나가 주소를 여럿 가질 수 있습니다. 유선 랜과 와이파이에 동시에 붙은 노트북은 입구가 둘이라 주소도 둘입니다. 「호스트의 주소」라고 말할 때는 대개 그중 대표로 쓰는 하나를 가리킵니다.
숫자 주소는 사람이 외우기 어렵습니다. 그래서 호스트에 mail.example.com 같은 호스트 이름을 붙입니다. 이름을 주소로 바꿔 주는 일은 DNS(Domain Name System, 도메인 네임 시스템)가 맡습니다.
모든 호스트는 자기 자신을 가리키는 이름도 갖습니다. 그 이름이 localhost입니다. 개발할 때 내 컴퓨터에 띄운 서버에는 이 이름으로 접속합니다.
localhost 로 보낸 패킷은 네트워크로 나가지 않습니다. 같은 호스트 안에서 곧바로 되돌아옵니다. 이 되돌림을 루프백이라고 합니다.
호스트이면서 라우터인 기계
호스트와 라우터는 기계의 종류가 아니라 기계가 하는 일의 이름입니다. 그래서 한 기계가 둘을 겸할 수 있습니다. 운영체제는 남의 패킷을 넘겨주는 기능인 IP 포워딩을 보통 꺼 둡니다. 이 기능을 켜면 평범한 서버도 라우터 노릇을 합니다.
집에 둔 공유기가 흔한 예입니다. 공유기는 집 안 기기들의 패킷을 인터넷 쪽으로 넘겨주니 라우터입니다. 공유기는 관리 화면을 띄우는 웹 서버도 품고 있습니다. 그 화면에 접속할 때는 공유기가 요청을 받는 호스트입니다.
기준이 패킷 하나하나에 있으므로 같은 기계를 두고도 호스트냐 라우터냐가 갈립니다. 자기 앞으로 온 패킷을 받을 때 그 기계는 호스트로 움직입니다. 남의 패킷을 넘길 때는 라우터로 움직입니다.
다른 분야의 호스트
「호스트」는 네트워크 밖에서도 널리 쓰입니다. 분야마다 가리키는 물건이 다릅니다. 가상화와 그래픽 카드 계산에서는 일을 시키고 판을 깔아 주는 주된 컴퓨터 쪽을 호스트라고 합니다. 주소 문자열의 호스트는 이와 결이 달라서, 서버 이름을 적은 글자 한 토막을 가리킵니다.
| 분야 | 호스트가 가리키는 것 | 짝이 되는 말 |
|---|---|---|
| 가상화 | 가상 머신을 돌리는 실제 컴퓨터 | 게스트 |
| 그래픽 카드 계산 | 중앙 처리 장치와 주 메모리 쪽 | 디바이스 |
| 주소 문자열 | 주소 안에서 서버 이름을 적은 부분 | 포트 · 경로 |
| 웹 서비스 운영 | 남의 사이트를 올려 돌려주는 쪽 | 호스팅 |
가상 머신을 다룰 때 호스트는 실제 하드웨어 위에서 가상 머신들을 돌리는 컴퓨터입니다. 그 안에서 도는 가상 머신 하나하나가 게스트입니다. 한 호스트에 게스트가 여럿 올라갑니다.
그래픽 카드로 계산할 때는 CPU 쪽이 호스트이고 그래픽 카드가 디바이스입니다. 그래픽 카드의 계산 칩은 GPU(Graphics Processing Unit, 그래픽 처리 장치)라고 합니다. 호스트가 데이터를 디바이스로 보내 계산을 시킵니다. 결과는 다시 호스트가 돌려받습니다.
URI(Uniform Resource Identifier, 통합 자원 식별자) 안에서 호스트는 서버를 가리키는 부분입니다. 아래 주소에서 호스트가 어디인지 봅니다.
https://shop.example.com:8080/items
shop.example.com 이 호스트입니다. 뒤따르는 :8080 이 포트, /items 가 경로입니다.
이 사전의 네트워크 편들이 「호스트」라고 부를 때는 맨 앞의 뜻, 곧 남의 패킷을 넘기지 않는 노드를 가리킵니다. 다른 분야의 뜻은 각 편에서 따로 다룹니다.
관련 항목
호스트가 속하는 상위 분류
노드 · 종단 시스템 · 네트워크 장치 · 컴퓨터 네트워크
호스트와 맞세워지는 네트워크 장비
라우터 · 중간 시스템 · 게이트웨이 · 스위치 · 브리지 · 방화벽
호스트를 가리키는 주소와 이름
IP 주소 · IPv4 · IPv6 · MAC 주소 · 네트워크 인터페이스 · 호스트 이름 · FQDN · DNS · 호스트 파일 · localhost · 루프백 · 호스트 부분
호스트가 맡는 통신 계층과 프로토콜
종단 간 원칙 · TCP · UDP · IP · 전송 계층 · 흐름 제어 · 재전송 · 패킷 · 포트 · 소켓
호스트와 짝을 이뤄 역할을 나누는 상대
호스트를 다른 뜻으로 부르는 분야
가상 머신 · 게스트 · 하이퍼바이저 · GPU · CPU · 디바이스 · 호스트 메모리 · URI · authority · 호스팅 · 호스트 기반 라우팅
다른 이름: host