사전 라우팅 프로토콜
프로토콜

라우팅 프로토콜

gabury1고친 사람 github-actions[bot]

라우팅 프로토콜은 라우터들이 서로 길 정보를 알려 주게 하는 약속입니다. 이 약속 덕분에 라우터는 목적지마다 넘길 쪽을 스스로 알아냅니다. 끊긴 회선의 소식도 이 약속을 타고 퍼집니다. 라우터들은 그 소식을 듣고 다른 길로 갈아탑니다.

쉽고 빠른 이해

라우팅 프로토콜은 라우터들이 「나를 거치면 어디까지 갈 수 있다」를 이웃에게 알려 주는 대화 규칙입니다. 예를 들어 회사 망의 라우터 하나에 새 사무실 망이 이어졌다고 합시다. 그 소식이 다른 라우터들에게 퍼져 모두가 새 사무실로 가는 길을 알게 됩니다.

이게 없으면 사람이 라우터마다 길을 손으로 적어야 합니다. 라우터가 수십 대만 돼도 적을 줄이 크게 늡니다. 회선 하나가 끊길 때마다 누군가 여러 장비를 고쳐야 합니다. 길이 하나뿐인 서버나 노트북은 이걸 돌리지 않고 「나머지는 모두 이 라우터로」라는 길 하나만 적어 두고 지냅니다.

어떻게 도는가:

  1. 선으로 이어진 이웃 라우터를 찾아 인사를 나눕니다
  2. 자기가 아는 길을 이웃에게 알리고 이웃이 아는 길을 받습니다
  3. 받은 소식으로 목적지마다 가장 나은 길을 고릅니다. 고른 길은 「이 목적지는 이 이웃에게 넘긴다」를 적어 둔 자기 표에 적습니다

대가도 있습니다. 소식이 모두에게 퍼지는 데 시간이 걸립니다. 그동안 데이터가 헤매거나 버려질 수 있습니다. 누군가 틀린 길을 알리면 그 틀린 길도 똑같이 퍼집니다.

상세

라우팅 프로토콜(routing protocol)은 라우터끼리 길 정보를 주고받게 하는 프로토콜입니다. 라우터는 망과 망 사이에서 데이터를 다음 장비로 넘겨주는 장비입니다. 주고받은 정보로 라우터는 목적지마다 데이터를 어느 쪽으로 넘길지 정합니다. 사람이 적지 않아도 길이 채워집니다. 망이 바뀌면 길도 따라 바뀝니다.

이 절은 라우터가 채우는 표, 라우터끼리 주고받는 것, 망 안과 망 사이가 갈리는 까닭을 차례로 봅니다.

처음 이사 간 동네에서 길을 익히는 장면과 닮았습니다. 이웃들이 저마다 「우리 집 앞 골목으로 가면 역까지 두 블록」 하고 알려 줍니다. 여러 말을 들어 보고 가장 가까운 길을 기억해 둡니다. 어느 골목이 공사로 막히면 그 소식도 이웃을 타고 들려옵니다.

라우터가 채워야 하는 표

라우터는 목적지마다 넘길 곳을 적은 표를 들고 있습니다. 이 소절은 라우터 A 의 표 하나를 놓고 그 표가 무엇을 적는지 봅니다. 먼저 라우터가 무엇을 넘기는지부터 짚습니다.

라우터가 넘기는 데이터는 패킷이라는 덩어리로 나뉘어 다닙니다. 라우터는 한쪽 망에서 들어온 패킷을 받아 다른 쪽 망의 다음 장비로 넘겨줍니다.

패킷을 나르는 규칙은 IP(Internet Protocol, 인터넷 프로토콜)입니다. 이 규칙은 패킷 머리에 보내는 쪽과 받는 쪽의 주소를 적게 합니다.

그 주소가 IP 주소입니다. 라우터는 패킷 머리의 목적지 IP 주소만 보고 넘길 곳을 고릅니다.

넘길 곳을 고를 때 들여다보는 표가 라우팅 테이블입니다. 표의 한 줄은 「이 주소 범위로 가는 패킷은 이 이웃에게 넘긴다」를 적습니다. 넘겨받을 이웃을 다음 홉이라고 부릅니다.

라우터 A 의 표가 아래와 같다고 합시다. 10.0.2.x 는 10.0.2.0 부터 10.0.2.255 까지의 주소 범위를 줄여 쓴 것입니다.

목적지 주소 범위 다음 홉
10.0.1.x 곧장 이어진 망
10.0.2.x 라우터 B
10.0.3.x 라우터 B
그 밖의 모든 주소 라우터 C

