摘要

  • RFC 977把重复文章视为取决于链路的成本:交互式节点可以先比对已有文章,再决定是否传送正文。
  • 同一份RFC仍认可单次事务式UUCP链路先批量发送、接收端再丢弃重复项,因为这可能比逐项协商更快。

1986年2月,Brian Kantor与Phil Lapsley发布了RFC 977,即网络新闻传输协议(NNTP)的提案。它最值得注意的观点,并非要让某一种传输方式统治Usenet,而是重复文章的代价取决于承载它的链路。若两个节点能保持交互式连接,它们可以先比对各自持有的文章,再决定传什么;若链路每天只拨通一次,为此来回交谈可能比传送一个重复件花费更多时间。

RFC描述的传统方式是逐站泛洪:每个站点把新文章发给自己的下游站点,下游再继续转发。一个站点若接入多个信息源,就可能收到同一篇文章两次。对定时或单次事务的传送而言,发送方不容易暂停并询问接收方是否已有该文。接收端先收下整批内容,再删除重复项。这样会消耗时间和通信资源,但会让这次传输保持简单。

NNTP让传输前的协商成为可能。客户端可以先询问服务器是否出现新新闻组,再查询自己关注的组里有哪些新文章,并请求自己尚未持有的文章。反向传送时,主机也能告诉对端自己刚收到哪些文章;服务器据此识别哪些副本已有、哪些仍需发送。文章正文不再是判断消息是否跨过链路的第一份证据:节点可以先交换文章标识。

这种选择取决于网络路径。RFC 977认为,连接良好的局域网或其他高速网络上的主机,可能用NNTP比UUCP等传统方式更高效地分发新闻。它也解释了UUCP批量逻辑为何合理:若一次会话只能完成单次事务,尤其每天才通信一次,先把文章全部发完、再由接收端删除重复件,可能缩短整体送达时间。交互式协商即使少传一些字节,也不一定总更省时。

RFC还描述了另一种用途,不能和站点之间的新闻交换混为一谈。大学或企业可以把新闻集中存入一个spool,让工作站经由局域网读取。用户从共享存储中挑选文章,而不必每台机器都保留完整副本。中间服务器也可缓存最近读取的文章。这是面向读者访问与存储的安排,并不表示整个Usenet共用一个中央数据库。

RFC 850早已规范USENET文章的格式,却刻意让传输方式保持弹性:各站点可自行选择设备、软件,以及是否批量传送。RFC 977延续了这种多样性。它规定了一种基于可靠字节流的查询、检索、发布和站点间交换办法,同时承认间歇性线路上的另一种传输方式可能更合适。其原则是有条件的:网络支持交互时就先对话;批量发送能省时,就继续批量发送。

这些RFC证明的是设计意图,不是全网迁移。RFC 977没有统计1986年有多少Usenet站点转用NNTP,没有量化节省的带宽,也不能证明每个实现都避开了重复传输。它的贡献更具体:文章选择成为节点间的一次实时协商,让接收方在发送正文前说明想要什么、已经有什么。

来源记录:RFC 977《网络新闻传输协议》;RFC 850《USENET消息交换标准》;RFC 1036《USENET消息交换标准》。