contents
下一篇: C-News 上一级: Netnews 上一篇: Usenet 到底是什么?

Usenet 如何处理新闻?

如今,Usenet 已经发展到极其庞大的规模。 承载整个 netnews 的站点通常每天传输大约区区六十兆字节的数据。gif 当然,这需要的不仅仅是简单地推送文件。 因此,让我们来看看大多数系统处理 Usenet 新闻的方式。

新闻通过各种传输方式在网络中分发。 历史上使用的媒介是 UUCP,但如今主要的流量由 Internet 站点承载。 使用的路由算法称为洪泛:每个站点维护与其他站点的若干链接(新闻源)。 本地新闻系统生成或接收的任何文章都会转发给它们,除非该站点已经看过该文章,在这种情况下,文章将被丢弃。 站点可以通过查看 Path: 标头字段来了解文章已经遍历的所有其他站点。 此标头包含文章已通过 bang path 表示法转发的所有系统的列表。

为了区分文章并识别重复项,Usenet 文章必须携带消息 ID(在 Message-Id: 标头字段中指定),它将发布站点的名称和序列号组合成 ``<serial@site>''。 对于处理的每篇文章,新闻系统都会将此 ID 记录到历史文件中,以便对照该文件检查所有新到达的文章。

任意两个站点之间的流量可能受到两个标准的限制:首先,文章被分配一个分发范围(在 Distribution: 标头字段中),该范围可用于将其限制在特定的站点组中。 另一方面,交换的新闻组可能受到发送或接收系统的限制。 允许传输到站点的新闻组和分发范围的集合通常保存在 sys 文件中。

文章数量之多通常需要对上述方案进行改进。 在 UUCP 网络上,自然的做法是在一段时间内收集文章,并将它们组合成一个单独的文件,该文件经过压缩并发送到远程站点。 这称为批处理gif

一种替代技术是 ihave/sendme 协议,它可以从一开始就阻止重复的文章被传输,从而节省网络带宽。 不是将所有文章放入批处理文件中并发送它们,而是仅将文章的消息 ID 组合成一个巨大的 “ihave” 消息并发送到远程站点。 它读取此消息,将其与历史文件进行比较,并在 “sendme” 消息中返回它想要的文章列表。 然后仅发送这些文章。

当然,ihave/sendme 只有在涉及两个大型站点时才有意义,这两个站点各自从多个独立的新闻源接收新闻,并且彼此之间进行足够频繁的轮询以实现高效的新闻流。

站点位于 Internet 上通常依赖于基于 TCP/IP 的软件,该软件使用网络新闻传输协议 NNTP。gif 它在新闻源之间传输新闻,并为远程主机上的单个用户提供 Usenet 访问。

NNTP 知道三种不同的新闻传输方式。 一种是 ihave/sendme 的实时版本,也称为推送新闻。 第二种技术称为拉取新闻,其中客户端请求给定新闻组或层级结构中在指定日期之后到达服务器站点的文章列表,并选择其历史文件中找不到的文章。 第三种模式用于交互式新闻阅读,允许您或您的新闻阅读器从指定的新闻组检索文章,以及发布标头信息不完整的文章。

在每个站点,新闻都保存在 /var/spool/news 下的目录层次结构中,每篇文章在一个单独的文件中,每个新闻组在一个单独的目录中。 目录名称由新闻组名称组成,组件是路径组件。 因此,comp.os.linux.misc 文章保存在 /var/spool/news/comp/os/linux/misc 中。 新闻组中的文章按照到达顺序分配编号。 此编号用作文件名。 当前在线文章的编号范围保存在名为 active 的文件中,该文件同时充当站点已知新闻组的列表。

由于磁盘空间是有限的资源,gif 因此必须在一段时间后开始丢弃文章。 这称为过期。 通常,来自某些组和层级结构的文章在到达后固定天数后过期。 发布者可以通过在文章标头的 Expires: 字段中指定过期日期来覆盖此设置。


contents
下一篇: C-News 上一级: Netnews 上一篇: Usenet 到底是什么?

Andrew Anderson
1996 年 3 月 7 日星期四 23:22:06 EST