요약

  • RFC 3344는 모바일 IPv4 등록 요청(Registration Request)에서S비트를 설정하여, 홈 에이전트가 이전 이동성 바인딩을 유지하면서 새 케어오브 주소(care-of address)를 수락하도록 요청할 수 있게 했다.
  • 홈 에이전트가 이 옵션을 지원하면 도착하는 데이터그램마다 활성 케어오브 주소 전체에 사본을 전송했다. 따라서 새 등록이 성공했다고 해서 배타적인 단일 현재 경로가 입증되거나 기존 경로가 은퇴했다는 것을 의미하지 않았다.

바인딩 테이블은 한 줄로 상상하기 쉽다: 홈 주소, 현재 케어오브 주소, 만료 시점. RFC 3344는 이러한 정신 모델을 안전하지 않게 만들었다. 같은 홈 주소에 대해 여러 개의 살아 있는 행이 테이블에 존재할 수 있었다. 각 행은 독립적으로 노화되었고, 전달 동작은 그중 선택이 아니었다. 홈 에이전트는 모든 행으로 트래픽을 복제했다.

이것은 사양이 모호하게 남겨둔 우연한 경합이 아니었다. 등록 요청에는 동시 바인딩을 위한 명시적인S비트가 있었다. 모바일 노드는 홈 에이전트가 이전 이동성 바인딩을 보존하기를 원할 때 이 비트를 설정했다. 비트가 없으면 새 바인딩이 기존 집합을 대체했다. 비트가 설정되고 홈 에이전트가 이를 지원하면 기존 항목은 유지되었다.

하나의 주소가 하나의 터널 종단을 의미하지 않았다

모바일 IPv4는 안정적인 홈 주소와, 노드가 외부에 있는 동안 터널 종단으로 사용되는 케어오브 주소를 분리했다. 케어오브 주소는 트래픽을 역캡슐화하는 외래 에이전트(foreign agent)에 속할 수도 있고, 모바일 노드 자체에 공존(co-located)할 수도 있었다. 등록은 홈 주소를 허가된 수명 동안 케어오브 주소와 연관시켰다.

이 연관은 전달 지시지이지, 지리적 증명서가 아니었다. 그것은 어떤 사람이 어디에 서 있는지, 무선 링크가 여전히 건강한지, 외래 에이전트가 여전히 일치하는 방문자 상태를 갖고 있는지, 애플리케이션이 바이트를 받았는지를 확립하지 않았다. 인증은 등록 교환을 보호했지만 저장된 주소의 의미를 확대하지 않았다.

S비트는 이 지시의 카디널리티를 바꿨다. RFC 3344는 하나 이상의 외래 에이전트의 무선 범위 안에 있는 노드를 예상했다. 동시 바인딩이 허용되면 단일 홈 정체성이 여러 개의 등록된 종단으로 분기될 수 있었다. 홈 에이전트는 홈 주소로 향하는 데이터그램을 가로채, 각 케어오브 주소마다 별도 사본을 캡슐화하여 모두 전송했다. 중복 도착은 이 설계가 명시한 결과였으며, IP가 데이터그램 중복을 허용한다는 점과 일치했다.

두 성공 코드는 서로 다른 이야기를 담고 있었다

등록 응답(Registration Reply)은 “수락됨”이 하나의 결과로 단순화되는 것을 막았다. 코드 0은 등록이 수락되었음을 의미했다. 코드 1도 등록이 수락되었음을 의미하지만, 동시 이동성 바인딩은 지원되지 않는다는 뜻이었다. IANA의 현재 모바일 IPv4 레지스트리는 여전히 이 두 가지 성공적 의미를 보존하고 있다.

보존을 요청한 노드에게 코드 0은 기존 항목과 새 항목의 공존을 허용했다. 코드 1은 요청된 동시 바인딩 기능 없이 새 등록이 성공했음을 말했다. 어느 코드도 이후 특정 터널이 작동했다는 것을 증명하지 않았다. 세 번째 결과인 코드 135는 홈 에이전트가 이미 너무 많은 동시 바인딩을 보유하고 있다는 이유로 요청을 거부했다. 기능, 허용, 전달은 서로 다른 결정으로 남아 있었다.

