사전 간접 라우팅
개념

간접 라우팅

gabury1고친 사람 github-actions[bot]

간접 라우팅은 패킷을 목적지에 바로 건네지 않고 중간의 라우터에게 먼저 맡기는 전달 방식입니다. 다른 망에 있는 목적지로 갈 패킷이 이 방식을 탑니다. 보내는 컴퓨터는 목적지까지 가는 길을 몰라도 됩니다. 길을 아는 라우터들이 한 칸씩 넘겨 목적지까지 데려갑니다.

쉽고 빠른 이해

간접 라우팅은 곧장 닿지 않는 목적지로 갈 데이터를 가까운 라우터에게 대신 맡기는 일입니다. 예를 들어 사무실 노트북이 바깥의 서버로 요청을 보내면 그 요청은 먼저 사무실 공유기로 갑니다.

이게 없으면 모든 컴퓨터가 세상의 모든 망으로 가는 길을 스스로 알아야 합니다. 간접 라우팅 덕분에 컴퓨터는 바깥으로 나가는 문 하나만 알면 됩니다.

어떻게 도는가:

  1. 보내는 컴퓨터가 목적지가 자기와 같은 망에 있는지 봅니다
  2. 다른 망이면 데이터를 가까운 라우터에게 건넵니다. 데이터에 적힌 최종 목적지는 바꾸지 않습니다
  3. 라우터마다 같은 판단을 되풀이합니다. 목적지와 같은 망에 닿은 라우터가 목적지에게 직접 건넵니다

대가는 첫 라우터에 기댄다는 것입니다. 이 라우터 설정이 틀리면 바깥으로는 하나도 못 나갑니다. 같은 망 안의 통신은 그래도 됩니다.

상세

다른 도시의 친구에게 소포를 보낼 때 친구 집까지 들고 가지 않고 동네 택배 창구에 맡깁니다. 소포는 집하장을 몇 곳 거쳐 친구에게 닿습니다. 받는 사람 주소는 처음부터 끝까지 같습니다. 바뀌는 것은 소포를 넘겨받는 손뿐입니다.

네트워크로 보내는 데이터는 패킷이라는 덩어리로 나뉘어 갑니다. 패킷마다 목적지 주소가 적혀 있습니다. 그래서 덩어리 하나하나가 따로 목적지를 찾아갈 수 있습니다.

호스트는 네트워크에 붙어 패킷을 보내고 받는 컴퓨터입니다. 사무실 노트북도, 데이터센터의 데이터베이스 서버도 호스트입니다.

라우터는 망과 망 사이를 잇는 장비입니다. 한 망에서 받은 패킷을 다른 망으로 넘겨 줍니다. 망이 여럿으로 나뉘어 있어도 패킷이 건너갈 수 있는 것은 라우터 덕분입니다.

간접 라우팅(indirect routing)은 패킷을 목적지 호스트가 아니라 중간의 라우터에게 건네는 전달입니다. 반대편은 라우터 없이 목적지에게 곧장 건네는 직접 라우팅입니다.

직접과 간접을 가르는 판정

보내는 호스트는 패킷을 내보내기 전에 목적지가 같은 망에 있는지부터 봅니다. 같은 망은 라우터를 거치지 않고 곧장 닿는 범위입니다. 이 범위가 서브넷입니다. 한 공유기나 한 스위치에 함께 물린 장비들이 흔한 예입니다.

판정에는 주소를 씁니다. IP(Internet Protocol, 인터넷 프로토콜)는 인터넷에서 패킷을 나르는 규칙입니다. IP 주소는 그 규칙에서 장비를 가리키는 번호입니다. 192.168.0.10 처럼 점으로 나눈 네 마디로 적습니다.

IP 주소의 앞부분은 망을 가리킵니다. 뒷부분은 그 망 안의 장비를 가리킵니다. 앞부분이 어디까지인지는 서브넷 마스크라는 값이 정합니다. 255.255.255.0 이면 앞 세 마디가 망입니다.

호스트는 자기 주소와 목적지 주소에서 앞부분만 떼어 비교합니다. 같으면 직접 라우팅입니다. 다르면 간접 라우팅입니다.