10.0.3.7 로 가는 패킷이 들어오면 A 는 셋째 줄을 보고 B 에게 넘깁니다. B 도 자기 표를 보고 그다음으로 넘깁니다. 목적지에 닿을 때까지 라우터마다 이 일을 되풀이합니다.

마지막 줄은 기본 경로입니다. 표의 어느 줄에도 안 맞는 패킷은 이 줄을 따릅니다. 라우팅 프로토콜이 하는 일은 이 표의 줄들을 채우고 고치는 것입니다.

길을 정하는 일과 패킷을 넘기는 일

라우터 안에서는 두 가지 일이 따로 돕니다. 하나는 표를 만드는 일입니다. 다른 하나는 표를 보고 패킷을 넘기는 일입니다. 라우팅 프로토콜은 앞의 일만 맡습니다.

표를 만드는 일은 가끔 돕니다. 이웃에게서 새 소식이 올 때 길을 다시 고릅니다. 패킷을 넘기는 일은 패킷 하나마다 돕니다. 표에서 한 줄을 찾아 넘기면 끝납니다.

앞의 일을 제어 평면, 뒤의 일을 데이터 평면이라고 부릅니다. 네트워크 장비나 클라우드 네트워크를 다루는 문서에 자주 나오는 이름입니다.

flowchart TD
    subgraph C["제어 평면 · 소식이 올 때 돈다"]
        N["이웃 라우터의 소식"] --> P["라우팅 프로토콜이 길을 고름"]
    end
    P --> T["라우팅 테이블"]
    subgraph D["데이터 평면 · 패킷마다 돈다"]
        I["들어온 패킷"] --> L["표에서 목적지 줄을 찾음"]
        L --> O["다음 홉으로 넘김"]
    end
    T --> L

그림에서 두 흐름은 라우팅 테이블 하나로만 만납니다. 라우팅 프로토콜은 패킷을 직접 만지지 않고 표만 고칩니다.

IP 와 라우팅 프로토콜은 둘 다 이름에 프로토콜이 붙어 헷갈리기 쉽습니다. IP 는 패킷을 나르는 규칙입니다. 라우팅 프로토콜은 IP 패킷이 따라갈 길을 정하는 규칙입니다.

손으로 적는 길과 알려 주는 길

표를 채우는 방법은 둘입니다. 하나는 사람이 줄을 손으로 적는 것입니다. 이 방식을 정적 라우팅이라고 합니다.

정적 라우팅은 망이 작을 때 단순합니다. 라우터가 두세 대이고 연결이 바뀔 일이 드물면 몇 줄만 적으면 끝납니다.

대가는 망이 바뀔 때 드러납니다. 회선 하나가 끊겨도 표는 바뀌지 않습니다. 패킷은 끊긴 쪽으로 계속 가서 버려집니다. 사람이 알아채고 고쳐 적을 때까지 그 길은 막혀 있습니다.

라우터가 수백 대가 되면 손으로는 못 따라갑니다. 라우터마다 모든 목적지의 줄을 적어야 합니다. 회선 하나가 바뀌면 여러 대를 함께 고쳐야 합니다.

다른 하나는 라우터끼리 알려 주게 하는 것입니다. 이 방식을 동적 라우팅이라고 부릅니다. 알려 주는 규칙이 라우팅 프로토콜입니다. 회선이 끊기면 양 끝 라우터가 먼저 알아챕니다. 그 소식이 이웃을 타고 퍼지면 라우터들이 저마다 표를 고쳐 우회로로 갈아탑니다.

이웃과 주고받는 한 왕복

이 소절은 두 라우터가 처음 만나 서로에게 길을 알리는 과정을 봅니다. 메시지 이름과 모양은 프로토콜마다 다릅니다. 순서의 뼈대는 대개 같습니다.

먼저 이웃을 찾습니다. 라우터는 선으로 이어진 쪽에 인사 메시지를 주기적으로 보냅니다. 상대도 같은 프로토콜을 쓰면 인사를 돌려주고 둘은 이웃이 됩니다.

다음으로 길을 알립니다. 라우터는 자기가 닿을 수 있는 주소 범위와 거기까지의 거리를 이웃에게 보냅니다. 이 예에서 거리는 목적지까지 거치는 라우터 수로 셉니다. 자기에게 곧장 이어진 망은 거리 0 으로 알립니다.

받은 쪽은 그 거리에 자기에서 이웃까지의 한 걸음을 더합니다. 지금 표에 있는 길보다 가까우면 표를 고칩니다.

