요약

  • RFC 2390의 실습용 프레임 릴레이 예제는 동일한 회로가 국소 A에서는 DLCI 50으로, 국소 B에 도착할 때는 DLCI 70으로 나타나는 모습을 보여 주었는데, 이는 DLCI가 본래 각 인터페이스에 국지적이기 때문이었다.
  • 그 재기록 때문에 도착한 InARP 패킷 안에 담긴 모든 하드웨어 주소 필드는 무효가 되었고, 수신자는 외부 프레임 헤더의 Q.922 주소를 사용해 내부 출발지 하드웨어 필드를 재구성했다.
  • 재구성된 값은 수신자 측에서 국지적인 전달 좌표를 식별한 것일 뿐이다. 이는 상대를 인증하거나, 어떤 동작을 승인하거나, 프로토콜 주소가 사실임을 증명하거나, 종단 간 결과를 확립하지 못했다.

하나의 회로, 두 개의 번호

1998년 9월 RFC 2390에 추가된 작은 도표는 "이미 알려진 하드웨어 주소"에 대한 서술이 숨길 수 있는 것을 드러냈다. 국소 A는 국소 B로 가는 가상 연결을 DLCI 50으로 인식했다. 국소 B는 동일한 연결을 DLCI 70으로 인식했다. 프레임이 네트워크를 통과하는 동안 네트워크는 프레임 릴레이 헤더의 주소를 바꾼 것이다.

모순은 없었다. 두 번호는 서로 다른 국지적 이름 공간에 속했다. RFC 2427은 이 규칙을 직접 서술했다. 가상 회로는 각 프레임 릴레이 인터페이스에서 고유하게 식별되며, 그 데이터 링크 연결 식별자(DLCI)는 통상 엄격하게 국지적 의미만 가진다는 것이었다. DLCI는 전역적으로 안정된 거리 주소라기보다 한 국소 내부의 플랫폼 번호처럼 동작했다. 연결은 유지되면서도 그 가시적 표시가 경계에서 바뀔 수 있었다.

바로 이 좁은 역사적 지점이 RFC 2390을 앞선 RFC 1293과 구별한다. RFC 1293은 이미 Inverse ARP의 핵심 문제를 정의했다. 국소는 설정된 가상 회로의 링크 계층 핸들은 알고 있지만 상대 끝의 프로토콜 주소는 모른다는 것이었다. RFC 2390은 그 메커니즘을 유지했다. 선언된 변경 사항은 소박했다. 더 격식 있는 언어, 패킷 도표, 실습형 7.2절 예제, 보안 절. 그러나 그 예제는 구현상의 어려운 진실을 관찰 가능하게 만들었다. 패킷 내부의 주소는 외부 네트워크가 패킷을 정확히 전달했기 때문에 틀릴 수 있다는 사실이었다.

송신자는 수신자의 좌표를 알 수 없었다

일반 ARP의 패킷 구조에는 송신자 하드웨어 주소, 송신자 프로토콜 주소, 대상 하드웨어 주소, 대상 프로토콜 주소가 들어간다. 이더넷에서는 송신자가 보통 자신의 하드웨어 주소를 넣을 수 있다. 프레임 릴레이의 국지적 DLCI는 그 가정을 흔들었다.

단말국은 모든 관찰자에게 메시지에 기록할 수 있는 하나의 보편적 DLCI를 갖고 있지 않았다. 자신의 인터페이스에서 특정 가상 회로의 송출 번호만 알았고, 상대 인터페이스가 같은 회로에 어떤 번호를 사용할지는 몰랐다. A가 InARP 메시지에 50을 넣었다면, 그 값은 A의 B로의 경로를 표현했지, A로부터 수신하는 트래픽에 대한 B의 국지적 좌표를 표현한 것이 아니었다. B가 프레임을 받았을 때 외부 헤더는 정확히 70이라 했지만, 내부 값은 여전히 잘못된 이름 공간을 반영하고 있었다.