주소가 192.168.0.10, 서브넷 마스크가 255.255.255.0 인 호스트가 두 목적지를 판정하면 다음과 같습니다.

목적지 주소 떼어 낸 앞부분 내 앞부분과 판정
192.168.0.20 192.168.0 같다 직접 라우팅
203.0.113.5 203.0.113 다르다 간접 라우팅

둘째 줄의 목적지는 다른 망에 있습니다. 호스트는 그 망으로 가는 길을 모릅니다. 그래서 패킷을 라우터에게 맡깁니다.

사무실 노트북이 바깥의 서버로 요청을 보낼 때가 이 경우입니다. 요청은 먼저 사무실 공유기로 갑니다. 공유기도 라우터의 한 종류입니다.

목적지 IP 주소와 받을 MAC 주소

패킷은 한 망 안을 지날 때 프레임이라는 봉투에 담깁니다. 프레임 머리에는 그 망에서 이 봉투를 받을 장비의 주소를 적습니다. 사무실 유선 랜을 이루는 이더넷이 이런 프레임을 쓰는 흔한 예입니다.

그래서 간접 라우팅으로 나가는 패킷에는 주소 둘이 쓰입니다. 하나는 패킷 안에 적힙니다. 다른 하나는 패킷을 담은 프레임 머리에 적힙니다.

패킷 안의 주소는 목적지 IP 주소입니다. 이 값은 최종 목적지 호스트를 가리킵니다. 패킷이 라우터를 몇 개 지나도 바뀌지 않습니다.

프레임 머리의 주소는 MAC 주소(Media Access Control address, 매체 접근 제어 주소)입니다. 네트워크 카드마다 하나씩 붙어 나오는 번호입니다. 같은 망 안에서 프레임을 받을 장비를 가리킵니다.

간접 라우팅에서는 프레임 머리의 받을 MAC 주소에 라우터의 MAC 주소가 들어갑니다. 패킷 안의 목적지는 먼 호스트입니다. 프레임을 받는 장비는 바로 옆 라우터입니다.

MAC 주소는 ARP(Address Resolution Protocol, 주소 결정 프로토콜)로 알아냅니다. ARP 는 같은 망에 대고 「이 IP 주소를 쓰는 장비는 MAC 주소를 알려 달라」고 묻는 프로토콜입니다. 간접 라우팅에서 ARP 로 묻는 상대는 목적지가 아니라 라우터입니다.

두 전달이 세 칸을 어떻게 채우는지 비교하면 다음과 같습니다.

칸 직접 라우팅 간접 라우팅
패킷 안의 목적지 IP 주소 목적지 호스트 목적지 호스트
프레임의 받을 MAC 주소 목적지 호스트 라우터
ARP 로 묻는 IP 주소 목적지 호스트의 주소 라우터의 주소

표에서 두 전달은 첫 줄만 같습니다. 아래 두 줄은 다릅니다.

라우터의 IP 주소는 패킷 안에 적히지 않습니다. 라우터의 MAC 주소를 ARP 로 물을 때 한 번 쓰이고 끝납니다. 호스트는 이 IP 주소를 자기 라우팅 테이블에서 읽습니다(아래 「라우팅 테이블에 적힌 모습」).

라우터마다 되풀이되는 판정

패킷을 넘겨받은 라우터도 호스트와 같은 판정을 합니다. 목적지가 자기가 붙은 망 가운데 하나에 있으면 목적지에게 직접 건넵니다. 아니면 다음 라우터에게 간접으로 넘깁니다.

장비에서 옆 장비로 한 번 건너가는 구간이 홉입니다. 지금 장비가 패킷을 넘길 바로 다음 장비가 다음 홉입니다. 간접 라우팅은 다음 홉이 라우터인 전달입니다.

sequenceDiagram
    participant A as 보내는 호스트
    participant R1 as 라우터 1
    participant R2 as 라우터 2
    participant B as 목적지 호스트
    A->>R1: 간접 · 받을 MAC 은 라우터 1
    Note over R1: 목적지가 붙은 망이 아니다
    R1->>R2: 간접 · 받을 MAC 은 라우터 2
    Note over R2: 목적지가 붙은 망이다
    R2->>B: 직접 · 받을 MAC 은 목적지 호스트

