다음 홉
고친 사람 github-actions[bot]
다음 홉은 패킷을 건네받아 목적지 쪽으로 한 걸음 더 옮겨 주는 바로 옆 장비입니다. 라우터는 목적지까지 가는 길 전체를 모릅니다. 이번에 누구에게 넘길지만 정합니다. 장비마다 이 한 걸음을 되풀이해서 패킷이 먼 곳까지 닿습니다.
쉽고 빠른 이해
다음 홉은 데이터가 거쳐 갈 다음 장비 하나입니다. 집 컴퓨터라면 공유기가 첫 다음 홉입니다.
인터넷의 길 전체를 장비 하나가 다 알 수는 없습니다. 바로 다음 장비만 알면 되니 장비마다 들고 있을 정보가 작아집니다. 먼 곳의 길이 바뀌어도 그 근처 장비만 고치면 됩니다.
어떻게 도나:
- 장비가 데이터에 적힌 목적지 주소를 읽습니다
- 자기 표에서 그 목적지에 맞는 줄을 찾아 다음 홉을 고릅니다
- 다음 홉에게 넘기면 그 장비가 같은 일을 되풀이합니다
목적지가 이 장비와 같은 망에 붙어 있으면 다음 홉을 거치지 않고 목적지에 곧장 건넵니다.
대가는 누구도 길 전체를 보지 않는다는 것입니다. 앞뒤 장비의 표가 서로 어긋나면 데이터가 둘 사이를 맴돌거나 중간에 사라집니다.
상세
고속도로의 이정표를 떠올리면 됩니다. 갈림길마다 선 이정표는 「부산 → 오른쪽」처럼 이번 갈림길에서 고를 방향 하나만 알려 줍니다. 운전자는 부산까지의 길을 외우지 않아도 이정표를 하나씩 따라가면 부산에 닿습니다. 이 비유에서 다음 홉은 그 방향으로 가면 만나는 다음 갈림길입니다.
다음 홉은 패킷을 목적지 쪽으로 보낼 때 그 패킷을 건네받는 바로 다음 장비입니다. 패킷은 네트워크로 오가는 데이터 한 덩어리입니다.
장비에서 옆 장비로 한 번 건너가는 걸음을 홉이라고 부릅니다. 지금 장비 다음 걸음 끝에서 패킷을 받는 상대라서 다음 홉입니다.
다음 홉을 고르는 쪽은 주로 라우터입니다. 라우터는 망과 망을 잇는 장비입니다. 받은 패킷을 다른 망으로 넘겨 줍니다. 일반 컴퓨터도 패킷을 처음 내보낼 때 같은 선택을 한 번 합니다.
표와 설정에 적히는 다음 홉은 그 장비의 IP 주소(Internet Protocol address, 인터넷 프로토콜 주소)입니다. IP 주소는 인터넷에서 장비를 찾아가는 번호입니다. 이 글에서는 장비를 가리킬 때 다음 홉, 적힌 값을 가리킬 때 다음 홉 주소라고 부릅니다.
라우팅 테이블의 한 줄
라우터와 컴퓨터는 어느 목적지를 누구에게 넘길지 적은 표를 하나씩 들고 있습니다. 이 표가 라우팅 테이블입니다. 경로표라고도 부릅니다. 표의 한 줄은 「이 주소 범위로 가는 패킷은 이 다음 홉에게 넘겨라」를 뜻합니다.
주소 범위는 주소의 앞부분을 몇 비트까지 맞춰 보느냐로 적습니다. 10.2.0.0/16 은 앞 16비트, 곧 앞 두 마디가 10.2 인 주소 전부를 뜻합니다. 이렇게 맞춰 보는 앞부분이 프리픽스입니다.
아래는 어느 회사 라우터의 표를 간추린 것입니다. 다음 홉 칸의 괄호는 그 주소를 쓰는 장비입니다.
| 목적지 범위 | 다음 홉 | 내보낼 회선 |
|---|---|---|
10.1.0.0/16 |
없음. 상대에게 곧바로 | 사내망 회선 |
10.2.0.0/16 |
10.9.0.2 (지사 라우터) |
지사와 이은 전용선 |
0.0.0.0/0 |
203.0.113.1 (통신사 라우터) |
통신사와 이은 회선 |
목적지가 10.2.7.9 인 패킷은 둘째 줄에 맞아 10.9.0.2 에게 넘어갑니다. 이 라우터는 패킷이 지사에서 어디를 더 거칠지 모릅니다. 지사 라우터에게 건네는 데서 이 라우터의 일은 끝납니다.
한 목적지에 여러 줄이 맞을 수 있습니다. 셋째 줄 0.0.0.0/0 은 한 비트도 맞춰 보지 않으므로 모든 주소에 맞습니다. 그래서 10.2.7.9 는 둘째 줄과 셋째 줄에 함께 맞습니다.
이때는 앞부분을 가장 길게 맞춰 보는 줄을 고릅니다. 맞춰 보는 비트가 길수록 범위가 좁으니, 범위가 가장 좁은 줄을 고르는 셈입니다. 이 규칙이 최장 프리픽스 매치입니다. 둘째 줄은 16비트, 셋째 줄은 0비트를 맞춰 보므로 둘째 줄이 뽑힙니다.
셋째 줄은 가장 넓어서 다른 줄이 하나도 안 맞을 때만 뽑힙니다. 이렇게 마지막으로 기대는 줄을 기본 경로라고 부릅니다.
컴퓨터의 표에도 기본 경로가 한 줄 있습니다. 그 줄의 다음 홉을 따로 부르는 이름이 기본 게이트웨이입니다. 컴퓨터 설정 화면에서 보던 기본 게이트웨이 주소는 곧 기본 경로의 다음 홉 주소입니다.
다음 홉이 없는 줄
첫째 줄처럼 다음 홉이 비어 있으면 목적지가 이 장비와 같은 망에 붙어 있다는 뜻입니다. 같은 망이란 서브넷 하나에 같이 들어 있다는 것입니다. 서브넷은 주소 범위를 잘게 나눈 한 조각입니다.
이때 장비는 목적지 장비 자신에게 곧장 건네줍니다. 넘겨받을 중간 장비가 없으니 목적지가 곧 마지막으로 받는 장비입니다. 어떤 패킷이든 마지막 구간은 이런 줄을 거쳐 건너갑니다.
한 홉씩 넘겨 가는 전달
다음 홉에게 넘어간 패킷은 거기서 같은 판단을 다시 받습니다. 그 장비도 자기 라우팅 테이블을 보고 자기 다음 홉을 고릅니다. 목적지와 같은 망에 붙은 장비에 닿을 때까지 이 일이 되풀이됩니다.
집에서는 공유기가 컴퓨터의 첫 다음 홉을 맡습니다. 공유기는 집 안 기기 여럿을 인터넷 회선 하나에 물려 주는 장비입니다. 아래 그림은 집 컴퓨터가 멀리 있는 서버에 패킷을 보낼 때 거치는 장비와, 장비마다 아는 것을 적은 것입니다.
flowchart TD
A["내 컴퓨터<br/>밖으로 가는 것은 공유기로"]
A --> B["공유기<br/>밖으로 가는 것은 통신사 라우터로"]
B --> C["통신사 라우터<br/>이 주소 범위는 상대 망의 라우터로"]
C --> D["상대 망의 라우터<br/>이 망에 붙어 있다. 곧장 건넨다"]
D --> E["목적지 서버"]
화살표 하나가 홉 하나입니다. 상자에 적힌 한 줄이 그 장비가 이 패킷에 대해 아는 전부입니다. 서버까지의 길을 처음부터 끝까지 아는 장비는 그림 어디에도 없습니다.
다음 홉 하나만 아는 까닭
모든 목적지까지 길 전체를 적어 두려면 표가 끝없이 커집니다. 길이 하나 바뀔 때마다 그 길을 지나는 모든 장비의 표도 고쳐야 합니다. 인터넷처럼 장비가 수없이 많은 망에서는 감당이 안 됩니다.
다음 홉만 적으면 한 장비가 알아야 할 것이 바로 옆 이웃으로 줄어듭니다. 먼 곳의 길이 바뀌어도 그 근처 장비들만 다음 홉을 바꾸면 됩니다. 나머지 장비는 하던 대로 같은 이웃에게 넘깁니다. 그 이웃이 바뀐 길을 탑니다.
이 방식이 치르는 값도 있습니다. 앞뒤 장비의 표가 서로 어긋나도 한 장비 안에서는 그 어긋남이 보이지 않습니다. 이 틈에서 나는 장애는 아래 「다음 홉이 어긋날 때」에서 봅니다.
건네줄 때 바뀌는 것과 안 바뀌는 것
다음 홉 주소는 패킷 안에 적히지 않습니다. 패킷 머리에는 처음 보낸 쪽과 마지막 목적지의 IP 주소가 적혀 있습니다. 이 둘은 가는 동안 대개 바뀌지 않습니다.
옆 장비에게 실제로 건네줄 때는 MAC 주소(Media Access Control address, 매체 접근 제어 주소)를 씁니다. MAC 주소는 네트워크 카드마다 붙은 번호입니다. 한 망 안에서만 통합니다. 인터넷 전체가 아니라 바로 옆 장비를 찾는 데 쓰는 번호입니다.
패킷은 받는 쪽의 MAC 주소를 겉에 적은 봉투에 담겨 옆 장비로 건너갑니다. 이 봉투가 프레임입니다. 한 구간을 건너면 봉투는 뜯깁니다. 다음 구간에서 새 봉투에 담깁니다.
장비가 표에서 얻은 것은 다음 홉의 IP 주소뿐입니다. 봉투를 쓰려면 그 주소를 쓰는 장비의 MAC 주소를 먼저 알아내야 합니다.
이 물음을 맡는 것이 ARP(Address Resolution Protocol, 주소 결정 프로토콜)입니다. ARP 는 같은 망에 대고 이 IP 주소를 쓰는 장비가 누구냐고 묻습니다. 그 장비가 자기 MAC 주소로 답합니다.
아래 표는 앞 그림의 길을 구간별로 나눠 두 값을 견준 것입니다. 그림의 화살표 넷이 표의 네 줄입니다.
| 구간 | 패킷의 목적지 IP | 프레임을 받는 쪽 |
|---|---|---|
| 내 컴퓨터 → 공유기 | 서버 | 공유기 |
| 공유기 → 통신사 라우터 | 서버 | 통신사 라우터 |
| 통신사 라우터 → 상대 망의 라우터 | 서버 | 상대 망의 라우터 |
| 상대 망의 라우터 → 서버 | 서버 | 서버 |
목적지 IP 칸은 네 줄 모두 서버입니다. 바뀌는 것은 프레임을 받는 쪽뿐입니다. 앞의 세 구간에서는 그 구간의 다음 홉이 받습니다. 마지막 구간에서는 서버 자신이 받습니다.
표에 적힌 다음 홉 주소는 프레임을 받는 쪽 칸의 장비를 찾는 데까지만 쓰입니다. 그 주소로 MAC 주소를 알아낸 뒤에는 패킷 어디에도 남지 않습니다.
IPv6(Internet Protocol version 6, 인터넷 프로토콜 6판)는 주소를 더 길게 늘린 새 판 IP 입니다. IPv6 에서는 ARP 대신 이웃 탐색이 같은 물음을 맡습니다. 다음 홉의 MAC 주소를 알아내 프레임에 적는 흐름은 같습니다.
다음 홉이 표에 들어오는 길
표의 다음 홉은 두 길로 들어옵니다. 사람이 손으로 적거나, 장비끼리 서로 알려 줍니다.
손으로 적은 줄은 정적 경로입니다. 길이 바뀌어도 사람이 고치기 전까지 같은 다음 홉을 가리킵니다. 작은 망이나 기본 경로 한 줄처럼 잘 안 바뀌는 길에 씁니다.
장비끼리 알려 주는 방식은 동적 라우팅입니다. 라우터들이 「나를 거치면 이 범위에 닿는다」를 이웃에게 알립니다. 받은 소식으로 저마다 다음 홉을 다시 고릅니다. 이 소식을 주고받는 약속을 라우팅 프로토콜이라고 부릅니다.
라우팅 프로토콜은 쓰는 범위에 따라 갈립니다. 한 조직의 망 안에서는 OSPF(Open Shortest Path First, 개방형 최단 경로 우선)가 널리 쓰입니다. 통신사처럼 조직과 조직 사이에서는 BGP(Border Gateway Protocol, 경계 게이트웨이 프로토콜)가 쓰입니다.
컴퓨터는 대개 다음 홉을 손으로 적지 않습니다. 망에 붙는 순간 DHCP(Dynamic Host Configuration Protocol, 동적 호스트 구성 프로토콜)가 자기 주소와 기본 게이트웨이 주소를 함께 내려 줍니다. DHCP 는 망에 붙은 기기에 주소와 설정을 나눠 주는 방식입니다.
다음 홉이 어긋날 때
장비마다 다음 홉을 따로 고르다 보니 어긋남도 장비 사이에서 납니다. 한 장비만 들여다봐서는 표가 멀쩡해 보인다는 것이 이 장애들의 공통점입니다.
라우터 갑은 어떤 목적지의 다음 홉을 을로 적었습니다. 을은 같은 목적지의 다음 홉을 갑으로 적었습니다. 그 목적지로 가는 패킷은 둘 사이만 오갑니다. 이 현상이 라우팅 루프입니다.
다음 홉 장비가 멈춘 뒤에도 표가 그 장비를 계속 가리킬 때가 있습니다. 넘긴 패킷은 받을 장비가 없어 조용히 사라집니다. 이렇게 패킷을 받아 삼키기만 하는 경로를 블랙홀 경로라고 부릅니다.
라우팅 루프에 빠진 패킷이 영원히 돌지는 않습니다. 패킷 머리에는 앞으로 몇 홉을 더 갈 수 있는지 적힌 수가 있습니다. 이 수를 TTL(Time To Live, 생존 시간)이라고 부릅니다.
TTL 은 홉을 하나 지날 때마다 1씩 줍니다. 0이 되면 그 장비는 패킷을 버립니다. 그리고 보낸 쪽에 버렸다는 알림을 돌려보냅니다.
TTL 이 줄어드는 성질을 거꾸로 쓰는 도구가 traceroute입니다. 서버에 닿는 길이 어디서 끊기는지 볼 때 이 도구를 씁니다.
traceroute 는 TTL 을 1 로 둔 패킷부터 보냅니다. 이 패킷은 첫 장비에서 버려지므로 첫 장비의 알림이 돌아옵니다. TTL 을 2, 3 으로 늘릴 때마다 한 장비씩 더 먼 곳에서 알림이 옵니다. 알림을 보낸 장비를 차례로 모으면 목적지까지 거친 다음 홉들이 드러납니다.
IP 밖에서 쓰는 다음 홉
같은 말을 IP 위의 계층에서도 씁니다. HTTP(HyperText Transfer Protocol, 하이퍼텍스트 전송 프로토콜) 요청이 프록시를 거쳐 서버에 갈 때가 그렇습니다. 프록시는 요청을 대신 받아 뒤쪽 서버로 넘겨 주는 서버입니다.
이때는 서버에서 서버로 요청을 한 번 넘기는 것을 홉 하나로 셉니다. 바로 다음에 요청을 받을 서버가 그 요청의 다음 홉입니다. 뜻은 IP 에서와 같습니다. 넘기는 단위가 패킷이 아니라 요청이라는 점만 다릅니다.
HTTP 헤더 중에는 한 홉 구간에만 뜻이 있는 것이 있습니다. 이런 헤더를 hop-by-hop 헤더라고 부릅니다. 연결을 어떻게 다룰지 적는 Connection 헤더가 그 예입니다. 프록시는 요청을 다음 홉에 넘길 때 이런 헤더를 떼어 냅니다.
관련 항목
다음 홉이 속하는 상위 개념
다음 홉을 담는 라우팅 테이블의 구성 요소
라우팅 테이블 · 경로표 · 기본 경로 · 프리픽스 · 최장 프리픽스 매치 · 서브넷 · 서브넷 마스크
다음 홉을 고르고 넘겨받는 장비
라우터 · 기본 게이트웨이 · 게이트웨이 · 공유기 · L3 스위치
다음 홉에게 건네줄 때 쓰는 주소와 프로토콜
IP 주소 · MAC 주소 · ARP · 이웃 탐색 · 프레임 · 패킷 · IPv4 · IPv6
다음 홉을 표에 채우는 방법
정적 경로 · 동적 라우팅 · 라우팅 프로토콜 · OSPF · BGP · DHCP
다음 홉이 어긋날 때 나는 장애
라우팅 루프 · 블랙홀 경로 · 비대칭 라우팅 · 무한 카운트 · TTL · ICMP
거친 다음 홉을 보여 주는 도구
traceroute · ping · mtr
HTTP 에서 홉을 세는 장비와 헤더
프록시 · 리버스 프록시 · 로드 밸런서 · hop-by-hop 헤더 · Connection 헤더 · Via 헤더
다른 이름: next hop · 넥스트 홉