따라서 RFC 2390은 겉보기에 어색한 요청을 기술했다. A는 소스 하드웨어 주소ar$sha를 모르는 상태로 DLCI 50을 향해 InARP 요청을 보냈다. 대상 하드웨어 주소 필드는 국지적으로 알려진 회로를 Q.922 값0x0C21로 인코딩했다. 전달 후 B는 DLCI 70으로 프레임을 받았고, 예제에서 C/R, FECN, BECN, DE 비트를 0으로 취급했을 때 그 두 옥텟 Q.922 값은0x1061이었다.

이 순간 B는 B의 국지적 해석에 중요한 유일한 값을 갖고 있었다. 그것은 메시지 본문에서 온 것이 아니라 전달 봉투에서 온 것이었다.

외부 헤더는 내부 필드 하나를 복구했다

RFC 2390은 단호했다. InARP 메시지가 목적지에 도착했을 때, 메시지 안의 모든 하드웨어 주소는 무효다. 그러나 프레임 릴레이 헤더의 주소는 정확하다. 그리고 수신 인터페이스는 계층 분리의 순수성을 위배하면서까지 그 주소를 송신자 하드웨어 주소로 사용할 수 있다고 명시했다.

이에 따라 B는 요청의 출발지 하드웨어 필드를 재기록했다. 알 수 없던 값은 B의 국지적 DLCI 70에 해당하는 Q.922 형태인0x1061이 되었다. 그 결과 B는 자기 위치에서 의미 있는 송신자 좌표를 갖고 요청을 처리할 수 있었다. 같은 복구가 반대 방향에서도 일어났다. B의 응답은 출발지 하드웨어 필드가 미지인 채로 떠났고, A가 이를 받았을 때 A는 외부 헤더 주소를 추출해 자신의 DLCI 50 국지적 표현인0x0C21을 넣었다.

인터페이스는 수신 패킷에만 개입했다. 이 방향성은 임의적인 구현 세부사항이 아니었다. 송신자는 수신자의 이름 공간이 소유한 사실을 공급할 수 없었다. 네트워크가 도착 측 DLCI를 선택하고 노출한 뒤에야 수신자가 올바른 출발지 값을 재구성할 수 있었다.

대상 하드웨어 필드는 같은 구원을 받지 못했다. RFC 2390은 이 필드가 요청과 응답 모두에서 무효이며 InARP가 그것에 의존하지 않는다고 밝혔다. 구현은 0으로 채우거나 무시할 수 있었다. 이것은 규율 있는 필드 의미론이었다. 관측된 전달에서 국지적 값을 도출할 수 있는 필드는 복구하고, 프로토콜이 필요로 하지 않는 필드에는 의미를 발명하지 않는 것이다.

재구성은 출처 기록이지 인증이 아니었다

이 동작이 확립한 사실은 매우 구체적이다. 이 메시지가 이 인터페이스에 이 국지적으로 의미 있는 Q.922 주소로 도착했다는 것. 이는 낡은 내부 값을 그대로 받아들이는 것보다는 강하다. 그러나 상대가 누구인지 증명하는 것보다는 훨씬 약하다.

RFC 2390은 RFC 1293이 "문제를 다루지 않았다"고 적은 바로 그 지점에 보안 절을 추가했다. 그 절은 ARP 계열 프로토콜에 인증이 없고, 호스트 사칭이 알려진 문제이며, InARP가 새로운 보안 메커니즘을 추가하지 않는다고 적었다. 따라서 외부 좌표를 내부 필드로 복사하는 것은 패킷에 서명하거나, 응답의 프로토콜 주소를 검증하거나, 송신자를 승인하는 일이 아니었다.

이 구별이 중요한 이유는 복구된 필드가 동작 후 깨끗해 보이기 때문이다. 진단 도구는 원래 패킷이 "미지"를 담고 있던 자리에 유효한 Q.922 주소를 보여 줄 수 있다. 깨끗한 표현은 더 강한 인식적 지위로 오해될 수 있다. 그러나 수신자는 국지적 관측에서 그 값을 만든 것이다. 이것은 수신 경로에 대한 출처 기록이지, 원격 국소의 증언이 아니고, 보편적 이름도 아니다.

