요약

  • RFC 3137은 라우터의 LSA를 OSPF 토폴로지에 유지하고 스텁 링크에는 기존 비용을 그대로 두면서, 비스텁 링크 비용을 16비트 최댓값으로 설정해 이중 경로가 트랜짓 트래픽을 대신 부담하도록 했다.
  • 이 상태는 선호 설정이지, 라우터의 소멸도 완료된 트래픽 배출의 증거도 아니었다. 라우터는 도달 가능한 채로 트랜짓에 부적합할 수 있었고, 대체 경로가 없다면 이후 OSPF 동작이 그 라우터를 계속 사용할 수 있었다.

철회는 너무 무딘 수단이었다

컨트롤 플레인이 한계에 도달한 라우터를 상상해 보자. CPU가 포화 상태이거나, 메모리가 더 이상 모든 링크 상태 광고(LSA)를 담고 신뢰할 수 있는 라우팅 테이블을 구성하지 못한다. 운영자는 이 장비를 단순히 통과하기만 하는 트래픽이 다른 경로를 택하길 원한다. 그러나 라우터 자신의 주소도 여전히 중요하다. 엔지니어는 그 라우터에 접속해야 할 수 있고, 직접 연결된 프리픽스는 여전히 유효할 수 있으며, 노드가 반드시 고장 난 것은 아니다.

가장 떠올리기 쉬운 조치—라우터를 OSPF에서 사라지게 하는 것—는 잘못된 문제를 푼다. OSPF는 독립적인 목적지 목록에서 경로를 계산하지 않고 그래프를 계산한다. RFC 2328의 최단 경로 절차에서 라우터와 트랜짓 네트워크가 1단계 그래프를 이루고, 스텁 네트워크는 나중에 잎(leaf)으로 추가된다. 라우터 X가 자신의 router-LSA를 플러시하면 그래프는 X가 광고한 링크와 X로 가는 경로를 계산하는 데 필요한 역방향 링크를 함께 잃는다. 네트워크는 X를 트랜짓으로 쓰지 않게 되지만, 운영자가 보존하려던 도달 가능성 자체를 잃을 수도 있다.

2001년 6월에 Informational 메모로 발표된 RFC 3137은 더 좁은 행위를 정의했다. 라우터 X는 링크 상태 데이터베이스에 남았고, 그 LSA는 여전히 X의 인접 면을 기술했다. 바뀐 것은 서로 다른 종류의 링크에 붙는 가격이었다.

최대 메트릭은 중간 상태를 표현했다

이 메모는 X의 router-LSA에 있는 모든 비스텁 링크 비용을 16비트 값0xFFFF로 설정했다. 그 값을LSInfinity라고 부르면서도, 요약(summary) 및 AS 외부 LSA에 쓰이는 24비트 올-원즈 값과는 신중하게 구분했다. 스텁 링크는 인터페이스 출력 비용을 그대로 유지했다.

바로 이 비대칭이 역할을 했다. 비스텁 링크는 최단 경로 트리가 라우터나 트랜짓 네트워크를 통과하도록 허용한다. 그런 링크에 최대 비용을 부여하면 X를 우회하는 이중 경로가 더 싼 경로가 된다. 타입 3 스텁 링크는 직접 연결된 프리픽스를 잎으로 표현했다. 그 비용을 그대로 두면 수신 라우터들은 다른 곳으로 가는 길에 X를 통과하지는 않으면서도, 라우터 자신의 면으로 가는 경로를 계산할 수 있었다.

결과 상태는 평상시의 서비스도 철회도 아니었다. 라우터는 사실상 이렇게 말하고 있었다. “나는 여기 있고 이 목적지들은 나에 붙어 있지만, 다른 경로가 존재한다면 나를 다리로 쓰지 마라.” 도달 가능성과 트랜짓 자격은 같은 LSA 안에서 분리된 주장이 되었다.

이는 임박한 고장 외에도 유용했다. RFC 3137은 중대한(critical) 조건, 무중단 도입과 제거(graceful introduction and removal), 그 밖의 관리적 또는 트래픽 엔지니어링 사유를 나열했다. 새로 기동한 라우터는 도메인의 트랜짓 부하를 짊어지기 전에 시간이 필요할 수 있다. 점검을 앞둔 라우터는 종료 전에 트래픽을 옮겨야 할 수 있다. 이 메모는 그 선호를 위한 프로토콜 신호를 제공했을 뿐, 전환이 끝났다는 운영적 증거까지는 제공하지 않았다.

이중성이 요청의 실질을 결정했다