sequenceDiagram
    participant A as 라우터 A
    participant B as 라우터 B
    A->>B: 인사
    B-->>A: 인사
    Note over A,B: 이제 둘은 이웃이다
    B->>A: 알림 · 10.0.3.x 까지 거리 1
    Note over A: 표에 적는다 · 10.0.3.x 는 B 로 · 거리 2
    A->>B: 알림 · 10.0.1.x 까지 거리 0
    Note over B: 표에 적는다 · 10.0.1.x 는 A 로 · 거리 1

그림에서 A 는 처음에 10.0.3.x 로 가는 길을 몰랐습니다. B 가 「나에게서 거리 1」이라고 알려 옵니다. B 에서 라우터 하나를 더 거쳐야 닿는다는 뜻입니다. A 는 B 까지의 한 걸음을 더해 거리 2 로 적습니다.

알림은 양쪽으로 오가므로 B 도 A 뒤의 주소 범위를 배웁니다. A 에 곧장 이어진 10.0.1.x 는 거리 0 으로 알려집니다. B 는 거기에 한 걸음을 더해 거리 1 로 적습니다.

인사는 처음 한 번으로 끝나지 않습니다. 이웃이 살아 있는지 확인하려고 계속 주고받습니다. 정해 둔 시간 동안 인사가 한 번도 안 오면 그 이웃이 사라진 것으로 봅니다.

이웃이 사라지면 라우터는 그 이웃을 거치던 길을 표에서 지웁니다. 그리고 그 사실을 남은 이웃들에게 알립니다. 끊긴 회선의 소식은 이렇게 한 라우터씩 번져 나갑니다.

길마다 매기는 점수인 메트릭

목적지로 가는 길이 여럿이면 하나를 골라야 합니다. 이때 길마다 매기는 점수를 메트릭이라고 합니다. 라우터는 메트릭이 가장 작은 길을 표에 적습니다. 앞 소절의 거리가 메트릭의 한 예입니다.

무엇으로 잴지는 프로토콜이 정합니다. 가장 단순한 것은 거치는 라우터 수, 곧 홉 수입니다. 회선 속도를 반영한 비용을 쓰는 프로토콜도 있습니다. 속도가 낮은 회선에 큰 비용을 매기면 라우터를 하나 더 거치더라도 속도가 높은 회선 쪽 길을 고릅니다.

조직과 조직 사이의 길은 메트릭만으로 고르지 않습니다. 어느 통신사와 계약했는지, 어느 길이 싼지 같은 운영 방침이 먼저입니다. 그래서 조직 사이에서 쓰는 프로토콜은 점수보다 라우팅 정책을 따라 길을 고릅니다.

길을 계산하는 두 방식

라우팅 프로토콜은 무엇을 알리고 받은 것으로 어떻게 계산하느냐에 따라 갈립니다. 한 조직의 망 안에서 쓰는 프로토콜은 대개 두 방식 중 하나를 따릅니다.

거리 벡터 라우팅에서 라우터는 이웃에게 자기 표를 알립니다. 「목적지마다 나에게서 거리가 얼마」라는 목록입니다. 받은 라우터는 앞 소절처럼 한 걸음을 더해 더 가까운 길만 받아들입니다. 라우터는 망 전체의 모양을 모르고 이웃이 알려 준 거리만 압니다.

이 계산의 바탕은 벨만-포드 알고리즘입니다. 벨만-포드 알고리즘은 이웃까지의 거리를 더해 가며 목적지까지 가장 짧은 거리를 좁혀 나가는 계산 방법입니다. 거리 벡터 라우팅은 이 계산을 라우터들이 나눠 돌리는 꼴입니다.

거리 벡터 방식의 대표가 RIP(Routing Information Protocol, 라우팅 정보 프로토콜)입니다. RIP 는 거치는 라우터 수로 길을 잽니다.

링크 상태 라우팅에서 라우터는 자기에게 붙은 회선 목록을 망 안의 모든 라우터에게 퍼뜨립니다. 「나는 누구와 비용 얼마로 이어져 있다」라는 소식입니다. 모든 소식을 모은 라우터는 망 전체의 지도를 갖게 됩니다.

지도를 가진 라우터는 다익스트라 알고리즘으로 길을 계산합니다. 다익스트라 알고리즘은 한 지점에서 나머지 모든 지점까지 가장 짧은 길을 찾는 계산 방법입니다. 라우터는 자기를 출발점으로 놓고 이 계산을 돌립니다.

