요약

  • RFC 3419는 전송 엔드포인트를 '타입이 지정된 쌍'으로 만들었다. 주소 옥텟은 그 계열, 프로토콜, 인코딩을 정의하는TransportDomain또는TransportAddressType과 나란히 놓였을 때에만 의미를 얻는다.
  • 이 문서는 추측 대신 불확실성과 지역성을 보존했다. 길이 0은 알 수 없음을 뜻했고, 스코프가 지정된 IPv6는 존 인덱스를 함께 담았으며, SCTP 값은 원칙적으로 연결의 주(primary) 주소만을 가리켰다.

여섯 바이트가 서로 양립할 수 없는 이야기를 담을 수 있다

관리 테이블에서192.0.2.7뒤에 두 옥텟이 더 이어진 시퀀스를 발견했다고 상상해 보자. IPv4 엔드포인트처럼 보인다. 마지막 두 바이트는 포트일 수도 있다. 그러나 그 값은 전송이 UDP인지, TCP인지, SCTP인지를 말해 주지 않는다. 같은 숫자 주소가 여러 개의 양립할 수 없는 엔드포인트 정체성에 참여할 수 있다. 길이로부터 추측하는 파서는 그럴듯한 라벨을 만들어 내면서, 그 기록이 보존하려던 바로 그 사실을 파괴할 수 있다.

2002년 11월에Textual Conventions for Transport Addresses로 발표된RFC 3419가 다룬 문제가 바로 이것이었다. 이 문서는 IP 주소 지정이나 SNMP 와이어 매핑을 새로 발명하지 않았다. 대신 MIB 저자들에게 주소 값을 그 값을 해석 가능하게 만드는 타입과 함께 유지하는 재사용 가능한 방법을 제공했다. 엔드포인트는 그 쌍이지, 절반만으로 그려진 매력적인 문자열이 아니다.

이 구분은 인터페이스에서는 사라질 만큼 작지만, 감사(audit)를 오염시킬 만큼 중요하다. 주소 바이트는 하나의 '값'이다. 전송 도메인은 그 값을 해독하는 '규칙'이다. 나중에 관찰된 패킷, 성공한 연결, 인증된 피어, 정상 동작하는 서비스는 그 이후의 별개 기록들이다. 어느 하나도 다른 기록을 채워 넣어 보태져서는 안 되며, 같은 표시 필드에 들어맞는다는 이유로 그러해서는 더욱 안 된다.

확장 가능한 식별자와 컴팩트한 열거형

RFC 3419는 타입을 명명하는 두 가지 방식을 제시했다.TransportDomain은 객체 식별자(OID)다. 그 강점은 확장성이다. 다른 도메인에 다른 OID를 부여해도 작은 공유 번호 공간이 소진되지 않는다.TransportAddressType은 열거형이다. 컴팩트하고 편리하지만, 새 값을 추가하려면 열거형 내부에서 조율이 필요하다.

그에 대응하는TransportAddress는 옥텟 문자열이다. 기본 규약은 0부터 255옥텟까지의 길이를 허용한다. 0에는 의도적인 의미가 있다. 주소를 알 수 없다는 뜻이다. 이것은 확실성을 억지로 만들어 내기를 거부하는, 값진 거절이다. 빠진 엔드포인트가0.0.0.0, 빈 호스트명, 또는 로컬 프로그램이 우연히 선호하는 어느 계열로 대체되지 않는다.

그 뒤의 구체적 서브타입들이 바이트를 엄격하게 만든다. IPv4 주소에 포트를 더한 값은 여섯 옥텟을 차지한다. 주소에 네 옥텟, 네트워크 바이트 순서의 포트에 두 옥텟이다. IPv6에 포트를 더한 값은 열여덟 옥텟이다. 따라서 TCP와 UDP는 같은 물리적 레이아웃을 공유하면서도 서로 다른 도메인으로 남을 수 있다. 바이트의 동일성은 엔드포인트 정체성의 동일성이 아니다.

이 표준은 MIB 설계자들에게 모든 전송 주소 객체 옆에 도메인 또는 주소 타입 객체를 함께 두도록 권한다. 그 근접성은 장식적인 스키마 정돈이 아니다. 테이블이 여러 계열이나 여러 전송을 허용할 때 각 행이 스스로를 설명하도록 유지하고, 테이블을 재정의하지 않고 집합을 확장할 수 있게 한다.

IPv6 스코프가 지역성을 눈에 보이게 만들었다

IPv6는 주소를 전역적으로 충분한 것으로 취급하는 비용을 드러냈다. 스코프가 지정된 주소는 특정 링크나 관리 존 안에서만 의미를 가질 수 있다. 둘 이상의 존에 연결된 장치는 여러 곳에서 동일한 주소 값을 만나게 된다. 그래서 RFC 3419는 열여섯 바이트 주소와 두 바이트 포트 뒤에 32비트 존 인덱스를 덧붙이는 스코프가 지정된 IPv6 전송 주소를 정의했다.

