요약

  • 20비트 IPv6 플로 레이블은 포트가 숨겨져 있거나, 조각화되어 있거나, 찾아내는 데 비용이 클 때도 라우터와 로드 밸런서가 패킷을 하나의 플로로 다룰 수 있도록 고정된 위치의 입력을 제공합니다.
  • 그 가치는 엄격한 조합에 달려 있습니다. 플로 내에서는 하나의 안정적인 0이 아닌 값을 유지하고, 플로 간에는 폭넓게 분산된 값을 사용하며, 전송 중 레이블 변경을 자제하고, 분류 시 레이블만으로는 절대 판단하지 않는 것입니다.
  • RFC 6437은 RFC 3697의 상태 중심적 모델에서 벗어난 설계로 전환했으며, 이후 RFC 6438과 RFC 7098은 터널과 서버 팜에서의 제한적인 활용 방식을 기술했습니다.

식별자가 아니라 다루는 손잡이

플로 레이블은 IPv6 고정 헤더의 20비트를 차지합니다. 값이 0이라는 것은 그저 이 패킷에 레이블이 부여되지 않았다는 의미일 뿐입니다. 분류기는 0이 아닌 레이블을 출발지·목적지 주소와 결합해 세 필드 키를 만들 수 있으며, 이 키는 확장 헤더나 암호화된 전송 계층 자료를 탐색하기 전에도 언제나 사용할 수 있습니다.

이 소박한 정의가 첫 번째 중요한 경계입니다. IPv6 플로가 전송 연결과 반드시 일치하는 것은 아닙니다. 레이블은 애플리케이션, 사용자 또는 세션의 이름이 아니며, 누가 그것을 설정했는지에 대한 증명도 지니지 않습니다. 그럼에도 RFC 6437은 서로 관련 없는 전송 연결이나 애플리케이션 스트림을 보통 서로 다른 플로에 배치할 것을 권장합니다. 따라서 이 필드는 일관된 패킷 처리가 의미를 부여하는 분류용 손잡이이지, 애플리케이션 의미론의 선언이 아닙니다.

출발지에서는 하나의 플로에 속한 모든 패킷이 동일한 0이 아닌 레이블을 받아야 합니다. 플로 간 값들은 이산 균등 분포에 가깝고 예측하기 어려워야 합니다. 출발지는 최소한의 상태만 유지하면서 5-튜플을 20비트로 해시하거나 의사 난수 값을 할당할 수 있지만, 이것들은 예시일 뿐 특정 알고리즘을 강제하는 것은 아닙니다. 순차적 할당은 분포가 고르지 않고 예측하기 쉬워 권장되지 않습니다.

20비트만으로는 레이블이 고유해지지 않습니다. 동일한 출발지와 목적지를 공유하는 두 개의 동시 플로가 충돌할 수 있습니다. 이 경우 레이블 기반 장치는 두 플로를 구분할 수 없으며, 둘 모두 동일한 레이블 기반 처리를 받게 됩니다. 설계는 이 결과를 수용합니다. 이 설계는 전역적으로 고유한 플로 식별자가 아니라 유용한 분포와 어피니티를 추구합니다.

고정된 위치가 중요했던 이유

전통적인 부하 분산은 흔히 전송 계층 포트를 해시합니다. 그러나 IPv6에서는 중간 장치 입장에서 이 입력이 덜 의존적이게 됩니다. 포트는 비초기 조각에는 없을 수 있고, 암호화로 가려질 수 있으며, 확장 헤더 체인을 따라가야만 찾을 수 있습니다. 플로 레이블은 항상 IPv6 헤더의 알려진 위치에 있습니다. 이는 포트를 드러내는 것이 아니라, 포트를 찾지 않고도 장치가 사용할 수 있는 다른 자료를 제공합니다.

RFC 6438은 이 성질을 IP-in-IPv6 터널에 적용합니다. 모든 패킷이 동일한 외부 주소를 지닌다면, 그 주소만 기반으로 하는 ECMP 또는 링크 애그리게이션 해시는 트래픽을 한 경로로 몰아넣을 수 있습니다. 대신 송신 터널 종단점은 내부 2-튜플 또는 5-튜플에서 외부 플로 레이블을 도출하고, 해당 내부 플로에 대해 레이블을 일정하게 유지하면서 서로 다른 내부 플로가 가용 경로에 분산되도록 할 수 있습니다. 간혹 발생하는 충돌은 여전히 수용 가능합니다. 두 사용자 플로가 하나의 경로 처리를 공유하더라도 같은 플로가 되는 것은 아닙니다.

RFC 7098은 같은 아이디어를 계층 3/4 서버 로드 밸런싱으로 확장합니다. 장치는 출발지 주소와 플로 레이블, 혹은 목적지 주소, 출발지 주소, 플로 레이블의 조합을 세션 키로 사용할 수 있습니다. 스테이트리스 밸런서는 이 키를 해시해 한 플로의 패킷이 한 서버로 돌아가도록 할 수 있고, 스테이트풀 밸런서는 키-서버 연관을 기억할 수 있습니다. 레이블이 0인 패킷은 기존의 전송 헤더 처리 방식으로 계속 진행됩니다.

상태가 있다고 모호성이 사라지지는 않습니다. 주소가 동일한 상태에서 출발지가 새 전송 세션에 같은 레이블을 재사용하면, 스테이트풀 밸런서는 그 키만으로 새 세션을 구분할 수 없습니다. 레이블은 명시된 한계 안에서만 분류를 보존합니다.

재설계와 절제

RFC 6437은 RFC 3697의 이전 모델을 대체하면서 0이 아닌 레이블, 스테이트리스 출발지 동작, 균등하게 분산된 값을 권장했습니다. 0이 아닌 레이블은 변경되지 않은 채 도착해야 한다는 규칙은 그대로 유지했습니다. 포워더는 출발지를 대신해 0인 레이블을 채울 수 있지만, 그 기능은 반드시 구성 가능하고 기본값은 비활성이어야 하며, 출발지의 자체 할당이 여전히 선호됩니다.

이 역사가 의미 있는 이유는, 이 필드가 네트워크에 요구하는 바를 줄이면서 더 유용해졌기 때문입니다. 라우터는 애플리케이션 상태를 학습하거나 레이블의 숨겨진 의미를 해석할 필요가 없었습니다. 출발지가 안정적이고 분산된 입력을 제공했고, 포워딩 장치는 그것을 해시의 한 구성 요소로 사용했습니다. 이것은 RFC 메커니즘에 대한 편집적 해석이며, 모든 IPv6 배포가 그에 따른다고 주장하는 것이 아닙니다.

이번 패키지의 자료에는 현재 배포 현황 조사, 벤더 벤치마크, 성능 측정이 포함되어 있지 않습니다. 이 자료들은 프로토콜 모델과 가능한 활용 방식을 확립할 뿐, 오늘날 운영자가 그것을 얼마나 자주 활성화하는지는 다루지 않습니다.

출처