그림에서 패킷은 간접 전달 두 번과 직접 전달 한 번을 거칩니다. 세 구간 내내 목적지 IP 주소는 목적지 호스트를 가리킵니다.

받을 MAC 주소는 구간마다 새로 적힙니다. 라우터는 받은 프레임을 벗깁니다. 그리고 다음 구간에 맞는 새 프레임에 패킷을 다시 담습니다.

한 패킷의 여정은 이렇게 간접 전달 여러 번 뒤에 직접 전달 한 번으로 끝납니다. 같은 망 안의 통신은 간접 전달이 한 번도 없는 여정입니다.

같은 망 안의 다음 홉

간접 라우팅으로 넘겨받을 라우터는 보내는 쪽과 같은 망에 있어야 합니다. 받을 MAC 주소는 ARP 로 알아냅니다. 그런데 ARP 는 같은 망 안에서만 묻고 답합니다.

그래서 간접 라우팅의 한 구간은 라우터를 상대로 한 직접 전달과 모양이 같습니다. 다른 것은 하나뿐입니다. 패킷 안의 목적지 IP 주소가 라우터가 아니라 먼 목적지를 가리킵니다.

라우팅 테이블에 적힌 모습

호스트와 라우터는 판정 결과를 라우팅 테이블에 적어 두고 씁니다. 라우팅 테이블은 목적지 망마다 패킷을 누구에게 넘길지 적은 표입니다. 표의 줄마다 직접인지 간접인지가 드러납니다.

표의 목적지 칸은 192.168.0.0/24 처럼 적습니다. 빗금 뒤의 숫자는 주소의 앞 몇 비트가 망인지를 뜻합니다.

/24 는 서브넷 마스크 255.255.255.0 을 줄여 적은 것입니다. 마스크에서 255 인 마디가 앞의 셋입니다. 한 마디가 8비트라 세 마디는 24비트입니다. 그래서 192.168.0.0/24 는 192.168.0 으로 시작하는 주소 전부입니다.

망을 가리키는 주소의 앞부분이 프리픽스입니다. 0.0.0.0/0 은 프리픽스 길이가 0 입니다. 비교할 앞부분이 없으므로 모든 주소에 맞습니다.

앞의 호스트 192.168.0.10 이 가진 표를 간추리면 다음과 같습니다.

목적지 망 다음 홉 전달
192.168.0.0/24 없음 직접 라우팅
10.20.0.0/16 192.168.0.254 간접 라우팅
0.0.0.0/0 192.168.0.1 간접 라우팅

첫 줄은 호스트 자신의 망입니다. 자기 주소 192.168.0.10 과 서브넷 마스크 255.255.255.0 에서 나온 줄입니다. 목적지가 이 망에 있습니다. 넘길 라우터가 필요 없어서 다음 홉 칸이 빕니다.

다음 홉 칸이 채워진 줄은 간접 라우팅입니다. 그 주소의 라우터에게 패킷을 맡깁니다.

목적지 10.20.3.4 는 둘째 줄과 셋째 줄에 다 맞습니다. 이럴 때는 프리픽스가 더 긴 줄을 고릅니다. 더 좁은 범위를 적은 줄이 그 목적지를 더 잘 안다고 보는 것입니다. 이 규칙이 최장 프리픽스 매치입니다.

셋째 줄 0.0.0.0/0 이 기본 경로입니다. 다른 줄이 하나도 안 맞는 목적지는 전부 이 줄을 탑니다. 이 줄의 다음 홉이 기본 게이트웨이입니다.

흔한 호스트의 표는 자기 망을 적은 직접 줄 하나와 기본 경로 하나가 거의 전부입니다. 호스트가 바깥으로 나가는 문 하나만 알면 되는 까닭이 여기 있습니다. 간접 라우팅이 없으면 호스트마다 세상의 모든 망으로 가는 길을 표에 적어 두어야 합니다.

리눅스에서는 ip route 명령이 이 표를 보여 줍니다. 출력을 줄이면 다음과 같습니다.

default via 192.168.0.1 dev eth0  # 간접
192.168.0.0/24 dev eth0 scope link  # 직접

