요약

  • IHAVE는 기사 본문이 아니라 메시지 ID로 시작합니다. 수신 측은 해당 기사를 이미 알고 있다고 보고하거나, 판단을 보류하거나, 발신 측에 전체 기사를 전송해 달라고 요청할 수 있습니다.
  • 본문 요청은 첫 번째 관문일 뿐입니다. 본문을 받은 뒤에도 서버는 로컬 검사에 따라 전송을 수용하거나 보류하거나 거부할 수 있으며, 긍정적인 전송 응답조차 영구 보존을 보장하지 않습니다.
  • CHECK와TAKETHIS는 이후에 동일한 판단들을 파이프라인 친화적 연산으로 분리했습니다. 이를 통해 처리량을 높였지만, 권고성 요청을 소유권이나 정책 권한의 이전으로 바꾸지는 않았습니다.

첫 번째 관문에서의 세 가지 제안

짧은 뉴스 기사 세 편을 가진 발신자를 상상해 보십시오. 발신자는 세 본문을 즉시 밀어넣지 않고, 대신 세 개의 간결한 식별 토큰을 제시합니다. 수신자는 하나는 자신의 이력에서 인식하고, 다른 하나는 판단할 자원이 부족하고, 세 번째는 보여달라고 요청합니다. 첫 번째 본문은 전송이 면제되고, 두 번째는 재시도 대상으로 남으며, 세 번째만 전체 전송 비용을 소비합니다.

그 세 번째 기사는 이어서 두 번째 관문에 도달합니다. 문법이 형식에 맞지 않을 수도 있고, 그룹이 수용 불가능할 수도 있으며, 배포 범위가 로컬 정책 밖일 수도 있고, 저장 공간이 사이에 사용 불가능해졌을 수도 있습니다. 바이트를 요청했던 서버는 여전히 그것을 거부할 수 있습니다. 역사적으로 중요한 혁신은 단순한 중복 탐지가 아니었습니다. 그것은 욕구가 알려질 때까지 비용이 큰 전송을 미루되, 판단에 필요한 증거가 도착하기 전까지는 최종 판단을 예약해 두는 가시적 상태 기계였습니다.

대역폭 문제가 먼저 왔다

RFC 1036은ihave와sendme제어 메시지로 구성된 더 이른 Netnews 메커니즘을 기록하고 있습니다. 한 시스템이 자신이 보유한 메시지 ID를 광고하고, 다른 시스템이 자신에게 없는 식별자를 요청했습니다. 단일 식별자를 제안하는 비용이 매우 짧은 기사의 비용에 근접할 수 있었기 때문에 이러한 교환은 일괄 처리될 수 있었습니다.

이 구형 교환은 이후 명령 뒤에 있던 경제성을 드러냅니다. 저장 후 전달 방식의 뉴스는 용량, 일정, 비용이 크게 달라지는 회선들에 걸쳐 확산되었습니다. 이웃이 이미 보유한 것을 확인하기 위해서만 모든 기사를 보내는 일은 희소한 전송 자원을 낭비했습니다. 식별자 우선 제안은 수신자의 이력을 대역폭 결정으로 바꾸어 놓았습니다.

이 메커니즘은 또한 지속적인 구분을 확립했습니다. 메시지 ID는 특정 기사가 원하는지를 물어보기에 충분했지만, 기사 자체를 대체하지는 못했습니다. 식별자는 협상을 통제했고, 실제로 검사하고 저장될 수 있는 재료는 전체 헤더와 본문이 공급했습니다.

IHAVE는 두 가지 판정을 회선 위에 올려놓았다

RFC 977은 이 아이디어를 NNTPIHAVE명령으로 만들었습니다. 클라이언트는 메시지 ID를 보내고, 서버는 기사를 요청하는335, 원하지 않을 때의435, 나중에 다시 시도해야 할 때의436으로 응답할 수 있습니다.335를 받은 뒤에야 클라이언트는 통상의 NNTP 방식으로 종결되는 기사를 보냅니다.

본문 다음에는 두 번째 응답이 옵니다.235는 기사가 성공적으로 전송되었음을 뜻하고,436은 일시적 실패를 표시하며,437은 재시도를 유도하지 않는 채로 기사를 거부합니다. 문서는 원치 않는 뉴스그룹이나 배포, 부족한 저장 공간, 과도한 길이, 손상된 헤더 등을 이유로 검사 뒤 거부할 수 있음을 명시적으로 허용합니다.

이 두 단계 어휘는 오해를 낳는 압축을 막아 줍니다. “서버가 메시지 ID를 수용했다”는 최종 수용이 아니며, 서버는 판단에 필요한 정보를 요청했을 뿐입니다. 마찬가지로 “클라이언트가 기사를 보냈다”는 두 번째 응답에 대해 아무것도 말하지 않습니다. 두 판정 중 하나만 남기는 운영 기록은 프로토콜의 핵심 경계를 지워 버립니다.

현대 NNTP는 상태들을 더 예리하게 만들었다

RFC 3977은 이 두 단계 교환을 유지하면서 실패가 어떻게 작동하는지 명확히 합니다.IHAVE는 파이프라인화할 수 없습니다. 클라이언트는 기사를 보내기 전에 첫 응답을 기다려야 하고, 트랜잭션을 완결로 취급하기 전에 두 번째 응답을 기다려야 합니다. 응답이 끝내 오지 않으면 전송은 성공으로 추정되지 않고 일시적 실패로 처리됩니다.

