요약

  • RFC 3966은 단순 문자 비교를 넘어선 동등성을 정의했다. 비교는 표시용 구분자와 대소문자를 무시하고 파라미터를 이름으로 매칭했지만, 글로벌/로컬 형식, 로컬 컨텍스트, 모든 파라미터 이름은 여전히 중요했다.
  • 동등한telURI 쌍은 범위가 한정된 식별자 판정에 불과했다. 한 사람, 물리적 단말, 현재 배정 상태, 경로, 동의, 사람이 응답했는지, 서비스가 전달되었는지를 입증하지 않았다.

전화번호는 평범하지 않게 인간적인 식별자다. 사람들은 기억을 위해 자릿수를 묶고, 가독성을 위해 문장 부호를 넣고, 같은 목적지를 여러 표기 형식으로 쓴다. 반면 소프트웨어는 안정적인 키를 원한다. 2004년 12월에 발표된RFC 3966은telURI의 문법과 단순 문자 동일성이 아닌 비교 관계를 모두 정의함으로써 이 긴장을 해소했다.

이 URI는 전화번호로 식별되는 자원의 이름이었다. 특정 단말이 외부 회선을 어떻게 점유할지, 톤 신호냐 펄스 신호냐를 선택할지, 국제 접속 접두사를 추가할지, 통화 진행 톤을 해석할지, 다이얼 후 자릿수를 보낼지는 지정하지 않았다. 이들은 로컬 구성에 따르는 다이얼 동작이었다. 또한 URI는 하나의 물리적 장치를 식별하지도 않았다. 하나의 번호는 고정, 이동, 유동 종착점을 가리킬 수 있고 음성, 데이터, 팩스 또는 다른 서비스를 지원할 수 있었다.

이 구분은RFC 2806으로부터 더 선명해졌다. RFC 3966은 캐리어 선택, 다이얼 컨텍스트 동작, 팩스 및 모뎀 URI 형식, 일시정지 문자, 다이얼 후 문자열을tel스킴에서 제거했다. 식별자는 남았고 지시 사항은 밖으로 옮겨졌다.RFC 3601은 동작을 담은 전화 문자열의 인접한 역사로 남아 있다. 여기서 다루는 동등성 메커니즘은 아니다.

동등성은 의도적인 잊음을 필요로 했다

두 글로벌 번호 URI — 또는 두 로컬 번호 URI — 는 보이는 문자열이 달라도 동등하다고 판정될 수 있었다. 비교자는 번호 자릿수에서 표시용 구분자인,.,(,)를 제거했다. 비교는 대소문자를 구분하지 않았다. 파라미터는 등장 순서와 무관하게 이름으로 매칭됐다.

이는 모든 것을 정규화해도 된다는 허가가 아니었다. 하나의 글로벌 URI와 하나의 로컬 URI는 운영자가 둘 다 같은 목적지에 도달할 수 있다고 믿더라도 RFC 알고리즘상 동등하지 않았다. 한 URI에 다른 쪽에 없는 파라미터 이름이 있으면 그 쌍은 동등하지 않았다. 로컬 번호의phone-context는 식별에 참여했다. 내선 번호도 참여했다. 필수 추가 파라미터도 참여했다.

결과는 선택적인 지우개였다. 표시용 문장 부호와 대소문자는 사라질 수 있었지만 범위와 의미는 사라질 수 없었다. 원시 문자열을 비교하는 시스템은 거짓 차이를 만들고, 모든 파라미터를 제거하는 시스템은 거짓 동일성을 만들었다.

URI 문법은 선호되는 직렬화 순서를 정했다. 존재하면isub또는ext가 먼저 오고, 그다음phone-context, 이후 다른 파라미터가 사전순으로 온다. 이는 여전히 문자를 비교하는 주변 시스템에 도움이 되었다. 그러나 RFC 3966의 의미 규칙은 수신 순서와 무관하게 파라미터를 이름으로 매칭했다. 정규 출력과 올바른 비교는 서로 관련된 통제이지 같은 통제가 아니었다.

RFC 3986은 나중에 일반 URI 프레임워크를 제공했고,RFC 3261은 SIP 안에서 전화 가입자 문법을 사용하며 문자 민감 처리가 중요한 맥락을 드러냈다. 따라서 견고한 구현은 원본 문자열을 보존하고, 구조화된 형식으로 파싱하고, 정규화 단계마다 기록하며, 정규 형식을 저장하되 그 정규 직렬화가 원본 증거라고 주장하지 않아야 한다.

컨텍스트는 로컬 번호를 고유하게 만들되 경로로 바뀌지는 않았다

RFC 3966은 글로벌 형식을 선호했다. 일부 식별자 — 사설 PBX 내선, 긴급 코드 및 기타 로컬 서비스 번호 — 는 글로벌하게 표현될 수 없었다. 따라서 로컬 번호에는 유효한 글로벌 번호의 관리 도메인 이름 또는 선행 자릿수로 표현되는phone-context가 필요했다.

컨텍스트와 로컬 자릿수는 함께 전 세계적으로 고유한 식별자를 이루도록 의도되었다. 그러나 컨텍스트는 로컬 번호와 이어 붙이는 접두사가 아니었다.phone-context=+1과 함께 있는911은+1-911이 되지 않았다. 도메인 컨텍스트는 호스트로 해석될 필요조차 없었다. 그 번호 매기기 컨텍스트를 관리하는 주체의 행정적 통제 아래에 있기만 하면 되었다.

