요약

  • Tennenhouse와 Wetherall의 1996년 액티브 네트워크 논문은 운영자가 적재하는 프로그래밍 가능 스위치 모델과, 메시지가 각 액티브 노드에서 맞춤형 계산을 일으키는 더 급진적인 캡슐 모델을 모두 다루었습니다. 두 모델은 실행 권한을 서로 다르게 배분하며, 하나로 합쳐서는 안 됩니다.
  • 이 논문은 그 자유가 공짜가 아니라고 가장하지 않았습니다. 안전성, 보안, 자원 할당을 미해결 과제로 명시하고, 일시적 실행 환경과 제한된 프리미티브를 제안했으며, 인증·권한 부여·공통 노드 자원 모델을 남아 있는 과제로 남겨 두었습니다.
  • 이후 ANTS 경험은 모든 패킷에 코드 전체를 담는 방식을 참조 기반 코드와 캐싱으로 대체하고, 비액티브 노드를 지원하면서도 노드 간 자원 독점과 애플리케이션 가치 문제를 여전히 미해결로 남겼습니다. 프로그래밍 가능성이 중요했지만, 누가 무엇을 어떤 예산 아래 어떤 폴백으로 실행했는지에 대한 기록이 더 중요했습니다.

패킷 하나가 추가 동사 하나를 실어 왔습니다

전통적인 IP 패킷은 주소, 헤더, 데이터를 갖고 라우터에 도착합니다. 라우터는 이미 설치된 기능을 적용합니다. 필요한 검증을 수행하고, 다음 홉을 선택하고, 적절한 필드를 갱신한 뒤 전송합니다. 패킷은 자신의 필드를 통해 결정에 영향을 줄 수 있지만, 통상적으로 포워딩 기계 안에 새로운 프로그램을 도입하지는 않습니다.

1996년 4월의 논문Towards an Active Network Architecture는 이 문법을 바꾸었습니다. Tennenhouse와 Wetherall은 새로운 메시지를캡슐(capsule)이라 불렀습니다. 극단적인 설계에서 각 메시지는 프로그램 조각을 담고 있었고, 그 안에 데이터가 함께 삽입되어 있었으며, 모든 액티브 라우터와 스위치가 그 조각을 평가했습니다. 논문의 비유는 PostScript 프린터였습니다. 도착하는 객체는 단순히 페이지에 놓일 재료만 담는 것이 아니라, 수신 기계에 수행할 작업을 기술합니다.

매력은 회선 속도가 아니라 변화의 속도였습니다. 새 서비스가 표준화, 벤더 구현, 조정된 인프라 교체를 차례로 통과할 때까지 기다릴 필요가 없었습니다. 애플리케이션 특화 멀티캐스트, 정보 융합, 트랜스코딩 같은 인네트워크 기능을 필요에 더 가까운 곳에서 도입할 수 있었습니다. 코드 교환은 서비스를 하드웨어에서 분리하고, 모든 장비를 교체하지 않고도 네트워크가 진화할 수 있게 해 주었습니다.

그것은 연구 비전이지 일반 배포에 대한 보고가 아니었습니다. 제안된 광역 ActiveNet은 선정된 사이트에 플랫폼을 두고, 초기 MBONE이 그랬던 것처럼 일반 인터넷을 터널링으로 통과했습니다. 이 구분은 중요합니다. 오버레이 실험은 코드가 통제된 노드에서 실행될 수 있음을 증명할 뿐입니다. 관련 없는 운영자들이 같은 코드, 같은 자원 모델, 같은 책임을 받아들일 것임을 증명하지는 않습니다.

제안에는 서로 다른 두 개의 문이 있었습니다

"액티브 네트워크"가 모든 설계에서 모든 패킷이 임의의 코드를 실을 수 있다는 뜻은 아니었습니다. 이 논문은 프로그램 적재와 호출이 분리된 프로그래밍 가능 스위치 모델을 기술했습니다. 운영자는 적재 인터페이스를 인증된 관리 문 뒤에 두고, 코드를 검사한 다음 신중하게 선정된 기능만 노출할 수 있었습니다. 이 모델은 라우터를 확장 가능하게 만들면서도, 무엇이 들어올 수 있는지에 대한 제도적 결정을 보존했습니다.

캡슐 모델은 프로그램과 메시지를 더 밀접하게 통합했습니다. 순수한 형태에서 모든 메시지는 최소 하나의 명령이었습니다. 사용자는 플로우나 애플리케이션에 맞춘 처리를 구성할 수 있었고, 액티브 노드는 통과하는 캡슐을 평가했습니다. 이는 수요와 배포 사이의 거리를 줄였습니다. 동시에 신뢰 경계를 이동시켰습니다. 계산을 선택하는 당사자가 더 이상 CPU, 메모리, 저장소, 회선을 소유한 당사자가 아닐 수 있었습니다.

