如今,Usenet 的规模已经变得非常庞大。 承载整个网络新闻站点的站点通常每天传输大约 60 MB 的少量数据。[1] 当然,这不仅仅是推送文件。 因此,让我们来看看大多数 Unix 系统处理 Usenet 新闻的方式。
新闻始于用户创建和发布文章。 每个用户在名为新闻阅读器的特殊应用程序中输入消息,该应用程序对其进行适当格式化,以便传输到本地新闻服务器。 在 Unix 环境中,新闻阅读器通常使用 inews 命令,使用 TCP/IP 协议将文章传输到新闻服务器。 但是,也可以将文章直接写入名为新闻假脱机目录的特殊目录中的文件。 一旦帖子传递到本地新闻服务器,它将负责将文章传递给其他新闻用户。
新闻通过各种传输方式在网络中分发。 以前使用的媒介是 UUCP,但现在主要的流量由 Internet 站点承载。 使用的路由算法称为洪泛。 每个站点都维护到其他站点的多个链接(新闻馈送)。 本地新闻系统生成或接收的任何文章都会转发给它们,除非它已在该站点,在这种情况下将被丢弃。 站点可以通过查看路径标头字段来了解文章已遍历的所有其他站点。 此标头包含文章已通过的以 bang 路径表示法表示的所有系统的列表。
为了区分文章并识别重复项,Usenet 文章必须携带消息 ID(在消息 ID标头字段中指定),它将发布站点的名称和序列号组合为 <序列号@站点 >。 对于处理的每篇文章,新闻系统都会将此 ID 记录到历史文件中,并根据该文件检查所有新到达的文章。
任意两个站点之间的流量可能受到两个标准的限制。 首先,文章被分配一个分发(在分发标头字段中),该字段可用于将其限制在特定站点组。 另一方面,交换的新闻组可能受到发送和接收系统的限制。 允许传输到站点的新闻组和分发集通常保存在sys文件中。
文章的庞大数量通常需要对上述方案进行改进。 在 UUCP 网络上,系统会在一段时间内收集文章,并将它们组合成一个文件,该文件被压缩并发送到远程站点。 这称为批处理。
另一种技术是 ihave/sendme 协议,该协议可防止重复文章被传输,从而节省网络带宽。 不是将所有文章都放入批处理文件中并发送,而是仅将文章的消息 ID 组合成一个巨大的“ihave”消息并发送到远程站点。 远程站点读取此消息,将其与历史文件进行比较,然后在“sendme”消息中返回其想要的文章列表。 仅发送请求的文章。
当然,ihave/sendme 仅当它涉及两个大型站点时才有意义,这两个站点各自从多个独立的新闻源接收新闻,并且彼此轮询的频率足以实现高效的新闻流。
Internet 上的站点通常依赖于基于 TCP/IP 的软件,该软件使用网络新闻传输协议 (NNTP)。 NNTP 在 RFC-977 中进行了描述; 它负责新闻服务器之间的新闻传输,并为远程主机上的单个用户提供 Usenet 访问。
NNTP 知道三种不同的新闻传输方式。 一种是 ihave/sendme 的实时版本,也称为推送新闻。 第二种技术称为拉取新闻,其中客户端请求给定新闻组或层次结构中在指定日期之后到达服务器站点的文章列表,并选择其历史文件中找不到的文章。 第三种技术用于交互式新闻阅读,允许您或您的新闻阅读器从指定的新闻组检索文章,以及发布具有不完整标题信息的文章。
在每个站点,新闻都保存在以下目录层次结构中/var/spool/news,每篇文章在一个单独的文件中,每个新闻组在一个单独的目录中。 目录名称由新闻组名称组成,组件是路径组件。 因此,comp.os.linux.misc 文章保存在/var/spool/news/comp/os/linux/misc。 新闻组中的文章按照到达顺序分配编号。 此编号用作文件名。 当前在线文章的编号范围保存在名为active的文件中,该文件同时充当您的站点已知的新闻组列表。
由于磁盘空间是有限的资源,因此您必须在一段时间后开始丢弃文章。[2] 这称为过期。 通常,来自某些组和层次结构的文章在到达后固定天数后过期。 海报可以通过在Expires文章标题字段中指定到期日期来覆盖此设置。
您现在有足够的信息来选择接下来要阅读的内容。 UUCP 用户应阅读有关 第 21 章中 C-News 的内容。 如果您使用的是 TCP/IP 网络,请阅读有关 第 22 章中 NNTP 的内容。 如果您需要通过 TCP/IP 传输适量的新闻,那么该章中描述的服务器可能对您来说足够了。 要安装可以处理大量资料的重型新闻服务器,请继续阅读有关 第 23 章中 InterNet News 的内容。
[1] | 等一下:60 兆字节,速率为 9,600 bps,那是 6000 万乘以 1,024,也就是… 嘟囔,嘟囔… 嘿! 那是 34 个小时! |
[2] | 有人声称 Usenet 是调制解调器和硬盘供应商的阴谋。 |