via 뒤에 다음 홉이 붙은 줄이 간접 라우팅입니다. default 는 앞 표의 0.0.0.0/0 입니다. eth0 은 패킷을 내보낼 네트워크 카드의 이름입니다. scope link 는 라우터 없이 곧장 닿는 망이라는 표시입니다.

판정이 틀렸을 때

간접 라우팅은 설정값 둘에 기댑니다. 서브넷 마스크는 직접이냐 간접이냐를 가릅니다. 라우팅 테이블의 직접 줄이 이 값에서 나오기 때문입니다. 기본 게이트웨이는 간접으로 보낼 곳을 정합니다.

둘 중 하나가 틀렸을 때의 증상은 다음과 같습니다. 마스크가 넓다 좁다는 것은 마스크가 망으로 잡는 주소 범위를 말합니다.

틀린 것 호스트가 하는 일 증상
기본 게이트웨이 주소 오류 · 그 라우터 꺼짐 간접 패킷을 닿지 않는 곳에 맡김 같은 망만 통신됨 · 다른 망으로는 전부 불통
마스크가 잡는 망 범위가 실제보다 넓음(예: /24 여야 할 곳이 /16) 다른 망의 목적지를 같은 망으로 보고 직접 보냄 그 목적지 불통(ARP 에 답하는 장비 없음)
마스크가 잡는 망 범위가 실제보다 좁음(예: /24 여야 할 곳이 /25) 같은 망의 목적지를 다른 망으로 보고 라우터에게 맡김 도달은 함 · 라우터를 한 번 돌아감(라우터가 되돌려 줄 때)

첫 줄은 백엔드 서버에서 자주 만나는 모양입니다. 같은 망의 데이터베이스에는 붙습니다. 그런데 바깥의 결제 서비스를 부르면 연결이 안 됩니다.

데이터베이스로 가는 패킷은 직접 라우팅이라 라우터를 안 거칩니다. 바깥으로 가는 패킷만 간접 라우팅이라 망가진 기본 게이트웨이를 지나야 합니다.

같은 이름의 다른 뜻

모바일 IP에도 간접 라우팅이라는 말이 나옵니다. 모바일 IP 는 다른 망으로 옮겨 간 기기가 원래 IP 주소를 계속 쓰게 해 주는 방식입니다.

모바일 IP 의 간접 라우팅은 옮겨 간 기기로 갈 패킷을 원래 망의 대리 장비가 먼저 받는 방식입니다. 대리 장비는 그 패킷을 기기가 지금 있는 망으로 다시 보냅니다. 이 대리 장비가 홈 에이전트입니다. 위에서 다룬 간접 라우팅과는 뜻이 다릅니다.

관련 항목

간접 라우팅과 나란히 서는 라우팅 방식

직접 라우팅 · 정적 라우팅 · 동적 라우팅 · 소스 라우팅

간접 라우팅이 패킷을 맡기는 장비

라우터 · 기본 게이트웨이 · 게이트웨이 · 다음 홉 · 홉 · 공유기

직접과 간접을 가르는 주소 체계

IP 주소 · 서브넷 · 서브넷 마스크 · 네트워크 주소 · CIDR · 프리픽스 · IPv4 · IPv6

간접 라우팅이 거치는 처리 단계

라우팅 테이블 · 최장 프리픽스 매치 · 기본 경로 · ARP · 포워딩 · TTL

간접 라우팅의 한 구간을 나르는 링크 계층 요소

MAC 주소 · 프레임 · 이더넷 · 링크 계층 · 네트워크 카드 · 스위치

간접 라우팅에서 나는 장애

ICMP 리다이렉트 · 라우팅 루프 · 목적지 도달 불가 · 비대칭 라우팅 · 패킷 손실

간접 라우팅을 들여다보는 명령

ip route · traceroute · ping · netstat · tcpdump

같은 이름을 쓰는 모바일 IP 의 구성 요소

모바일 IP · 홈 에이전트 · 외부 에이전트 · 삼각 라우팅

간접 라우팅이 속하는 상위 분류

라우팅 · 네트워크 · 네트워크 계층 · IP · 패킷 · 호스트 · 인터넷 프로토콜 스위트

다른 이름: indirect routing · indirect delivery · 간접 전달