이 차이는 단순한 구현 세부사항이 아닙니다. 첫 번째 문은 "운영자가 코드를 설치하고, 그다음 트래픽이 승인된 기능을 호출한다"고 말합니다. 두 번째 문은 "트래픽이 기능 선택에 참여한다"고 말합니다. 둘 다 프로그래밍 가능할 수 있지만, 신원·동의·책임 소재에 대해 서로 다른 기록을 요구합니다.

현대의 일부 설명은 액티브 네트워킹을 소프트웨어 정의 네트워킹, 프로그래밍 가능 데이터 플레인, 엣지 컴퓨팅을 향한 직선적 조상 계보로 만들 때가 있습니다. 이 논문은 더 규율 있는 결론을 지지합니다. 논문은 코드가 어디에 적재되고, 누가 선택하며, 어디에서 실행되는지라는 반복되는 설계 공간을 드러냈습니다. 논문은 P4, OpenFlow, NFV, eBPF 또는 현재의 어떤 플랫폼이 하나의 캡슐 아키텍처나 하나의 인과 계승을 물려받았다는 것을 입증하지 않습니다.

라우터에는 샌드박스와 예산이 필요했습니다

저자들은 이 제안이 안전성, 보안, 자원 할당에 관한 "판도라의 상자"를 열었다고 썼습니다. 이 문장은 이 연구를 축하하는 독법을 막습니다. 그들은 이동 코드가 운영 통제를 해소했다고 주장하지 않았습니다. 실험을 가능하게 만들 만큼 강한 경계를 설계하려 했을 뿐입니다.

그들의 즉각적인 경계는 일시적 실행 환경이었습니다. 이는 한 노드가 하나의 캡슐을 평가하는 동안에만 존재했습니다. 프로그램은 제한된 프리미티브 집합을 받았고, 저장소 등 노드 자원에 대한 접근은 작용과 범위 모두에서 제약되었습니다. 논문은 타입 안전 언어, 해석 방식, 컴파일 방식, 샌드박싱 기법을 검토했지만, 모든 노드와 모든 위협을 해결하는 완성된 메커니즘 하나를 지목하지는 않았습니다.

메모리 안전한 캡슐조차 운영상 안전하지 않을 수 있었습니다. 합법적인 명령 시퀀스가 과도한 CPU를 소비하거나, 과도한 상태를 만들거나, 과도한 트래픽을 방출하거나, 여러 노드에 걸쳐 수요를 조정할 수 있었습니다. 따라서 이 아키텍처에는 노드 자원을 기술하고, 할당하고, 어떤 캡슐이 인증·권한 부여되었는지 판단하는 공통 방법이 필요했습니다. 프로그램이 실행될 수 있는 능력은 남의 기계를 쓸 권리와 같지 않았습니다.

바로 여기서 포워딩 기록의 의미가 바뀝니다. 평범한 패킷 증거는 노드가 데이터그램을 수신·전송했는지 물을 수 있습니다. 액티브 네트워크의 기록은 프로그램 또는 프로그램 참조, 실행 환경, 제공된 프리미티브, 건드린 상태, 차감된 예산, 거부 사유까지도 식별해야 합니다. 이 필드들이 없으면 성공한 전달이 실패한 통제 결정을 감출 수 있습니다.

ANTS는 이 아이디어를 참조로 실어 나르았습니다

ANTS 프로젝트는 공격적인 캡슐 아이디어를 툴킷으로 전환했습니다. David Wetherall의 이후 경험 논문은 승리 소식이 아니라 변경 사항을 보고한다는 점에서 유용합니다. 초기 비전은 코드가 메시지와 함께 이동한다고 제안했습니다. 구현된 설계는참조 기반 코드로 이동했습니다. 캡슐은 암호학적 지문으로 식별되는 타입을 실었고, 노드는 필요에 따라 연관된 코드를 적재하고 캐시했습니다.

이 타협은 반복 전송을 줄이고 코드 배포를 패킷 포워딩에서 분리했습니다. 동시에 의존성을 도입했습니다. 첫 패킷은 코드 미스(code miss)에 직면할 수 있었습니다. 효율적인 동작은 캐싱이 이득이 되는 트래픽 패턴에 의존했습니다. 노드는 빠진 루틴을 가져오고 설치하는 규칙이 필요했습니다. 패킷은 무엇이 실행되어야 하는지 지목했지만, 노드가 이미 그것을 소유하고 신뢰하고 있음을 보장하지 않았습니다.

ANTS는 또한 이질적이고 비액티브인 노드들과 공존해야 했습니다. 이후 아키텍처는 일반 라우터가 캡슐 평가를 수행하지 않고 계속 포워딩하도록 허용했습니다. 호환성은 뒤늦게 고민한 사항이 아니었습니다. 한정된 액티브 섬이 모든 중간 시스템에게 즉각적인 변경을 요구하지 않고 운영될 수 있는 경로였습니다.

성능 증거는 한정적이었습니다. Java 프로토타입은 인상적이지 않은 10 Mb/s에 도달했지만, 프로파일링은 소프트웨어 라우팅이 이미 실현 가능한 환경에서는 캡슐 처리도 경쟁력을 가질 수 있음을 시사했습니다. 이 수치는 보편적 상한도, 상용 증명도 아닙니다. 이 구현이 이룬 것이 무엇이었고, 저자들이 프로토타입 언어와 런타임이 만든 비용에서 고유한 처리 단계를 분리했는지를 보여줍니다.

