2. 分组无线电协议与 Linux

AX.25 协议提供面向连接和无连接的操作模式,既可以单独用于点对点链路,也可以用于承载其他协议,如 TCP/IP 和 NET/ROM。

它在结构上类似于 X.25 协议的第二层,但进行了一些扩展,使其在业余无线电环境中更有用。

NET/ROM 协议是对完整网络协议的一种尝试,它在最底层使用 AX.25 作为数据链路协议。它提供了一个网络层,是 AX.25 的一种改编形式。NET/ROM 协议具有动态路由和节点别名功能。

ROSE 协议由 Tom Moulton W2VY 构思并首次实现,它是 X.25 分组层协议的一种实现,旨在与 AX.25 作为其数据链路层协议一起运行。它也提供了一个网络层。ROSE 地址采用 10 位数字的形式。前四位数字称为数据网络识别码 (DNIC),取自 CCITT X.121 建议书的附录 B。有关 ROSE 协议的更多信息可以从 RATS Web 服务器 获得。

Alan Cox 开发了一些早期的基于内核的 AX.25 软件支持,用于 Linux。Jonathon Naylor 接手了代码的持续开发,添加了 NET/ROM 和 ROSE 支持,现在是 AX.25 相关内核代码的开发者。DAMA 支持由 Joerg, DL1BKE 开发。Baycom 和 Soundmodem 支持由 Thomas Sailer 添加。AX.25 软件现在由 SourceForge 上的一个小型开发者团队维护。

Linux 代码支持基于 KISS 和 6PACK 的 TNC(终端节点控制器)、Ottawa PI 卡、Gracilis PacketTwin 卡和其他使用通用 SCC 驱动程序的基于 Z8530 SCC 的卡、多个并行和串口 Baycom 调制解调器以及串口 YAM 调制解调器。Thomas Sailer 的内核声卡调制解调器驱动程序支持 SoundBlaster 和基于 Crystal 芯片组的声卡,他更新的用户模式声卡调制解调器使用标准内核声卡驱动程序,因此它应该可以与 Linux 下支持的任何声卡一起工作。

用户程序包含一个简单的 PMS(个人消息系统)、一个信标功能、一个行模式连接程序,监听(如何捕获原始接口级别上的所有 AX.25 帧的一个例子),以及配置 NET/ROM 协议的程序。还包括一个 AX.25 服务器风格的程序,用于处理和分发传入的 AX.25 连接,以及一个 NET/ROM 守护进程,它完成了 NET/ROM 支持的大部分繁重工作。

有一些实用程序支持 APRS,包括中继和网关连接到互联网。

2.1. 它是如何组合在一起的

Linux AX.25 实现是一个全新的实现。虽然在许多方面它可能看起来类似于 NOS 或 BPQ 或其他 AX.25 实现,但它不是其中任何一个,也不与其中任何一个相同。Linux AX.25 实现能够被配置为几乎与其他实现完全相同地运行,但配置过程非常不同。

为了帮助您理解在配置时您需要如何思考,本节描述了 AX.25 实现的一些结构特征,以及它如何融入到整体 Linux 结构的上下文中。

简化协议分层图
 _____________________________________________
|         |           |             |         |
| AF_AX25 | AF_NETROM |  AF_INET    | AF_ROSE |
|=========|===========|=============|=========|
|         |           |             |         |
|         |           |    TCP/IP   |         |
|         |           |________     |         |
|         |   NET/ROM          |    | ROSE    |
|         |____________________|____|_________|
|            AX.25                            |
|_____________________________________________|

此图简单地说明了 NET/ROM、ROSE 和 TCP/IP 都直接在 AX.25 之上运行,但这些协议中的每一个在编程接口都被视为一个单独的协议。“_”名称只是在编写程序来使用它们时赋予这些协议的“地址族”的名称。这里需要注意的重要事项是,在您可以配置您的 NET/ROM、ROSE 或 TCP/IP 设备之前,需要隐式地依赖于您的 AX.25 设备的配置。

Linux 网络实现的软件模块图
 ___________________________________________________________________________
|         |           |                       ||          |                 |
| User    | Programs  |   call        node    ||  Daemons | ax25d  mheardd  |
|         |           |   pms         mheard  ||          | inetd  netromd  |
|_________|___________|_______________________||__________|_________________|
|         | Sockets   |open(), close(), listen(), read(), write(), connect()|
|         |           |_____________________________________________________|
|         |           |   AF_AX25   |  AF_NETROM  |   AF_ROSE   |  AF_INET  |
|         |___________|_____________|_____________|_____________|___________|
|Kernel   | Protocols |   AX.25     |   NetRom    |     ROSE    | IP/TCP/UDP|
|         |___________|_____________|_____________|_____________|___________|
|         | Devices   |   ax0,ax1   |  nr0,nr1    | rose0,rose1 | eth0,ppp0 |
|         |___________|_____________|_____________|_____________|___________|
|         | Drivers   | Kiss   PI2   PacketTwin   SCC   BPQ     | slip ppp  |
|         |           |     Soundmodem      Baycom              | ethernet  |
|_________|___________|_________________________________________|___________|
|Hardware | PI2 Card, PacketTwin Card, SCC card, Serial port, Ethernet Card |
|_________|_________________________________________________________________|

此图比第一个图更通用一点。此图试图展示用户应用程序、内核和硬件之间的关系。它还展示了 Socket 应用程序编程接口、实际协议模块、内核网络设备和设备驱动程序之间的关系。此图中的任何内容都依赖于其下方的任何内容,总的来说,您必须从图的底部向上配置。例如,如果您想运行 call 程序,您还必须配置硬件,然后确保内核具有适当的设备驱动程序,您创建适当的网络设备,内核包含所需的协议,该协议提供 call 程序可以使用的编程接口。我已尝试按大致该顺序布局本文档。