링크 상태 방식의 대표가 OSPF(Open Shortest Path First, 개방형 최단 경로 우선)입니다. 같은 방식을 쓰는 것으로 IS-IS(Intermediate System to Intermediate System)도 있습니다. 이름의 중간 시스템(Intermediate System)은 라우터를 가리킵니다.

두 방식을 알리는 상대와 내용, 라우터가 쥐는 정보로 견주면 아래와 같습니다.

거리 벡터 링크 상태
누구에게 알리나 이웃에게만 망 안의 모든 라우터에게
무엇을 알리나 목적지마다 거리 자기 회선과 그 비용
라우터가 아는 것 이웃이 알려 준 거리 망 전체의 지도
길을 계산하는 방법 벨만-포드 알고리즘을 나눠 돌림 다익스트라 알고리즘
대표 프로토콜 RIP OSPF · IS-IS

표의 셋째 줄이 두 방식의 대가를 가릅니다. 거리 벡터는 라우터가 들고 있을 것이 적고 단순합니다. 대신 소식이 이웃에서 이웃으로 한 단계씩 번져서 망이 바뀐 뒤 모두가 맞춰지기까지 오래 걸립니다. 링크 상태는 지도를 들고 계산하느라 메모리와 계산이 더 듭니다. 대신 소식이 모두에게 곧장 퍼져 빨리 맞춰집니다.

모두가 같은 길을 알게 되기까지

망이 바뀌면 소식이 퍼지는 데 시간이 걸립니다. 모든 라우터가 새 상황에 맞게 표를 고쳐 서로 어긋남이 없어진 상태를 수렴이라고 합니다. 바뀐 순간부터 수렴까지 걸린 시간을 수렴 시간이라고 부릅니다.

수렴하기 전에는 라우터마다 아는 길이 다릅니다. 한쪽은 회선이 끊긴 것을 알고 다른 쪽은 아직 모르면 패킷이 끊긴 쪽으로 가서 버려집니다.

두 라우터가 같은 목적지에 대해 서로를 다음 홉으로 적는 일도 생깁니다. 그러면 패킷이 둘 사이를 오가다 버려집니다. 이 현상이 라우팅 루프입니다.

백엔드 쪽에서는 이 기간이 잠깐의 패킷 손실이나 연결 끊김으로 보입니다. 회선 장애 직후 일부 요청만 실패했다가 저절로 낫는 일이 이렇게 생길 수 있습니다.

망 안의 길과 망 사이의 길

인터넷은 한 덩어리가 아닙니다. 통신사, 클라우드 회사, 대학처럼 저마다 망을 운영하는 조직들이 서로 이어져 있습니다. 한 조직이 한 방침으로 운영하는 망 덩어리를 자율 시스템(AS, Autonomous System)이라고 합니다. 자율 시스템마다 번호가 하나씩 붙습니다.

라우팅 프로토콜도 이 경계를 따라 갈립니다. 한 자율 시스템 안에서 쓰는 것을 IGP(Interior Gateway Protocol, 내부 게이트웨이 프로토콜)라고 합니다. 앞에서 본 RIP · OSPF · IS-IS 가 여기 듭니다. 자율 시스템 사이에서 쓰는 것은 EGP(Exterior Gateway Protocol, 외부 게이트웨이 프로토콜)라고 합니다. 두 이름의 게이트웨이는 여기서 라우터를 가리킵니다.

둘이 갈리는 까닭은 목표가 달라서입니다. 망 안에서는 한 조직이 모든 라우터를 쥐고 있으므로 메트릭이 가장 작은 길을 고르면 됩니다. 망 사이에서는 조직마다 속셈이 다릅니다. 남의 트래픽을 공짜로 실어 주기 싫은 조직이 있습니다. 특정 조직을 거치기 싫은 조직도 있습니다.

오늘날 자율 시스템 사이에서 쓰는 EGP 는 BGP(Border Gateway Protocol, 경계 게이트웨이 프로토콜)입니다. BGP 는 목적지까지 거치는 자율 시스템 번호의 목록을 함께 알립니다. 이런 방식을 경로 벡터 라우팅이라고 합니다.

이 목록은 한 바퀴 도는 길을 거르는 데도 쓰입니다. 받은 목록에 자기 번호가 이미 있으면 한 바퀴 돈 길이므로 받지 않습니다.

자율 시스템의 가장자리에서 바깥 조직과 이어진 라우터를 경계 라우터라고 부릅니다. BGP 는 경계 라우터끼리 TCP(Transmission Control Protocol, 전송 제어 프로토콜) 연결을 맺고 그 위에서 메시지를 주고받습니다.

