요약
- RFC 1227은 로컬 사용자 프로세스가 하나의 네트워크 가시 SNMP 에이전트 뒤에서 MIB 서브트리를 등록할 수 있게 했다. 에이전트가 요청을 분할하고, 피어를 선택하고, 응답을 재결합했다.
- 우선순위와 “서브트리 마운트 효과”가 어느 피어를 조회할지 결정했다. 따라서 보이는 값은 내구성 있는 소유권, 완전성 또는 진실이 아니라 로컬 라우팅 결정을 반영했다.
- 멀티 피어 Set 연산은 수락/거부 라운드 뒤에 응답 확인이 없는 커밋 또는 롤백 메시지를 사용했다. 진행에 동의한 것 자체가 모든 프로세스가 결과를 적용했다는 증거는 아니었다.
하나의 주소 뒤에 숨은 로컬 교환기
1991년 5월에 발표된RFC 1227은 초기 네트워크 관리에 대한 곤란한 사실을 다루었다. SNMP 에이전트는 커널 변수와 안정적인 파일을 읽을 수 있었지만, 라우팅 데몬이나 다른 사용자 프로세스는 에이전트가 소유하지 않은 정보를 보유하고 있었다. 모든 서비스의 상태를 하나의 프로세스로 복사하면 에이전트가 창고가 될 수밖에 없었다. SMUX는 대신 에이전트를 중개자로 만들었다.
사용자 프로세스는 SMUX 피어가 되었다. 이는 로컬 SNMP 에이전트에 연결을 열고 하나 이상의 MIB 서브트리를 등록했으며, 이후 해당 객체에 관한 관리 연산을 수신하였다. 네트워크 관리 스테이션은 하나의 에이전트와 SNMP로 계속 통신했다. 그 종단점 뒤에서, 에이전트는 등록된 서브트리별로 변수를 분리하고 피어별 요청을 보내고, 응답을 상호 연관시키고, 외부 응답을 구성했다.
RFC Editor 기록은 현재 이 메모를 Historic으로 분류하고 있으며,Datatracker 기록은 그 실험적(Experimental) 기원을 보존하고 있다. 어느 기록도 특정 호스트가 SMUX를 사용했다는 증거가 아니다. 이 문서의 역사적 가치는 구성 규칙에 있다. 하나의 관리상 발화를 여러 로컬 프로세스로부터 조립하면서, 그 내부 경로를 원격 관리자에게 노출하지 않는 것이었다.
가져온SNMP 사양은 익숙한 Get, GetNext, Set, response 및 trap 형식을 제공했다.SMI는 객체 이름을 제공했고,간결 MIB 규약은 에이전트가 피어와 마운트된 트리를 기술하는 테이블의 형태를 결정했다. SMUX는 그 공용 어휘를 대체하지 않았다. 그 아래에 위임 계층을 삽입했다.
등록은 권리증이 아니라 라우팅 결정이었다
각 서브트리 등록은 우선순위를 담았다. 숫자가 낮을수록 이겼다. 여러 피어가 동일한 서브트리를 서로 다른 우선순위로 등록할 수 있었다. 우선순위-1을 요청하면 최고 위치를 요청하는 것이었지만, 에이전트는 로컬 구성에 따라 더 낮은 우선순위를 배정할 수 있었다. 피어가 자리를 제안했고, 에이전트는 정책 통제권을 유지했다.
최고 우선순위 등록만이 조회되었다. 더 놀랍게도, 에이전트는 “서브트리 마운트 효과”를 강제해야 했다. 한 피어가 좁은 객체를 등록하고 다른 피어가 나중에 더 넓은 조상을 마운트하면, 좁은 객체에 대한 요청은 더 넓은 마운트로 갔다. 그 아래의 등록들은 선택에서 숨겨졌다.
그 규칙은 MIB를 마운트된 네임스페이스처럼 보이게 했다. 또한 엄격한 증거 경계를 설정했다. 반환된sysDescr, 라우트 항목 또는 카운터는 그 당시 승리한 로컬 경로가 공급한 것을 보여줬을 뿐이다. 그것은 다른 프로세스가 동일한 이름을 등록하지 않았다는 것, 숨겨진 등록이 일치한다는 것, 승자가 원래 생성자라는 것, 또는 그 값이 물리적 시스템을 올바르게 기술한다는 것을 증명하지 않았다.
에이전트는 SNMP 및 SMUX 서브트리 주변의 등록을 금지하고, 구현 정책에 따라 다른 영역을 거부할 수 있었다. 따라서 네임스페이스 수용은 자동적인 권한이 아니었다. 피어가 연결을 끊거나, 우선순위가 변경되거나, 더 넓은 서브트리가 나타날 때 결과가 바뀔 수 있는 로컬 결정이었다.
Get-next는 중개자가 범위를 불신하도록 요구했다
위임이 에이전트의 경계 책임을 없애지는 않았다. RFC 1227은 각 피어가 GetNext를 처리하는 동안 자신이 전체 MIB를 포함하는 것처럼 행동하도록 지시했다. 피어는 요청을 유발한 서브트리 밖의 객체를 반환할 수 있었다. 그러면 에이전트는 결과를 검사하고, 범위 탈출을 거부하고, 이어지는 등록된 서브트리를 담당하는 피어로 계속해야 했다.
그 검사는 구성이 어디에 존재했는지를 보여준다. 피어는 후보 후속 객체를 생성했고, 에이전트가 그 후보가 공용 워크에 속하는지를 결정했다. 원격에 보이는 OID의 연속은 하나의 데이터베이스로부터의 원시 열거가 아니었다. 그것은 반복되는 로컬 라우팅, 범위 검사 및 블로킹 호출의 결과였다.
요청 ID 역시 로컬 상호 연관 도구였다. 하나의 수신 연산이 여러 피어 PDU가 되면, 그 PDU들은 관리자의 원래 값과 일치할 필요가 없는 요청 ID를 공유했다. 외부 요청, 내부 분기(fan-out), 외부 응답은 서로 연관된 기록이었지, 하나의 불가분 사건이 아니었다. 유용한 감사는 프로토콜이 요구하지 않는 번호 일치에서 추론하는 대신 그 매핑을 보존할 것이다.
원자적 의도는 확인된 결과 앞에서 멈췄다
Set 연산은 이 분리를 더 선명하게 만들었다. 요청이 여러 피어에 걸칠 때, 에이전트는 먼저 각 참여자에게 변경을 수행하지 않고 수락할지 거부할지를 물었다. 어떤 거부든 에이전트가 모든 참여자에게 롤백을 보내게 만들었다. 만장일치의 수락은 커밋을 보내게 만들었다.
이는 단순한 2단계 결정이었지만, 마지막 가장자리는 의도적으로 조용했다. 피어들은 커밋 또는 롤백 SOutPDU에 응답하지 않았다. 첫 라운드의noError응답은 “나는 이 제안된 연산을 수락할 수 있다”를 의미했지, “나는 이제 내구성 있는 상태를 변경했다”를 의미하지 않았다. 에이전트가 보낸 커밋은 에이전트의 결정과 발송 시도를 확립했다. RFC 1227은 적용이 완료되었다는 최종 피어 확인을 제공하지 않았다.
이 구분은 관리 기록이 결과로 취급될 때마다 중요하다. 새 상태를 증명하려면 운영자는 이후의 피어 상태, 새로운 SNMP 읽기, 프로세스 로그 또는 독립적인 관찰이 필요할 것이다. 조율된 롤백을 증명하는 데에도 같은 부담이 적용된다. 트랜잭션 어휘는 불확실성을 좁힐 수 있지만 최종 간극을 지우지는 못한다.
상태 테이블조차 존재를 진실로 보지 말라고 경고했다
SMUX MIB는 피어 및 트리 테이블을 노출했다. 그러나 행을 무효화하는 것이 반드시 그 행을 제거하는 것은 아니었다. 삭제는 구현에 따라 달랐다. 관리 스테이션은 유효, 연결 중 또는 무효 피어를 구별하기 위해 상태 객체를 검사해야 했으며, 트리 등록도 마찬가지였다.
이것은 작지만 오래 지속되는 교훈이다. 행의 존재는 재고 사실이지, 항상 실시간 상태 사실은 아니다. 피어 식별 OID는 프로토콜 구조 내에서 권위 있는 것으로 기술되었지만, SimpleOpen 비밀번호는 비어 있을 수 있었고 메모는 보안 문제가 논의되지 않았다고 명시했다. OID도 살아남은 행도 사람, 조직, 권한 범위 또는 신뢰할 수 있는 생성자를 확립하지 않았다.
TCP 매핑은 포트 199를 사용했고, 별도의 패킷화 계층 대신 BER의 자체 구분 인코딩에 의존했다. 현재IANA 서비스 이름 및 포트 레지스트리는 할당 맥락을 보존할 수 있다. 테이블 행처럼, 등록된 번호가 리스너, 배포 또는 활성 프로토콜을 증명하지는 못한다.
RFC 1227의 교환기는 안정적인 공용 인터페이스를 변하는 로컬 소유자로부터 분리했기 때문에 유용했다. 역사적 분석은 그 분리를 보존해야 한다. 에이전트의 답변, 선택된 등록, 피어가 제안한 값, 트랜잭션 결정 및 관찰된 시스템 상태는 서로 다른 증거 계층에 속한다.
출처
회원 브리핑
프로필 심층 컨텍스트
올바른 멤버십 등급으로 로그인하면 전체 브리핑과 출처 노트를 볼 수 있습니다.
Strategic Circle 전용
Strategic Circle
모든 독자에게 공개됩니다. 가입 후 로그인하면 프로필 브리핑를 열람할 수 있습니다.
Strategic Circle 가입하기Leadership Alliance 전용
Leadership Alliance
자격을 갖춘 IP 자산 소유자 및 운영진을 위한 콘텐츠입니다. 로그인하면 Leadership Alliance 브리핑을 열람할 수 있습니다.
Leadership Alliance 가입하기