로컬 안전만으로 분산된 소비를 해결하지 못했습니다

암호학적 지문은 ANTS에 코드의 안정적인 이름을 주고 노드 상태 보호에 도움이 되었습니다. 제한된 실행은 캡슐이 임의의 메모리를 읽거나 쓰는 것을 막을 수 있었습니다. 이는 의미 있는 진전이었습니다. 그럼에도 회고는 미해결 문제를 지목했습니다. 잘못 동작하는 프로토콜이 여러 노드에 걸쳐 자원을 독점하는 것을 방지하는 문제였습니다.

로컬 한도는 자동으로 조합되지 않습니다. 프로그램은 각 노드의 허용량 안에 머무르면서도 경로 전체에 과도한 누적 수요를 만들 수 있습니다. 한 노드는 수용 가능한 호출을 보는 반면, 네트워크는 조율된 폭풍을 봅니다. 이는 평범한 인터넷의 대역폭 남용과 비슷하지만, 액티브 코드는 청구서에 CPU, 메모리, 저장된 상태를 더합니다.

당장의 미래를 위해 프로젝트는 신뢰할 수 있는 기관의 인증에 의존했습니다. 이 대응은 노드를 보호했지만, 사용자가 통상의 관료적 절차 없이 혁신할 수 있다는 원래 약속을 좁혔습니다. 인증은 다시 관문을 도입했습니다. 다른 이들이 코드를 실행하기 전에 누군가 그 코드를 인정해야 했습니다. 이 거래는 합리적이고 가시적이었습니다. 권위의 소멸이 아니라 권위가 어디로 돌아오는지에 대한 결정이었습니다.

애플리케이션 증거도 똑같이 솔직했습니다. 캡슐은 프로토콜이나 인프라 변경을 요구하는 서비스를 실험하기 더 쉽게 만들었습니다. 그러나 이 프로젝트는 없어서는 안 될 사용자 애플리케이션의 폭넓은 카탈로그를 확립하지 않았습니다. Jerome Saltzer의 당대 MIT 논평은 종단 관점에서 같은 경계에 도달했습니다. 액티브 기능이 종단 간 논거에 의해 금지되는 것은 아니지만, 단순하고 투명한 프로그래밍 의미론과 설득력 있는 고영향 활용은 아직 입증되지 않았다는 것이었습니다.

Tennenhouse의 지속적인 기여는 통제 표면을 드러낸 것이었습니다

Tennenhouse의 1999년 MobiCom 전기는 그를 MIT 연구와 DARPA 프로그램 리더십의 교차점에 두었고, 액티브 네트워크는 그가 발전에 기여한 여러 분야 중 하나였습니다. ACM SIGCOMM은 이후 1996년 논문에 Test of Time Award를 수여했습니다. 이 인정은 지적 내구성을 확립하지만, 배타적 발명이나 상용 채택을 의미하지는 않습니다. Wetherall은 그 비전의 공동 저자였고, ANTS는 더 넓은 팀의 작업이었습니다.

이 논문이 남아 있는 이유는 가장 급진적인 움직임이 여전히 정리되지 않았기 때문입니다. 네트워크는 새로운 계산을 중간 노드에 받아들임으로써 더 적응적이 될 수 있습니다. 같은 행위가 프로그램 신원, 자원 소유, 거부 동작을 네트워크 계약의 일부로 만듭니다.

Lu Heng의 후속 원칙인 Minimum Initial Specification은 역사적 자료가 아니라 유용한 시험 기준을 제공합니다. 캡슐이 안전하게 평가되고 비호환성이 로컬에서 감지될 수 있으려면, 모든 참여자가 무엇을 공유해야 합니까? 최소한 시스템에는 안정적인 코드 신원, 경계화된 실행, 자원 의미론, 명시적 호환성, 거부 경로가 필요합니다. 그 이상의 모든 것은 운영자의 결정으로 남을 수 있습니다. 공통 계층이 어떤 혁신이 존재할 자격이 있는지까지 결정한다면, 그것은 관문 관리자가 됩니다. 너무 적게 규정하면, 사용자의 자유는 운영자의 가격이 매겨지지 않은 리스크가 됩니다.

따라서 라우터에게 코드 실행을 요청한 패킷은 단순히 하나의 기능을 제안한 이상의 일을 했습니다. 포워딩 속도에서 네트워크가 네 가지 질문에 답하도록 강요했습니다. 이 프로그램은 무엇인가, 누가 호출할 수 있는가, 무엇을 소비할 수 있는가, 그리고 노드는 전달을 깨지 않고 어떻게 거부하는가? 이 기록들을 만들어 낼 수 없는 모든 현대 프로그래밍 가능 네트워크는 야망은 물려받았지만 계약을 완성하지 못한 것입니다.

출처