이 때문에 동등성은 라우팅보다 좁다. 두 로컬 URI는 자릿수와 컨텍스트가 일치하면 동등하다고 판정될 수 있다. 그렇다고 두 사이트가 같은 다이얼 플랜을 공유한다거나, DNS가 게이트웨이를 제공한다거나, 번호가 여전히 배정되어 있다거나, 발신자가 그 컨텍스트를 사용할 권한이 있다는 뜻은 아니다. RFC 자체도 글로벌 번호조차 특정 위치에서 낡았거나 도달 불가능할 수 있다고 언급했다.

URI를 식별자로만 쓰는 수신자는 컨텍스트를 불투명하게 다룰 수 있었다. 실제로 통화를 걸려는 수신자는 컨텍스트를 이해하고 그 안에서 동작할 수 있어야 했다. 같은 문자열이 따라서 증거 요건이 다른 두 가지 판단을 지원했다. 자원을 식별하는 것과, 그 자원에 도달하려 시도하는 것이다.

파라미터 집합이 일치해도 사용 불가능할 수 있었다

ext는 비ISDN PBX 뒤의 스테이션을 식별했고,isub는 ISDN 서브어드레스를 식별했다. 둘은 하나의 URI에 공존할 수 없었다.RFC 4715는 나중에 ISDN 서브어드레스 인코딩을 다듬었다.RFC 4694,RFC 4759,RFC 4904는 번호 포터빌리티, ENUM 딥, 트렁크 그룹 파라미터의 역사를 더했다.

RFC 3966은 또한 미래의 필수 파라미터를 위해m-를 예약했다. 알 수 없는 필수 파라미터를 만난 구현은 URI를 사용하는 것을 거부해야 했다. 선택적 파라미터는 무시할 수 있었다. 이는 중요한 2단계 판단을 만들었다. 두 URI가 같은 알 수 없는m-파라미터를 담고 구조화된 식별자로 일치하더라도, 그 파라미터를 이해하지 못하는 수신자는 어느 쪽에도 실행 권한이 없었다.

RFC 5341은 나중에 tel URI 파라미터 레지스트리 절차를 만들었고, 현재의IANA tel URI 파라미터 레지스트리가 조율된 어휘를 기록한다. 등록은 이름을 찾을 수 있게 만들 뿐이다. 값이 최신인지, 수신자가 지원하는지, 발신자가 그 값을 주장할 권한이 있는지를 증명하지 않는다. 동등성, 유효성, 역량, 권한은 하나의 불리언으로 합쳐져서는 안 된다.

하나의 자원이 하나의 사람이나 장치를 뜻하지는 않았다

용어는 신중했다.telURI는 번호로 식별되는 자원의 이름이었다. 통화 설정 중에 같은 URI가 여러 다른 URI로 변환될 수 있었다. 시그널링은 서비스 유형을 협상할 수 있었다. 하나의 종착점이 여러 식별자를 가질 수 있었고, 하나의 번호가 하나의 물리적 장기나 한 사람을 선택할 필요는 없었다.

RFC 6116은 나중에 E.164 번호에서 서비스와 URI로의 ENUM 해석을 기술했다. 그 해석은 또 하나의 영수증을 추가한다. 어느 시점에 어떤 레코드가 반환되었는가. 그것은 소급하여 RFC 3966의 동등성을 결국 응답한 엔드포인트에 대한 주장으로 바꾸지 않는다.

보안 고려사항도 이 분리를 강화했다. 웹 클라이언트는 사용자의 명시적 동의 없이tel링크로 통화를 걸 수 없었다. 통화는 비용을 발생시키고, 회선을 점유하고, 발신자 정보를 노출하거나 악의적일 수 있었다. 표시 링크 텍스트가 한 번호를 보여 주면서 다른 번호를 겨냥하는 일조차 가능했다. 파싱된 두 대상의 동등성은 어느 쪽 표시가 정직했는지, 사용자가 그 동작을 승인했는지에 대해 아무 말도 하지 않는다.

유지되는 문서 기록 —RFC Editor 정보 페이지,정오표 검색,IETF Datatracker 항목— 은 명세의 상태와 보고된 수정을 확정한다. 배포율, 충돌 사건, 통화 결과는 제공하지 않는다.

따라서 감사 가능한 구현에는 정규 URI 열 하나로는 부족하다. 원본 옥텟과 표시 텍스트, 파싱된 로컬/글로벌 형식, 구분자 제거 전후의 자릿수, 대소문자 변환, 파라미터 멀티셋과 수신 순서, 정규 순서, 컨텍스트 유형과 소유자, 내선 또는 서브어드레스, 필수 파라미터 인식과 파서 버전, 동등성 규칙과 결과를 보존해야 한다. 그다음 배정 최신성, 다이얼 플랜 변환, 시그널링 대상, 선택된 경로, 동의, 엔드포인트 응답, 사람의 응답, 서비스, 비용을 별도로 기록해야 한다.

RFC 3966은 식별자 계약이 외관적이라고 선언한 것만 잊음으로써 비교를 유용하게 만들었다. 그 더 깊은 교훈은 대칭적이다. 계약이 관찰하지 않은 것은 "같다"라는 단어에 몰래 끼워 넣어서는 안 된다.

출처