摘要

  • LIST ACTIVE 回答的是这名读者现在能在这台服务器上选择哪些组;可选的 LIST ACTIVE.TIMES 只暴露服务器保存下来的本地创建沿革。
  • 历史名单可以漏掉正在服务的组,也可以留下已停止服务的组,因此有记录不等于当前可用,没记录也不等于从未存在。
  • 时间是“在这台服务器上创建”的时间,创建者字段只是描述性文本;二者都不是全球出生证明、身份认证或所有权凭证。

两份名单为何可以同时为真

先看当前目录。LIST ACTIVE 返回一个组名、这台服务器上的高低水位以及发布状态。再看创建历史,同一组名并不存在。历史名单的另一行却保存着一个旧组的时间与创建者描述,而当前目录已经没有它。

RFC 3977 对这种错位写得很直接。提供阅读能力的服务器必须让 LIST ACTIVE 覆盖该客户端可以用 GROUP 选择的所有组。LIST ACTIVE.TIMES 则是可选项,每行保存组名、该组在这台新闻服务器上的创建时间,以及用于描述创建实体的普通文本。

规范随即禁止客户端假设历史名单完整,也禁止假设它与 LIST ACTIVE 相同。它可以漏掉信息不可得的组,漏掉最早的一整段历史,还可以包含服务器已经不再提供的组。

当前目录从一开始就是操作界面

RFC 977 定义的 LIST 是有效新闻组名单。它携带本地文章编号边界与通常的发布状态,空名单本身也有意义:这台服务器此刻没有可向该客户端报告的有效组。

读者查询它,是为了决定下一步能否选择某个组,而不是为了认定一个名字在整个网络中的历史地位。服务器停止服务一个组后,不必因为它曾存在就继续把它列为活跃项。反过来,一次迁移可以恢复当下的配置,却没有带回旧系统的创建时间。

这份目录本来就是本地状态。文章编号、可见性和客户端权限都可能在服务器之间不同。

运行实践先于统一语法

RFC 2980 把 LIST ACTIVE.TIMES 记录为常见扩展。某些新闻传输系统维护 active.times 文件,写入组名、在本服务器创建的秒数时间和创建实体描述;这项能力出现在 UNIX 参考实现中,信息不存在时可以报错。

历史顺序很重要。互联网并没有先设立一个统一的新闻组出生登记处,再要求所有服务器上报。它先把一个有用的本地运维文件通过协议公开,随后才把各字段和局限写清楚。

RFC 3977 将第三字段限定为“用于描述”的普通文本,通常可能长得像邮箱,却没有让它变成签名或授权证据。标准化让不同软件读懂记录,没有让记录取得统治名字的权力。

正记录只证明一段本地记忆

一个组可以停止接收馈送、清空存储、被配置移除,或只是不再向当前读者开放。旧的 ACTIVE.TIMES 行仍可保留,规范也明确允许这种情况。

因此,看到一行可以支持一个狭窄命题:这台服务器保存着某个组名、一个本地创建时间和一段创建者描述的关联。它不能保证 GROUP 今天成功,不能证明文章仍在,也不能要求其他服务器接受同一时间或创建者。

要判断当前服务,必须把历史行与新获取的活跃名单相连。只读档案就推导持续可用,相当于把记忆误当成承诺。

空白更不能宣布历史不存在

负面推断的危险更大。历史名单可以漏掉任何资料已经不可得的组,也可以从某个较新的时间才开始保存。新服务器可能导入当前组表,却没有继承旧服务器的沿革文件。

所以,找不到一行只证明这次响应没有那一行。它不证明这个组从未创建,不证明名字无效,也不证明别的服务器没有记录。

只有系统承诺完整覆盖时,缺失才可能成为强否定证据。ACTIVE.TIMES 明确不作这个承诺。它把“未知”留在系统里,防止自动化把资料缺口改写成删除命令。

NEWGROUPS 是另一扇历史窗口

NEWGROUPS 按给定时间查询此后在服务器上创建的组。RFC 3977 认为它有时是更好的访问方法,并要求结果通常与 ACTIVE.TIMES 一致;但当查询时间早于历史名单最老记录时,它可能返回更多组。

这类差异可以暴露保存窗口,却不能制造全球时间线。可靠记录必须同时保存回答者、观察时间、客户端身份、查询范围和当时的活跃目录。

两台服务器也可能为同一名字记录不同时间,因为它们在不同时间完成本地创建。这种不一致首先说明分布式采纳过程,不自动说明谁在造假。

创建者文字没有继承创建权力

人们容易把第三字段读成权利主体。协议只称它为描述实体的文本,并不验证该文本,也不授予所有权。RFC 5537 把真正的决策放在另一处:newgroup 是请求,每个服务代理按本地政策认证,并可拒绝执行。

后来的历史行能够记住本地事件所附的标签,却不能重放当时的认证材料,更不能要求其他站点追认。记录结果与产生结果的权限必须保持分离。

这正是“账本不是王位”的协议版本:账本可以帮助追溯,却不能因为保存了一行就获得原决策的全部权威。

注册表协调名称,不接管事实

IANA 的 NNTP 参数注册表 把 LIST 登记为一组命令变体的能力标签,并指向 RFC 3977。共同名称让客户端知道如何询问。

登记不证明某台服务器支持 ACTIVE.TIMES,不保证历史有多长,也不认证创建者文本。IANA 负责协议词汇,具体数据仍由每台服务器保留并解释。

这个边界让分布式系统避免了一个不必要的全球权威:服务器只需诚实说明自己现在提供什么、过去还记得什么。

真正可靠的证据允许接缝存在

把当前清单和历史审计合成一张表,看起来整洁,却会强迫系统撒谎。迁移只保住服务而丢失沿革时,合并表会假装历史连续;退役组仍有记录时,合并表又必须删除真实过去才能显示干净现在。

NNTP 保留了接缝。活跃名单描述行动能力,ACTIVE.TIMES 描述有限记忆,创建者文本描述线索而非权利。

两份名单可以不一致,因为它们回答的不是同一个问题。协议的成熟,不在于消灭差异,而在于阻止差异被误读成全球权力。

来源