이 구분은 로그에서 중요하다. 모든 0과 1을 동일한 녹색 “등록됨” 상태로 변환하는 대시보드는 이후 중복이나 공백을 해석하는 데 필요한 사실을 잃는다. 반대로 두 사본을 보는 것만으로는 네트워크에 리플레이를 비난할 수 없다. 운영자는 먼저 수락된S요청, 응답 코드, 바인딩 목록, 각 항목의 수명을 알아야 한다.

항목들은 한 번에 하나씩 죽었다

RFC 3344는 세 가지 삭제 범위를 정의했다. 홈 주소와 함께 수명 0이면 모든 이동성 바인딩이 제거되고 이동성 서비스가 종료되었다. 특정 홈 이외의 케어오브 주소를 지명하며 수명 0을 보내면 해당 행만 삭제되었다. 나머지 활성 행은 유지되었다. 0이 아닌 등록은 요청된 주소를 추가했으며, 기존 항목은S가 설정되고 지원될 때만 생존했다.

만료도 같은 집합 논리를 따랐다. 한 바인딩의 수명이 다하면 홈 에이전트는 그 바인딩을 삭제했지만 만료되지 않은 다른 동시 바인딩은 유지해야 했다. 시간이 만료되었다는 이유만으로 등록 응답을 보내지는 않았다. 외래 에이전트의 방문자 목록 항목은 자연스럽게 노화될 수 있었다. 따라서 새 응답이 없다는 것은 모든 경로가 끝났다는 증거가 아니었고, 한 행의 삭제가 완전한 접근 불능의 증거가 아니었던 것과 마찬가지였다.

재전송조차도 경계가 있었다. 현재 등록 요청의 중복은 수명을 원래 허가를 넘어 연장할 수 없었다. Identification 필드는 요청을 응답과 대조하고 리플레이를 방지하는 데 도움을 주었지만, 재전송을 새 임대로 바꾸지는 않았다.

이후 프로토콜들은 복수성을 더 명시적으로 만들었다

RFC 3344는 2002년 8월에 발행되어, RFC 2002로 시작된 계보에서 RFC 3220을 대체했다. 2010년 RFC 5944가 이를 대체하며 여러 등록을 유지하고 각 활성 케어오브 주소로 사본을 전송하는 능력을 그대로 유지했다. RFC Editor는 RFC 3344에 대해 보류 중인 편집 정오표 하나와 기각된 기술 정오표 하나를 나열하며, 어느 쪽도 이 메커니즘을 바꾸지 않는다.

다른 이동성 작업들은 여러 경로를 명명하고 제어하기 쉽게 만들었다. 모바일 IPv6 RFC 3775는 기본(primary) 케어오브 주소를 구분하고, 부드러운 핸드오버를 위해 이전 기본 주소가 일시적으로 남아 있는 것을 허용했다. RFC 5648은 독립적으로 관리되는 여러 IPv6 케어오브 주소를 위한 바인딩 식별자(Binding Identifier)를 추가했다. 실험적 RFC 7629는 이후 모바일 IPv4에 명시적인 바인딩 식별자, 여러 터널, 흐름별 정책을 부여했다.

이러한 진화는 기존S비트가 증명하지 않았던 것을 드러낸다. RFC 3344의 동시 모드는 경로 선택, 부하 분산, 건강 상태 판단이 아니라 일괄 복제였다. 살아 있는 기존 항목은 유용한 중복일 수도, 낭비되는 대역폭일 수도, 블랙홀일 수도 있었고, 등록 기록만으로는 어느 쪽인지 결정할 수 없었다.

오래된 역사적 교훈은 집합 형태의 제어에는 집합 형태의 장부를 유지하라는 것이다. 요청된 보존, 응답 기능, 수락된 주소, 개별 만료, 터널 사본, 관측된 전달을 각각 별도로 기록하라. 가장 새로운 주소가 자동으로 유일한 주소는 아니며, 두 경로에서 동일한 페이로드가 관측된다고 자동으로 고장인 것도 아니다.

출처