flowchart TD
    subgraph S1["자율 시스템 1 · 회사 망"]
        A["라우터"] ---|"IGP · OSPF 등"| AB["경계 라우터"]
    end
    subgraph S2["자율 시스템 2 · 통신사 망"]
        BB["경계 라우터"] ---|"IGP · IS-IS 등"| B["라우터"]
    end
    AB ---|"BGP"| BB

그림에서 각 망 안은 저마다 고른 IGP 로 길을 채웁니다. 두 망이 만나는 경계 라우터끼리는 BGP 로 길을 주고받습니다. 경계 라우터는 BGP 로 배운 바깥 길을 망 안의 라우터들에게도 전합니다.

쓰는 곳과 안 쓰는 곳

라우팅 프로토콜은 길이 여럿이고 자주 바뀌는 망에서 돕니다. 통신사 망, 데이터센터 망, 지점이 많은 회사 망이 그렇습니다. 회선이 끊겨도 사람 손 없이 우회로로 넘어가는 것이 쓰는 이유입니다.

길이 하나뿐인 곳에서는 돌리지 않습니다. 서버나 노트북은 대개 라우팅 프로토콜을 돌리지 않고 기본 경로 한 줄로 지냅니다. 그 한 줄이 가리키는 라우터가 기본 게이트웨이입니다. 기본 게이트웨이는 다른 망으로 갈 패킷을 모두 넘겨받는 라우터입니다.

백엔드 개발자가 라우팅 프로토콜을 직접 만나는 곳도 있습니다. 클라우드에는 VPC(Virtual Private Cloud, 가상 사설 클라우드)라는 사설 망이 있습니다. 이 VPC 를 회사 망과 VPN(Virtual Private Network, 가상 사설망)이나 전용 회선으로 이을 때 BGP 설정 칸을 자주 만납니다. 쿠버네티스 클러스터 안의 주소 범위를 바깥 라우터에 BGP 로 알리는 네트워크 구성도 있습니다.

라우팅 프로토콜은 받은 소식을 믿고 퍼뜨립니다. 한 곳에서 틀린 길을 알리면 그 틀린 길이 이웃을 타고 번집니다.

조직 사이에서 이런 일이 나면 그 주소 범위로 가던 패킷이 엉뚱한 자율 시스템으로 흘러갑니다. 그 주소를 쓰는 서비스는 그동안 인터넷에서 안 보일 수 있습니다. 남의 주소 범위를 일부러 자기 것이라 알리는 공격은 BGP 하이재킹이라고 부릅니다.

관련 항목

라우팅 프로토콜이 채우는 표와 그 구성 요소

라우팅 테이블 · 다음 홉 · 기본 경로 · 메트릭 · 홉 수 · 최장 접두사 일치

라우팅 프로토콜의 하위 종류

RIP · OSPF · IS-IS · EIGRP · BGP · IGP · EGP

라우팅 프로토콜이 길을 계산하는 방식과 알고리즘

거리 벡터 라우팅 · 링크 상태 라우팅 · 경로 벡터 라우팅 · 벨만-포드 알고리즘 · 다익스트라 알고리즘 · 최단 경로

라우팅 프로토콜을 돌리는 장비와 망 단위

라우터 · 경계 라우터 · 자율 시스템 · 자율 시스템 번호 · 서브넷 · 기본 게이트웨이

라우팅 프로토콜 대신 표를 채우는 수단

정적 라우팅 · 정적 경로 · DHCP · 라우터 광고

라우팅 프로토콜이 수렴하기 전에 나는 장애와 그 대책

수렴 · 라우팅 루프 · 무한 카운트 문제 · 스플릿 호라이즌 · 패킷 손실 · 블랙홀 라우팅

라우팅 프로토콜의 틀린 알림이 부르는 공격과 방어 수단

BGP 하이재킹 · 경로 누출 · RPKI · 경로 필터링

라우팅 프로토콜이 속한 라우터의 처리 계층

제어 평면 · 데이터 평면 · 포워딩 · SDN

라우팅 프로토콜 메시지를 실어 나르는 프로토콜

IP · TCP · UDP · IPv4 · IPv6

라우팅 프로토콜을 만나는 백엔드 인프라

VPC · VPN · 전용 회선 · 쿠버네티스 · 애니캐스트

라우팅 프로토콜이 속하는 상위 분류

라우팅 · 동적 라우팅 · 프로토콜 · 네트워크 · 네트워크 계층 · 인터넷 계층

다른 이름: routing protocol · 경로 제어 프로토콜