要約
- RFC 3977の手順では、クライアントは
NEWNEWSの前にDATEでサーバー時刻を取り、検索自体は前回保存した時刻から行う。 - 二つの検索区間は意図的に重なる。同じMessage-IDは照合できるが、境界の間に落ちた記事は欠落したことさえ分からない。
- 得られるのは、特定サーバーの到着時刻と選択したニュースグループに基づく識別子一覧であり、本文配送やネットワーク全体の完全な履歴ではない。
静かすぎる失敗
正午に問い合わせを始め、応答が八秒後に終わるとする。その処理中に記事が一件到着した。サーバーが候補を切り出した後なら今回の一覧には入らない。クライアントが応答完了時刻を次回の開始点として保存すれば、その記事は次回には古すぎる。
厄介なのは、どちらの応答も正常だという点である。途中で失われたMessage-IDをクライアントは知らず、再取得すべき対象もない。空白は「何もなかった時間」と同じ姿をしている。
RFC 3977は、この競合を手順で閉じる。まずDATEを実行し、その値を一時的に保持する。次に、前のセッションで保存した時刻を使ってNEWNEWSを実行する。応答を受け終えてから、一時保持していた時刻で保存済みの境界を置き換える。新しい時刻は検索後に採ったものではなく、検索前から待っていたものだ。
NEWNEWSが運んだのは記事名簿だった
1986年のRFC 977では、ニュースグループ、日付、時刻を指定すると、それ以後に投稿または受信された記事のMessage-IDが一行ずつ返る。ワイルドカードで範囲を広げ、先頭の感嘆符で除外でき、該当なしも正当な応答だった。
本文はこのコマンドの返却物ではない。識別子を見つけた後、クライアントが必要な記事を別に取得する。したがって一覧は発見の証拠であって、本文を受領した証明でも、将来まで保存される保証でもない。
初期仕様にはdistribution引数もあった。RFC 2980は、その解釈が実装ごとに分かれたことを記録している。またNEWNEWSはしばしば無効化されるコマンドの一つだった。標準化された形があることと、あらゆるサーバーで使えることは別である。
到着時刻は各サーバーの履歴
RFC 3977は記事を探す鍵を三種類に整理する。Message-IDは記事の大域的な識別子、ニュースグループ名と記事番号の組み合わせはサーバー内の位置、到着タイムスタンプは記事がそのサーバーに届いた時刻である。NEWNEWSが用いるのは最後の鍵だ。
著者が本文に記した日付が新旧を決めるわけではない。古い日付の記事でも遅れて届けば、このサーバーには新しい。同じ記事でも中継先ごとに到着時刻は異なる。得られる履歴は一つの観測地点に属している。
境界を測る時計も同じ地点に合わせる必要がある。RFC 2980はDATEをサーバーから見たGMTとして定義した。RFC 3977では、記事到着とグループ作成を決める時計と同じ時計を使うよう求める。DATEはNTPの代用品ではない。判定側の座標で問い合わせ境界を作るための情報である。
二重に見えることが安全余白になる
前回の境界は、今回の結果が確実に受理されるまで捨てられない。処理中に切断したなら、再起動後に古い区間をもう一度調べる。再処理は増えるが、開始しただけの作業を完了済みにしない。
仕様は小さな誤差に備え、保存時刻を二、三分戻して使うことも認める。例では同じMessage-IDが連続する二回の応答に現れる。この再出現は、余白が実際に働いた跡である。
さらに、応答内の並び順には意味がなく、同じセッションでも変化し得る。同じMessage-IDが一回の一覧に複数現れても、意味は一回分と同じだ。行位置を時系列と見なすのではなく、識別子の集合として照合しなければならない。
時刻の安全性が保証しないもの
重複区間は、ニュースグループの選択ミスを直さない。サーバーが能力を広告しなければ、コマンドを前提にできない。保持期限を過ぎた情報が必ず戻るわけでもない。複数行応答が途中で切れたなら、境界を進めてはいけない。別のサーバーへ移れば、到着履歴の証人も時計も変わる。
IANAのNNTPパラメーター登録簿は、NEWNEWSをコマンド利用可能性を示す能力として登録する。これは共通名称と参照先を確立するが、個別運用の有効化や完全性を認証しない。
この設計が選んだのは、証拠を残す失敗である。重複はMessage-IDを伴い、数え、比較し、一つにできる。進みすぎた境界の向こうに消えた記事は、欠落を示す影さえ落とさない。
チェックポイントは「ここまでは見た」という宣言
カーソルは単なる現在地ではない。それ以前を再び尋ねなくてもよいほど観測した、という主張である。応答終了後の時刻を安易に置けば、実際には誰も見ていない区間まで承認してしまう。
NNTPは少し古い地点をもう一度読むことを選んだ。未来の境界を検索前に採取し、古い境界を処理中も有効にし、受理後にだけ交代させる。不確実性を消したのではない。不確実性が、照合できる識別子として姿を現すようにした。
出典
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加