‘스텁(stub)’이라는 단어는 절대적인 인상을 줄 수 있다. 그러나 여기서는 그렇지 않았다. RFC 3137은 이 기법이 X를 우회할 만한 충분한 이중성을 갖춘 네트워크에서 실질적 이득을 낸다고 강조했다. 메트릭은 두 번째 경로를 만들어 주지 않는다. X가 그 너머의 목적지로 가는 유일한 연결로 남아 있다면, 동작은 수신 라우터가 최댓값을 어떻게 해석하느냐에 달렸다.

이 한계가 설계의 핵심이다. 높은 메트릭은 로컬 최단 경로 계산의 입력일 뿐이다. 중앙 컨트롤러에 보내는 명령도, 트래픽이 이동했다는 확인 응답도, 포워딩에 대한 물리적 차단도 아니다. 다른 각 라우터는 플러딩된 LSA를 받아 자기 토폴로지를 구성하고 자기 최적 경로를 선택한다. 대안은 토폴로지가 제공하고, 광고는 그들의 상대적 비용만 바꾼다.

따라서 운영적 증거는 층을 이룬다. 구성은 X에 특수 상태에 들어가라고 지시했음을 보여줄 수 있다. 발신된 LSA는 X가 무엇을 광고했는지 보여준다. 링크 상태 데이터베이스는 어떤 피어가 그것을 받았는지 보여준다. SPF와 포워딩 테이블 관찰은 각 수신 라우터가 무엇을 선택했는지 보여준다. 흐름 텔레메트리는 트랜짓 트래픽이 실제로 X를 떠났는지 보여준다. 서비스 프로브는 목적지가 여전히 사용 가능했는지 보여준다. 이러한 증거들 가운데 하나가 다음 증거를 조용히 대신해서는 안 된다.

OSPF 두 세대가 경계 사례에서 갈렸다

RFC 3137은 호환성 경계도 기록했다. RFC 1247을 따르는 라우터는 router-LSA 비용이 최댓값인 링크 레코드를 버렸다. RFC 1583 이후를 따르는 라우터는 그 메트릭을 도달 불가로 취급하지 않았다. 대체 경로가 존재하면 의도된 선호에 대해 이 차이는 무해했다. 두 세대 모두 X를 우회하는 더 싼 경로를 골랐다.

그러나 X가 유일한 경로일 때는 답이 갈렸다. 구세대 계산은 X를 트랜짓으로 쓰지 않았다. 신페대 계산은 그 고비용 경로가 여전히 유일한 후보이기에 이를 사용할 수 있었다. 메모는 서술된 사례에서 이 혼합 동작이 라우팅 루프를 만들지 않는다고 말했다. 그러나 모든 메트릭 전환, 모든 구현, 모든 이후의 운영 시퀀스가 일시적 루프에서 보편적으로 자유롭다고는 말하지 않았다.

이 구분이 중요한 이유는 당대 텍스트에서 ‘무한대’가 두 가지 역할을 했기 때문이다. 도달 불가 값을 가리키는 듯 보일 수 있었지만, 이후의 OSPF는 16비트 최댓값을 유한하고 가장 덜 선호되는 링크 비용으로 다루었다. 이 기법은 대안이 없을 때 우아하게 저하되기 위해 바로 그 차이에 의존했다.

2013년 개정판은 값을 더 정직하게 명명했다

RFC 6987은 12년 뒤 RFC 3137을 폐기(obsolete)했다. 기본 기법은 유지하면서0xFFFF에 고정된 아키텍처 이름MaxLinkMetric을 도입했는데, 명시적으로LSInfinity해석에 관한 혼란을 제거하기 위해서였다. 새 이름은 메커니즘을 읽기 쉽게 만들었다. 이것은 링크가 절대 사용될 수 없다는 보편적 주장이 아니라, 가장 큰 링크 메트릭이라는 뜻이었다.

개정판은 이 방법을 OSPFv2와 OSPFv3에 적용했고 OSPFv3의 R비트를 다루었다. R비트를 지우면 라우터를 트랜짓으로 쓰지 말아야 함을 나타낸다. RFC 6987은 이 선택을 운영자에게 남겨 두었고 결정적인 정책 차이를 노출했다.MaxLinkMetric은 라우터를 통과하는 유일한 경로를 여전히 허용할 수 있지만, R비트를 지우는 것은 그 라우터를 트랜짓에서 일관되게 배제한다. 한 옵션은 대안이 사라졌을 때 연속성을 선호하고, 다른 옵션은 고립을 더 엄격하게 강제한다.

