요약

  • 동일 비용 멀티패스는 라우터에게 여러 개의 수용 가능한 다음 홉을 제공할 뿐, 그 경로들의 MTU, 지연, 순서, 멀티캐스트 역할이 서로 교환 가능하다는 것을 보증하지 않는다.
  • RFC 2991은 플로우를 한 경로에 유지하고 다음 홉이 바뀔 때 재할당을 제한하는 방식들을 비교했다. 각 알고리즘은 혼란과 계산량 사이의 균형을 서로 다르게 매겼다.

트레이서우트는 한 경로를 보여줄 수 있다. 그러나 그것만으로 라우터가 어떤 경로들을 후보로 고려했는지, 다른 플로우들을 어떻게 할당했는지 알려주지는 못한다. 이 간극이 중요한 이유는, 라우팅 테이블의 "동일(equal)"이라는 말이 경로 비용에 대한 서술일 뿐 패킷이 동일한 조건을 경험할 것이라는 약속이 아니기 때문이다.

2000년 11월, Dave Thaler와 Christian Hopps는 멀티패스 포워딩에 대한 정보성(Informational) 문서인RFC 2991을 발표했다. OSPF와 IS-IS는 동일 비용 멀티패스(ECMP)를 명시적으로 허용했고, 일부 라우터 구현은 RIP 등 다른 프로토콜에서도 이를 사용했다. 하나의 목적지에 여러 다음 홉이 모두 유효할 때도, 포워딩 엔진은 각 패킷에 대해 하나를 선택해야 했다.

단순한 해법 — 순서대로 돌아가며 쓰거나 무작위로 고르는 것 — 은 하나의 대화가 서로 다른 최대 전송 단위(MTU)와 지연을 지닌 경로를 오가게 만들 수 있었다. 그러면 경로 MTU 탐색은 패킷마다 움직이는 표적을 상대하게 된다. 도착 시점이 달라지면 TCP 스트림에서 순서가 뒤바뀌고 버퍼링 압력이 생기며, 나중에 도착한 패킷이 수신자에게 손실처럼 보일 수 있다. Ping과 트레이서우트는 서로 다른 분기를 관찰해 경로에 대해 오해를 일으키는 그림을 줄 수도 있다. 멀티캐스트는 더 강한 제약을 만들었다. 논의된 프로토콜들은 송신원, 코어 또는 랑데부 포인트를 향해 단일 트리를 구성하며, 루프와 중복을 막기 위해 하나의 상위 다음 홉에 의존했다. "패킷을 흩어 보내는 것"은 중립적인 포워딩 정책이 아니었다.

이에 RFC 2991은 할당의 단위를 플로우 — 라우터가 상태를 유지하는 트래픽 단위, 있다면 — 로 삼았다. 그것이RFC 2474에서 정의된 다섯 필드 마이크로플로우일 필요는 없었다. 라우터는 목적지만으로 키를 잡거나, 송신원·목적지·프로토콜 조합으로 키를 잡을 수도 있었다. 초기 이후 조각(non-initial fragment)에서는 포트를 사용할 수 없고, 전송 계층 필드를 활용하면 MTU 같은 경로 정보에 대한 캐시 재사용이 깨질 수도 있었다. 그 경계는 "플로우"라는 단어 속에 숨겨진 보편적 정의가 아니라 운영상의 결과를 지닌 구현 결정이었다.

플로우에 속한 패킷이 함께 유지되는 순간, 두 가지 요구가 경쟁한다. 선택 규칙은 실행 비용이 충분히 낮아야 하고, 다음 홉이 추가되거나 사라질 때 가능한 한 적은 수의 활성 플로우가 영향을 받아야 한다. ECMP는 포워딩에 직접 영향을 줄 수 있는 경로의 수를 늘리기 때문에, 선호하는 메트릭이 변하지 않았더라도 경로 멤버십의 변동은 트래픽을 재순서화나 손실에 노출시킬 수 있다. 설계 질문은 이렇게 바뀐다. 후보 집합이 바뀔 때 기존 할당 중 어느 만큼을 옮겨야 하는가?

모듈로-N 해싱은 저렴했다. 플로우를 해싱하고 그 결과를 다음 홉 수로 나눈 나머지를 취하면 된다. 그러나 그 수가 바뀌면 RFC 2991에 따라(N-1)/N비율의 플로우가 경로를 바꾼다. 해시-임계값 방식은 해시 공간을 다음 홉 영역으로 나눈다. 영역 경계가 바뀌면 경계 근처의 플로우가 영향을 받는데, RFC는 멤버가 추가되거나 제거될 때 플로우의 4분의 1에서 2분의 1 사이가 이동한다고 추정한다.RFC 2992가 이 알고리즘의 혼란을 분석했다. 최고 난수 가중치(HRW) 방식은 플로우를 각 후보 다음 홉과 함께 해싱해 가장 큰 결과를 고른다. 이는 단일 멤버 변화를 약1/N비율의 플로우로 제한하되, 모듈로-N 대비 약 N배의 계산을 요구한다.

이 수치들은 알고리즘 모델에 대한 서술이며, 실제 배치된 라우터의 측정값이 아니다. 또한 "4분의 1"이 바이트, 패킷, 고객 또는 서비스 영향의 4분의 1을 의미하는 것도 아니다. 그 메트릭은 명시된 가정 하에 재할당된 플로우의 비율이다. 소수의 대형 플로우가 많은 수의 짧은 플로우와 전혀 다른 트래픽 점유율을 가질 수 있다.

상태를 어디에 두는가에 따라 비용이 어디에서 지불되는지가 달라진다. 라우터가 이미 플로우별 상태를 유지하고 있다면, 패킷마다 선택을 다시 계산하는 대신 상태 생성 시점에 다음 홉을 고를 수 있다. RFC 2991은 상태를 유지하는 유니캐스트와, 송신원/그룹 상태를 유지하는 멀티캐스트 포워딩에는 HRW를 권했다. 유니캐스트 포워딩에서 플로우별 상태가 없어 패킷 도착 시 계산해야 하는 경우에는, CPU가 안정성보다 귀하다면 해시-임계값 방식을 권했다. 이 권고는 아키텍처에 따라 조건부이며, 단일한 보편적 승자를 지목한 것이 아니다.

이후의 기록은 이 트레이드오프를 보존하고 있을 뿐, 보편적 채택의 증거는 아니다. 2011년RFC 6438은 ECMP와 링크 애그리게이션을 경로 점유율의 균형, 플로우별 재순서화 회피, 링크 유휴 방지 — 서로 충돌할 수 있는 목표들 — 로 묘사했다. 이는 그 공학적 타협이 지속되었다는 유용한 증거다. 그러나 모든 라우터가 RFC 2991을 따랐거나 그 정확한 알고리즘을 사용했다는 것을 보여주지는 않는다.

역사적 교훈은 "로드 밸런싱은 어렵다"라는 말보다 더 좁고, 더 유용하다. 라우팅 메트릭은 후보를 분류한다. 로컬 선택자는 플로우를 할당한다. 물리 경로는 실제 MTU와 지연을 제공하고, 전송 계층 종단은 도착하는 것에 반응한다. 어느 계층도 다른 계층을 대신할 수 없다. RFC 2991은 숨겨진 정책을 읽을 수 있게 만들었다. 안정성은 공짜가 아니지만, 재매핑도 공짜가 아니다. 동일 비용이라는 라벨이 네트워크가 어떤 비용을 감당할지를 결정할 수는 없다.

출처