현대 명세는 또한 전송(transit)과 게시(posting)를 분리합니다.IHAVE는 이미 형성된 기사를 피어 간에 전송하기 위한 것이고,POST는 새 기사를 주입하기 위한 것입니다. 전송 수신자는 동일한 식별자나 기사의 반복 제안을 불필요한 중복을 억제할 만큼 일관되게 인식하는 것이 기대되지만, 제안된 재료가 그 서버에 속하는지는 여전히 로컬 정책이 결정합니다.

이것은 증거 관점에서 중요합니다. 첫 응답은 한 시점의 욕구를 기술하고, 두 번째는 한 번의 전송 시도 결과를 기술합니다. 어느 쪽도 서버가 이후 기사를 보존했는지, 독자에게 제공했는지, 모든 다음 홉으로 전달했는지를 증명하지 않습니다.

긍정적 응답은 결코 보관 영수증이 아니었다

RFC 977은235를 돌려준 서버가 나중에 기사가 수용 불가능하다는 것을 발견하여 조용히 폐기할 수 있음을 경고합니다.RFC 4644는 동일한 경고를 스트리밍으로 이어받습니다.TAKETHIS에 대한 성공적인239응답 뒤에도 이후 처리에서 기사가 폐기될 수 있습니다.

성공 코드가 확정적으로 보이기 때문에 이 단서는 간과하기 쉽습니다. 그것들은 정의된 트랜잭션 경계에 한해서만 확정적입니다. 이 코드들은 피어가 이 전송 교환에 대한 책임을 수용했다는 뜻이며, 보편적 아카이브, 독자가 볼 수 있는 목록, 다운스트림 전파 의무가 이제 존재한다는 뜻이 아닙니다.

실용적 귀결은 전달 증거가 층층이 구성되어야 한다는 것입니다. 긍정적 NNTP 응답은 전송된 바이트 수보다는 많은 것을 증명하지만, 이후의 저장·제공·연쇄 전달보다는 적은 것을 증명합니다. 이 층들을 혼동하면 프로토콜 응답이 허구적 보장으로 변합니다.

스트리밍은 기다림을 옮겼을 뿐 권한을 옮기지 않았다

고전적IHAVE는 각 첫 단계 판단마다 왕복을 지불하고, 본문 결과에 대해서도 또 한 번 지불합니다. RFC 4644는 스트리밍 명령을 도입하여 여러 판단이 동시에 진행 중일 수 있게 했습니다.CHECK는 메시지 ID로 식별되는 기사가 원하는지를 묻고,TAKETHIS는 전체 기사를 보내 최종 수용 또는 거부 응답을 산출합니다.

이 분리 덕분에 수많은CHECK명령과 기사 전송이 직렬 대기 없이 진행될 수 있습니다. 그러나CHECK는 여전히 권고적입니다. 수신자는 발신자가 이를 따를 것이라 가정해서는 안 됩니다. 발신자는 사이트 정책이나 적응적 전략이 허용할 때 선행CHECK없이TAKETHIS를 사용할 수 있으며, 수신자는 여전히 최종 결정을 내려야 합니다.

따라서 스트리밍은 큐의 기하 구조를 바꾸지, 보관을 바꾸지 않습니다. 긴 지연 회선을 효율적으로 채울 수는 있지만, 피어가 기사를 저장하도록 강제하거나, 로컬 필터를 제거하거나, 본문 검사 뒤 거부할 권리를 내어주지는 않습니다.

사이트 간 합의는 명령 문법 밖에 있었다

RFC 5537은 이러한 전송을 더 넓은 Netnews 아키텍처 안에 배치합니다. 고대의ihave와sendme제어 메시지는 인터넷에서는 대체로 쓸모없게 되었지만, 일부 UUCP 환경에서는 여전히 사용되고 있었습니다. 현대의 피어링은 대신 무엇을 교환하고 어떻게 운송할지에 관한 사이트 간 합의에 의존했습니다.

이러한 합의는 벌거벗은 메시지 ID로는 인코딩되지 않습니다. 피어들은 어떤 계층 구조, 배포 범위, 기사 등급을 원하는지 스스로 결정하며,IHAVE, 스트리밍, 배치 피드 또는 합의된 다른 운송을 사용할 수 있습니다. 프로토콜은 각 제안과 판정을 읽을 수 있게 만들지만, 피드를 성립시킬 권한과 재료를 보존할 정책은 사이트들에게 남아 있습니다.

이것이 바로 “NNTP에 수용되었다”가 지나치게 넓은 역사적 주장인 이유입니다. 물어야 합니다. 어느 관문에서, 어느 피어에 의해, 어느 피어링 정책 아래에서 수용되었으며, 보관에 대한 이후 증거는 무엇인가?

한계를 지킨 제안

IHAVE는 ‘수용’이라는 한 단어가 전 여정을 덮지 못하도록 거부함으로써 성공했습니다. 발신자는 먼저 식별자를 드러냈습니다. 수신자는 본문을 운반할 가치가 있는지를 선택했습니다. 수신자는 이어서 본문을 검사하고 전송 결과를 발행했습니다. 이후의 저장과 전파는 별개의 관찰로 남았습니다.

CHECK와TAKETHIS는 회선을 계속 바쁘게 유지하면서 동일한 경계들을 지켰습니다. 프로토콜은 속도가 재량을 폐지했다고 가장하지 않은 채 빨라졌습니다. 분산 시스템에서 효율적인 제안은 대역폭을 절약할 수 있습니다. 그러나 제안된 것을 무엇으로 만들지는 오직 수신 측 보관 주체만이 결정할 수 있습니다.

출처