이러한 추가 사항은 2001년 메모에 소급되지 않고 RFC 6987에 속한다. 그들은 원래의 중간 상태가 살아남으면서 의미론이 더 명시적으로 정교해졌음을 보여준다.

Graceful restart는 정반대의 포워딩 결과를 원했다

모든 계획된 라우팅 전환을 “우아한 운영”으로 묶는 것은 유혹적이다. 그러나 프로토콜들은 서로 다른 질문을 던진다. RFC 3623의 우아한 OSPF 재시작은 라우팅 소프트웨어가 재시작하는 동안에도, 포워딩 상태가 살아 있고 토폴로지가 안정적이며 이웃이 도울 수 있다는 조건에서 라우터를 포워딩 경로에 유지하려 한다. 반면 RFC 3137은 다른 라우터들에게 그 라우터를 통과하지 않는 경로를 선호하라고 요청한다.

하나의 메커니즘은 일시적으로 눈이 멀어진 컨트롤 플레인을 통과하는 트랜짓을 보존한다. 다른 메커니즘은 여전히 보이는 노드를 통과하는 트랜짓을 억제한다. 둘을 혼동하면 원하는 결과가 뒤집힐 수 있다.

이후의 MPLS 및 GMPLS 작업인 RFC 5817은 트래픽 엔지니어링된 링크와 노드의 계획된 종료를 자체 시그널링 및 경로 선택 면에서 다루었다. RFC 6976은 링크 상태 수렴 중 FIB 갱신에 순서를 부여해 일시적 루프를 다루었다. 이 메커니즘들은 RFC 3137의 경계를 찾는 데 도움이 된다. 최대 메트릭 router-LSA는 OSPF 선호 신호이지, 완전한 유지보수 트랜잭션도, TE 터널 해체 영수증도, 보편적인 루프프리 수렴 증명도 아니었다.

도달 가능성이 곧 건강은 아니었다

RFC 3137에서 가장 강력한 역사적 발상은65535라는 숫자가 아니다. 운영 전환을 하나의 불리언 사실로 인코딩하는 것을 거부한 점이다. 라우터는 광고할 만큼 살아 있고, 관리할 만큼 도달 가능하면서도, 남의 트래픽을 옮기기에 부적합할 수 있었다. 반대로 라우터는 원하는 LSA를 내보내는 동시에, 원격 피어는 아직 수렴하지 않았고 포워딩 부하는 배출되지 않았으며 부착된 서비스는 이미 열화했을 수도 있었다.

이 분리는 권한을 정확하게 배정한다. 발신 라우터는 자기가 광고하는 것을 통제한다. 수신 라우터들은 자기 경로를 어떻게 계산할지 통제한다. 물리적 토폴로지는 대안이 존재하는지를 결정한다. 운영자는 유지보수 결정을 통제한다. 측정은 트래픽이 이동했고 서비스가 살아남았는지를 확정한다. RFC 3137은 하나의 산출물이 전체 결과를 소유한다고 가장하지 않은 채, 이 행위자들을 조율했다.

RFC 3137은 독창성이나 배포, 성공을 주장하지 않았다. 저자들은 명시적으로 독창성 주장을 거부했다. 이 메모가 보존한 것은 내구성 있는 설계적 조치였다. 역할은 철회하되 정체는 철회하지 않는다. 라우터는 그래프에 남아 있었기에 네트워크는 여전히 그에 도달할 수 있었다. 라우터는 남의 도로로 쓰이는 비용을 올렸다. “존재”와 “트랜짓” 사이의 그 좁은 틈에서 OSPF는 더 안전한 변화를 위한 언어를 얻었다.

출처

  1. https://www.rfc-editor.org/rfc/rfc3137.txt
  2. https://www.rfc-editor.org/info/rfc3137
  3. https://datatracker.ietf.org/doc/rfc3137/
  4. https://www.rfc-editor.org/rfc/rfc2328.txt
  5. https://www.rfc-editor.org/rfc/rfc1247.txt
  6. https://www.rfc-editor.org/rfc/rfc1583.txt
  7. https://www.rfc-editor.org/rfc/rfc6987.txt
  8. https://www.rfc-editor.org/info/rfc6987
  9. https://www.rfc-editor.org/rfc/rfc5340.txt
  10. https://www.rfc-editor.org/rfc/rfc3623.txt
  11. https://www.rfc-editor.org/rfc/rfc5817.txt
  12. https://www.rfc-editor.org/rfc/rfc6976.txt