深入了解 NNTP 协议及其应用
1. NNTP 简介
网络新闻传输协议(NNTP)为新闻交换提供了一种与 C News 及其他无原生 NNTP 支持的新闻服务器截然不同的方法。它不依赖于像 UUCP 这样的批量技术在机器间传输新闻文章,而是允许通过交互式网络连接交换文章。NNTP 并非特定软件包,而是在 RFC - 977 中描述的互联网标准,基于面向流的连接(通常通过 TCP),连接网络中任意位置的客户端与将网络新闻存储在磁盘上的主机服务器。这种流连接使客户端和服务器能以近乎无周转延迟的方式交互式协商文章传输,从而减少重复文章数量。结合互联网的高传输速率,NNTP 的新闻传输能力远超原始的 UUCP 网络。
1.1 NNTP 的特点
- 高效传输 :能快速传播新闻文章,过去一篇文章可能需两周或更久才能传遍 Usenet,现在通常不到两天,在互联网上甚至只需几分钟。
- 多种操作命令 :客户端可使用各种命令检索、发送和发布文章。发送和发布的区别在于,发布的文章可能包含不完整的标题信息,通常意味着用户刚撰写完文章。
- 两种传输方式 :提供主动(“推送”)和被动(“拉取”)两种新闻传输方式。
1.2 推送和拉取新闻
- 推送新闻 :客户端通过 IHAVE msgid 命令向服务器提供文章,服务器返回响应代码,表明是否已有该文章或是否想要。若服务器想要,客户端发送文章,以单独一行的单个点结束。但推送新闻会给服务器系统带来沉重负载,因为系统需为每篇文章搜索其历史数据库。
- 拉取新闻 :客户端使用 NEWNEWS 命令请求指定日期后到达的某个组中所有(可用)文章的列表,从返回的消息 ID 列表中,客户端使用 ARTICLE 命令依次选择其尚未拥有的文章。拉取新闻需要服务器严格控制客户端可请求的组和分发,以确保本地新闻组的机密材料不会发送给未经授权的客户端。
1.3 新闻阅读器的便利命令
NNTP 还为新闻阅读器提供了许多便利命令,允许它们分别检索文章标题和正文,甚至从一系列文章中检索单个标题行。这使得可以将所有新闻保存在中央主机上,网络上的所有用户使用基于 NNTP 的客户端程序进行阅读和发布,是通过 NFS 导出新闻目录的替代方案。
1.4 NNTP 的问题与解决方法
NNTP 存在一个问题,即允许有经验的人以虚假发件人信息将文章插入新闻流,这被称为新闻伪造或欺骗。不过,NNTP 的扩展允许对某些命令要求用户身份验证,以提供一定程度的保护。
2. NNTP 协议的实际应用
2.1 连接新闻服务器
连接新闻服务器只需打开到其 NNTP 端口的 TCP 连接。连接后,会收到欢迎横幅。可以尝试的第一个命令之一是 help,响应通常取决于服务器认为你是远程 NNTP 服务器还是新闻阅读器,因为需要不同的命令集。可以使用 mode 命令更改操作模式。
$ telnet news.vbrew.com nntp
Trying 172.16.1.1...
Connected to localhost.
Escape character is '^]'.
200 news.vbrew.com InterNetNews server INN 1.7.2 08 - Dec - 1997 ready
help
100 Legal commands
authinfo
help
ihave
check
takethis
list
mode
xmode
quit
head
stat
xbatch
xpath
xreplic
For more information, contact "usenet" at this machine.
.
2.2 推送新闻文章到服务器
使用 IHAVE 命令推送新闻文章时,发送方服务器为每篇要推送的文章发出 IHAVE 命令。若接收方 NNTP 服务器生成的命令响应代码在“3xx”范围内,发送方将传输完整文章(包括完整标题),以单独一行的单个点结束。若响应代码在“4xx”范围内,接收方服务器可能因已拥有该文章或出现问题(如磁盘空间不足)而拒绝接受。
ihave <123456@gw.vk2ktj.ampr.org>
335
From: terry@gw.vk2ktj.ampr.org
Subject: test message sent with ihave
Newsgroups: junk
Distribution: world
Path: gw.vk2ktj.ampr.org
Date: 26 April 1999
Message - ID: <123456@gw.vk2ktj.ampr.org>
Body:
This is a test message sent using the NNTP IHAVE command.
.
235
2.3 切换到 NNRP 阅读器模式
新闻阅读器与新闻服务器通信时使用自己的命令集,需将服务器设置为阅读器模式。大多数新闻服务器默认处于阅读器模式,除非连接主机的 IP 地址被列为新闻转发对等方。可使用 mode reader 命令明确切换到阅读器模式。
mode reader
200 news.vbrew.com InterNetNews NNRP server INN 1.7.2 08 - Dec - 1997 ready/
(posting ok).
help
100 Legal commands
authinfo user Name|pass Password|generic <prog> <args>
article [MessageID|Number]
body [MessageID|Number]
date
group newsgroup
head [MessageID|Number]
help
ihave
last
list [active|active.times|newsgroups|distributions|distrib.pats|/
overview.fmt|subscriptions]
listgroup newsgroup
mode reader
newgroups yymmdd hhmmss ["GMT"] [<distributions>]
newnews newsgroups yymmddhhmmss ["GMT"] [<distributions>]
next
post
slave
stat [MessageID|Number]
xgtitle [group_pattern]
xhdr header [range|MessageID]
xover [range]
xpat header range|MessageID pat [morepat...]
xpath MessageID
Report problems to <usenet@vlager.vbrew.com>
.
2.4 列出可用组和活动组
- 列出可用组 :使用 list newsgroups 命令列出服务器支持的组。
list newsgroups
215 Descriptions in form "group description".
control
News server internal group
junk
News server internal group
local.general
General local stuff
local.test
Local test group
.
- 列出活动组 :使用 list active 命令显示每个支持的组及其相关信息,输出中的两个数字分别是高水位标记和低水位标记,即每个组中编号最高和最低的文章,最后一个字段显示控制该组是否允许发布、是否受审核以及发布的文章是实际存储还是仅传递的标志。
list active
215 Newsgroups in form "group high low flags".
control 0000000000 0000000001 y
junk 0000000003 0000000001 y
alt.test 0000000000 0000000001 y
.
2.5 发布文章
发布文章比推送文章更简单,用户只需提供有意义的标题(如主题和要发布到的新闻组),新闻服务器会添加其他标题并创建消息 ID。
post
340 Ok
From: terry@richard.geek.org.au
Subject: test message number 1
Newsgroups: junk
Body:
This is a test message, please feel free to ignore it.
.
240 Article posted
2.6 列出新文章
新闻阅读器首次连接到新服务器且用户选择新闻组浏览时,使用 newnews 命令检索自用户上次登录以来发布或接收的新文章列表,需提供三个必需参数:要查询的组名、开始日期和开始时间(均以六位数表示)。
newnews junk 990101 000000
230 New news follows
<7g2o5r$aa$6@news.vbrew.com>
<7g5bhm$8f$2@news.vbrew.com>
<7g5bk5$8f$3@news.vbrew.com>
.
2.7 选择操作组
用户选择新闻组浏览时,新闻阅读器可使用 group 命令告知新闻服务器所选组,简化与服务器的交互。该命令返回活动消息数量、低水位标记、高水位标记和组名。
group junk
211 3 1 3 junk
2.8 列出组中的文章
使用 listgroup 命令列出当前组或指定组中的活动文章编号。
listgroup junk
211 Article list follows
1
2
3
.
2.9 仅检索文章标题和正文
- 仅检索标题 :使用 head 命令请求服务器仅将指定文章的标题传输给新闻阅读器,可使用文章编号或消息标识符引用文章。
head 2
221 2 <7g5bhm$8f$2@news.vbrew.com> head
Path: news.vbrew.com!not - for - mail
From: terry@richard.geek.org.au
Newsgroups: junk
Subject: test message number 2
Date: 27 Apr 1999 21:51:50 GMT
Organization: The Virtual brewery
Lines: 2
Message - ID: <7g5bhm$8f$2@news.vbrew.com>
NNTP - Posting - Host: localhost
X - Server - Date: 27 Apr 1999 21:51:50 GMT
Body:
Xref: news.vbrew.com junk:2
.
- 仅检索正文 :使用 body 命令请求服务器仅传输消息正文。
body 2
222 2 <7g5bhm$8f$2@news.vbrew.com> body
This is another test message, please feel free to ignore it too.
.
2.10 读取组中的文章
使用 article 命令可获取完整文章(包括标题),若尝试检索未知文章,服务器将返回带有适当编码响应代码的消息和可读文本消息。
article 1
220 1 <7g2o5r$aa$6@news.vbrew.com> article
Path: news.vbrew.com!not - for - mail
From: terry@richard.geek.org.au
Newsgroups: junk
Subject: test message number 1
Date: 26 Apr 1999 22:08:59 GMT
Organization: The Virtual brewery
Lines: 2
Message - ID: <7g2o5r$aa$6@news.vbrew.com>
NNTP - Posting - Host: localhost
X - Server - Date: 26 Apr 1999 22:08:59 GMT
Body:
Xref: news.vbrew.com junk:1
This is a test message, please feel free to ignore it.
.
article 4
423 Bad article number
3. NNTP 服务器的安装与访问限制
3.1 安装 NNTP 服务器
NNTP 服务器(nntpd)可根据新闻系统的预期负载以两种方式编译,由于可执行文件中硬编码了一些特定于站点的默认值,没有预编译版本,所有配置通过 common/conf.h 中定义的宏完成。nntpd 可配置为独立服务器(从 rc 文件在系统启动时启动)或由 inetd 管理的守护进程。
3.1.1 配置为 inetd 管理的守护进程
需在 /etc/inetd.conf 中添加以下条目:
nntp
stream
tcp nowait
news
/usr/etc/in.nntpd
nntpd
3.1.2 确保 /etc/services 中的条目
nntp
119/tcp
readnews untp
# Network News Transfer Protocol
3.1.3 创建临时目录
nntpd 需要在新闻假脱机目录中创建一个 .tmp 目录来临时存储传入文章,可使用以下命令创建:
# mkdir /var/spool/news/.tmp
# chown news.news /var/spool/news/.tmp
3.2 限制 NNTP 访问
通过 /etc/news 中的 nntp_access 文件控制对 NNTP 资源的访问,文件中的每行描述授予外国主机的访问权限,格式如下:
site
read|xfer|both|no
post|no
[!exceptgroups]
-
site 字段的指定方式 :
- 主机名 :主机的完全限定域名,若与客户端的规范主机名完全匹配,该条目适用,后续条目将被忽略。
- IP 地址 :点分十进制表示的 IP 地址,若与客户端的 IP 地址匹配,该条目适用,后续条目将被忽略。
- 域名 :指定为 *.domain 的域名,若客户端的主机名与域名匹配,该条目匹配。
- 网络名称 :/etc/networks 中指定的网络名称,若客户端 IP 地址的网络编号与该网络名称关联的网络编号匹配,该条目匹配。
- 默认 :字符串 default 匹配任何客户端。
-
其他字段含义 :
- 第二个字段详细说明通过拉取(read)检索新闻和通过推送(xfer)传输新闻的权限,both 表示两者都启用,no 表示完全拒绝访问。
- 第三个字段授予客户端发布文章的权利,若第二个字段为 no,则忽略第三个字段。
- 第四个字段可选,包含客户端被拒绝访问的组的逗号分隔列表。
3.3 总结
NNTP 协议为网络新闻的传输和管理提供了强大而灵活的解决方案。通过了解其基本原理、操作命令以及服务器的安装和配置方法,用户可以更好地利用 NNTP 进行新闻的检索、发布和共享。同时,注意 NNTP 存在的安全问题(如新闻伪造),并通过适当的扩展(如用户身份验证)来增强安全性。在实际应用中,根据具体需求选择合适的 NNTP 软件包(如 nntpd 或 INN),并合理配置服务器以满足不同的负载和功能要求。
以下是 NNTP 操作流程的 mermaid 流程图:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(连接新闻服务器):::process
B --> C{选择操作模式}:::decision
C -->|新闻阅读器| D(切换到阅读器模式):::process
C -->|远程服务器| E(正常操作):::process
D --> F(执行阅读器命令):::process
E --> G(执行服务器命令):::process
F --> H(列出可用组/活动组):::process
F --> I(发布文章):::process
F --> J(列出新文章):::process
F --> K(选择操作组):::process
F --> L(列出组中文章):::process
F --> M(检索文章标题/正文/完整文章):::process
G --> N(推送新闻文章):::process
H --> O(获取组信息):::process
I --> P(服务器添加标题和消息 ID):::process
J --> Q(获取新文章列表):::process
K --> R(简化交互):::process
L --> S(获取活动文章编号):::process
M --> T(根据需求获取文章内容):::process
N --> U(服务器响应):::process
O --> V(完成操作):::process
P --> V
Q --> V
R --> V
S --> V
T --> V
U --> V
V --> W([结束]):::startend
通过以上的介绍和操作说明,希望能帮助你全面了解 NNTP 协议及其在实际应用中的使用方法。无论是个人用户浏览新闻,还是管理员搭建和管理新闻服务器,NNTP 都能提供高效、便捷的解决方案。在使用过程中,要注意安全问题,合理配置服务器,以确保新闻的安全传输和管理。
4. NNTP 不同操作的对比分析
4.1 推送与拉取新闻的对比
| 对比项 | 推送新闻 | 拉取新闻 |
|---|---|---|
| 操作方式 | 客户端主动向服务器提供文章 | 客户端向服务器请求文章列表并选择获取 |
| 服务器负载 | 高,需为每篇文章搜索历史数据库 | 相对较低,但需严格控制客户端请求 |
| 适用场景 | 适合快速传播特定文章 | 适合客户端按需获取文章 |
| 数据流向 | 客户端 -> 服务器 | 服务器 -> 客户端 |
4.2 发布与推送文章的对比
| 对比项 | 发布文章 | 推送文章 |
|---|---|---|
| 文章状态 | 首次创建,标题信息可能不完整 | 已存在,有完整标题和唯一消息 ID |
| 操作流程 | 用户提供部分关键标题,服务器添加其他标题和消息 ID | 客户端提供完整文章和消息 ID,服务器判断是否接收 |
| 复杂度 | 相对简单 | 相对复杂,需服务器判断响应 |
4.3 不同检索方式的对比
| 检索方式 | 命令 | 用途 | 数据量 |
|---|---|---|---|
| 仅检索标题 | head [MessageID|Number] | 了解文章基本信息,决定是否阅读全文 | 较小 |
| 仅检索正文 | body [MessageID|Number] | 已确定阅读,仅获取正文内容 | 取决于文章长度 |
| 检索完整文章 | article [MessageID|Number] | 一次性获取文章全部内容 | 完整文章大小 |
5. NNTP 应用案例分析
5.1 个人用户使用场景
个人用户通常使用新闻阅读器通过 NNTP 协议连接新闻服务器,浏览和发布新闻。以下是个人用户的操作步骤:
1.
连接服务器
:使用新闻阅读器软件,配置服务器地址和 NNTP 端口(通常为 119)。
2.
切换到阅读器模式
:若服务器未默认设置为阅读器模式,使用 mode reader 命令切换。
3.
选择新闻组
:使用 list newsgroups 列出可用组,使用 group 命令选择感兴趣的组。
4.
浏览文章
:使用 newnews 列出新文章,使用 head 查看文章标题,决定是否阅读全文,使用 article 获取完整文章。
5.
发布文章
:使用 post 命令,填写主题、新闻组和正文,服务器自动添加其他标题和消息 ID。
5.2 企业新闻服务器搭建场景
企业可能需要搭建自己的新闻服务器,为内部员工提供新闻服务。以下是搭建步骤:
1.
选择软件包
:根据企业规模和需求,选择合适的 NNTP 软件包,如 nntpd 或 INN。
2.
安装服务器
:按照前文介绍的方法,编译和配置 nntpd 服务器,包括设置启动方式(独立服务器或 inetd 管理)、配置 /etc/services 和创建临时目录。
3.
限制访问
:编辑 /etc/news 中的 nntp_access 文件,限制外部主机的访问权限,确保企业新闻的安全性。
4.
配置新闻组
:根据企业需求,创建和管理内部新闻组,设置发布权限和审核机制。
5.
测试和维护
:使用测试客户端连接服务器,测试各项功能是否正常,定期维护服务器,确保新闻服务的稳定性。
6. NNTP 未来发展趋势
6.1 安全性增强
随着网络安全问题日益严重,NNTP 协议将进一步加强安全性。除了现有的用户身份验证扩展外,可能会引入更多的加密技术,确保新闻传输过程中的数据安全,防止新闻伪造和信息泄露。
6.2 与其他技术融合
NNTP 可能会与其他新兴技术(如云计算、大数据等)融合,提供更强大的新闻服务。例如,利用云计算的弹性计算能力,应对突发的高流量访问;通过大数据分析,为用户提供个性化的新闻推荐。
6.3 移动端支持
随着移动设备的普及,NNTP 协议将更好地支持移动端应用。开发专门的移动端新闻阅读器,提供更便捷的操作界面和更好的用户体验,使用户能够随时随地浏览和发布新闻。
6.4 标准化改进
为了更好地适应不断变化的网络环境和用户需求,NNTP 协议的标准化可能会进一步改进。更新相关的 RFC 文档,规范协议的使用和扩展,提高不同 NNTP 软件之间的兼容性。
以下是 NNTP 未来发展趋势的 mermaid 流程图:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([当前 NNTP]):::startend --> B(安全性增强):::process
A --> C(与其他技术融合):::process
A --> D(移动端支持):::process
A --> E(标准化改进):::process
B --> F([未来 NNTP]):::startend
C --> F
D --> F
E --> F
7. 总结与建议
7.1 总结
NNTP 协议作为一种成熟的网络新闻传输协议,为新闻的交换和共享提供了高效、灵活的解决方案。它具有多种操作命令和传输方式,能够满足不同用户的需求。通过合理配置服务器和限制访问权限,可以确保新闻的安全传输和管理。同时,随着技术的发展,NNTP 也在不断改进和完善,以适应新的网络环境和用户需求。
7.2 建议
- 对于个人用户 :选择安全可靠的新闻阅读器,注意保护个人信息,避免在不可信的新闻组发布敏感信息。
- 对于企业管理员 :定期更新服务器软件,加强安全配置,监控服务器的访问日志,及时发现和处理安全问题。
- 对于开发者 :关注 NNTP 协议的标准化更新,开发更具创新性和用户友好性的 NNTP 客户端和服务端软件。
通过深入了解 NNTP 协议及其应用,无论是个人还是企业,都能更好地利用网络新闻资源,实现新闻的有效传播和共享。同时,不断关注 NNTP 的发展趋势,为未来的网络新闻服务做好准备。
超级会员免费看
99

被折叠的 条评论
为什么被折叠?