프로토콜 주소 값은 또 다른 근거 계층에 놓여 있다. 상대는 자신의 프로토콜 주소로 응답할 수 있고, 로컬 소프트웨어는 그 연관을 캐시할 수 있고, 이후 패킷이 그것을 사용할 수 있다. 이 어느 단계도 소급적으로 상대를 인증하지 않는다. 현재 회로 표시는 원격 구성을 증명하지 않는다. 응답은 승인을 증명하지 않는다. 캐시 항목은 지속적 도달 가능성을 증명하지 않는다. 수신 인터페이스까지의 전달은 응용 프로그램까지의 전달을 증명하지 않는다.

계층 분리의 순수성에 대한 유용한 위배

프로토콜 도표는 종종 각 계층이 자기 헤더만 읽고 다음 계층은 건드리지 않는다고 암시한다. RFC 2390은 그 추상화가 성립했다고 가장하지 않은 채 반례를 문서화했다. 하위 계층이 유일하게 유효한 국지적 주소를 보유하고 있었고, 인터페이스는 상위 논리가 소비하기 전에 그 관측을 ARP 형태의 페이로드에 투영했다.

이것은 임의의 계층 간 추론에 대한 허가가 아니었다. 변환은 좁고, 결정적이며, 하위 계층 이름 공간에 의존하는 필드의 의미로 경계가 정해져 있었다. 외부 Q.922 주소가 값을 공급했다. 수신자가 투영을 수행했다. 출발지 필드가 그 값을 받았다. 대상 필드는 무시 가능한 채로 남았다. 보안은 여전히 부재했다.

그 경계는 건전한 레지스트리나 텔레메트리 설계와 닮았다. 기록은 실제로 그 사실을 관측한 계층이 정정할 수 있다. 정정은 출처와 범위를 유지해야 한다. 관측 계층이 알 수 없는 사실에 대한 권위로 승격되어서는 안 된다.

IANA의 현재 ARP 파라미터 레지스트리는 프레임 릴레이를 위한 하드웨어 유형 15와 InARP 요청 및 응답을 위한 동작 코드 8과 9를 보존하고 있다. 이 항목들은 공유되는 번호들이 충돌하지 않게 한다. 그것들은 네트워크가 InARP를 구현한다거나, 특정 교환이 진짜였다거나, 매핑이 성공했다는 뜻이 아니다. 레지스트리는 구문을 조율하고, 실행 중인 인터페이스가 국지적 관측을 공급한다.

도표가 기여한 것

그 RFC의 저자들은 RFC 1293에서의 개정을 사소하다고 불렀다. 역사적으로도 도표는 여전히 결과적이었는데, 네 가지 기록을 분리하도록 강제했기 때문이다.

첫째는 네트워크 관계로서의 회로였다. 둘째는 A의 국지적 표시 50이었다. 셋째는 B의 국지적 표시 70이었다. 넷째는 B가 실제로 수신한 프레임으로부터 재구성한 내부 InARP 필드였다. 이 기록들은 하나의 연결을 지시했지만 서로 호환 가능하지는 않았다.

RFC가 50을 전역 식별자로 다뤘다면, B는 사용 불가능한 좌표를 보존했을 것이다. 70을 이름 있는 상대의 증거로 다뤘다면, 인터페이스가 관측한 것보다 많다고 주장했을 것이다. 대신 RFC는 얇은 규칙을 선택했다. 도착 헤더가 도착을 서술하게 하고, 그 관측을 국지적 프로토콜 엔진이 요구하는 필드로 번역하며, 식별과 신뢰는 다른 메커니즘에 맡기는 것이다.

그래서 패킷 안의 주소는 국지적으로 올바르게 되기 전에 무효여야 했다. 네트워크가 정당한 경계에서 좌표를 바꾼 것이다. RFC 2390은 그 변화를 보편적 식별자 뒤에 숨기지 않았다. 수신자가 실제로 볼 수 있는 계층으로부터 현실을 재구성하는 책임을 수신자에게 부과했다.

출처