존 인덱스는 전역적으로 이식 가능한 이름이 아니다. 그 의미는 그것을 해석하는 시스템에 국한된다. 바로 그 한계가 이 정보를 근거(evidence)에 담아야 하는 이유다. 존을 버리면 서로 다른 로컬 엔드포인트가 충돌하고, 존 인덱스를 전역적인 것처럼 내보내면 또 다른 거짓을 만든다.RFC 4007은 뒤에 IPv6 스코프 주소 아키텍처를 더 자세히 발전시켰고,RFC 4001은 여러 주소 텍스트 규약을 대체했다. 두 개정판을 지나서도 역사적 교훈은 살아 있다. 스코프는 해석의 일부이지, 그 자체로 완전한 주소 곁의 주석이 아니다.

일반 전송이 곧 SNMP 전송이었던 것은 아니다

RFC 3419는 또한 일반적인 전송 도메인과, SNMP가 어떤 전송 위에서 동작한다고 특별히 명시하는 도메인을 구분했다.snmpUDPDomain과 일반적인 IPv4 위의 UDP 도메인은 서로 비슷한 바이트를 가리키면서 다른 질문에 답할 수 있다. 하나는 SNMP 메시지가 어떻게 전달되는지를 말하고, 다른 하나는 다른 관리 목적을 위한 UDP 엔드포인트를 명명할 수 있다.

상호운용성을 위해 특정 맥락에서 두 형식을 모두 받아들여야 할 때도 있지만, 그렇다고 의미의 경계가 지워지지는 않는다. 도메인을 낯익은 이웃으로 바꿔치기하면 '이 MIB가 기록한 엔드포인트'가 근거 없이 'SNMP 엔드포인트'로 변할 수 있다.RFC 3417은 SNMP 전송 매핑을 제공하고, RFC 3419는 재사용 가능한 주소 타입을 제공한다. 두 문서가 나란히 있다는 사실은 그들이 상호 교체 가능하다는 뜻이 아니다.

SCTP가 보여준 것: 하나의 주소가 하나의 연결 전체를 설명할 필요는 없다

SCTP는 익숙한 엔드포인트 그림을 복잡하게 만들었다. 하나의 연결(association)이 멀티호밍될 수 있기 때문이다. RFC 3419의 SCTP 전송 주소 규약은 원칙적으로 주(primary) 주소를 담는다. 엔드포인트에 속한 도달 가능한 모든 주소를 나열한다고 주장하지 않는다.RFC 4960은 뒤에 나온 SCTP 기본 프로토콜을 다루지만, 관리 데이터의 경계는 이미 명확하다. 주 로케이터는 연결의 전체 목록이 아니다.

이 절제가 운영에서 중요하다. 저장된 SCTP 주소 하나를 '모든 경로'로 바꿔버리는 시스템은 페일오버 도달 가능성을 놓칠 수 있고, 토폴로지를 잘못 읽고, 사고를 잘못된 제어 지점에 붙일 수 있다. 주소는 선언된 역할 안에서 유효하다. 오류는 소프트웨어가 그 역할을 조용히 상향하는 순간 시작된다.

텍스트 규약은 연결성 영수증이 아니었다

이 문서가 표준화하는 것은 표현이다. 소켓이 수신 대기 중인지, 패킷이 도달했는지, 피어가 인증되었는지, 서비스가 성공했는지는 증명하지 않는다. 설정된 TCP 엔드포인트와 관찰된 TCP 연결은 관련된 근거이지 같은 사건이 아니다. 길이 0의 '알 수 없음' 값은 장애가 아니다. 문법적으로 유효한 주소는 헬스 체크가 아니다.

바로 여기서 소박해 보이는 이 MIB 모듈이 인터넷 역사의 일부가 된다. 네트워크 관리는 여러 층위의 지식을 편리한 필드 하나로 압축하려는 유혹에 저항하는 법을 배우고 있었다. RFC 3419는 가장 작은 정직한 기록, 즉 '타입 + 값'을 명시적으로 만들었다. 그 이후의 모든 것에는 별도의 영수증이 필요했다.

출처와 한계

1차 기록은RFC Editor HTML,일반 텍스트,RFC Editor 정보 페이지,IETF Datatracker 문서 페이지, 그이력과참고문헌, 그리고RFC Editor 정오표 검색에서 확인할 수 있다.

SMI 및 적합성 배경은RFC 2578,RFC 2579,RFC 2580과RFC 3410의 SNMP 프레임워크 개관에서 온다. 전송과 주소 맥락은RFC 3417, 그 전신 규약인RFC 3291, 후속 규약RFC 4001, IPv6 스코프의RFC 4007, URI 문법의RFC 2396, SCTP의RFC 4960, 그리고IANA SMI Numbers 레지스트리에서 온다. 분석의 관점은 Lu Heng의실행 코드 우선에세이와최소 초기 명세에세이를 통해 실행 근거와 문서적 권위를 구분한다.

이 출처들은 정의와 문서적 계보를 확립한다. 그러나 구현 보급률, 현재 엔드포인트 도달 가능성, 벤더 행동, 타입이 지정되지 않은 주소 저장이 야기하는 운영 오류율은 측정하지 않는다.