配置 ATM 网络
Linux ATM 软件(设备驱动程序和实用程序)由瑞士的 Werner Almsberger 开发和支持,作为 Linux-ATM API 软件集的一部分(参见“资源”)。该软件包含以下 ATM 适配器的设备驱动程序:Efficient ENI-155P、SMC ATM Power 155、Rolf Fiedler 的 TNETA1570 板卡、Zeitnet ZN1221/ZN1225 以及 IDT 77901/77903 155 和 25 Mbps 适配器。此外,Fore PCA-200E ATM 适配器的驱动程序也可单独获得(参见“资源”)。我有使用经验的两个适配器是 Efficient ENI-155p 和 Fore PCA-200E。
美国国家标准与技术研究院 (NIST) 使用 ATM 和快速以太网网络作为其可扩展集群计算计划中的互连。一个研究领域是评估 ATM 和快速以太网网络在这种集群环境中的优势。
在本文中,我将告诉您如何获取和安装 ATM 支持软件和设备驱动程序。我还将描述如何配置 PC 和交换机上的 ATM 连接,以用于 IP 网络流量。
我使用的 ATM 接口卡是 Efficient Networks 生产的 ENI-155P ATM 适配器和 Fore Systems 生产的 PCA-200EPC 适配器。这些卡安装在运行 Linux 的标准 Pentium 或 Pentium-Pro 架构的 PC 中。我在本文中使用的 ATM 交换机是 Fore ASX-1000,尽管我提供的信息适用于所有 Fore ATM 交换机。可以设置此交换机,以允许 Linux 工作站通过交换虚电路 (SVC) 和永久虚电路 (PVC) 使用 IP。
ATM 软件可从 http://lrcwww.epfl.ch/linux-atm/ 获取。该软件打包为压缩的 gzipped tar 文件。每个版本的软件都与特定版本的 Linux 内核相关联。在本文中,我使用了在 Linux 内核 2.1.90 上运行的 0.35 版本。ATM 软件发行版的大小约为 500KB。Fore PCA-200E 适配器的设备驱动程序可以通过匿名 FTP 从 ftp://os.inf.tu-dresden.de/pub/pca200e/ 获取。有关更多信息,请参阅 PCA200 发行版中的 README 文件。
Linux-ATM 软件的驱动程序部分以及 Linux 内核的更改都作为一个大型补丁文件发布。因此,为 Linux 内核添加 ATM 支持非常简单:应用内核补丁,以通常的方式配置并重新构建内核。您必须具备的 ATM 配置项是
异步传输模式 (ATM) (CONFIG_ATM)
基于 ATMARP 的经典 IP over ATM (CONFIG_ATM_ATMARP)
设备驱动程序,以下之一:Efficient Networks ENI155P (CONFIG_ATM_ENI)ZeitNet ZN1221/ZN1225 (CONFIG_ATM_ZATM)Rolfs TI TNETA1570 (CONFIG_ATM_TNETA1570)IDT 77201 (NICSTAR) (CONFIG_ATM_NICSTAR)
我建议在应用 ATM 补丁之前,先使用全新的 Linux 内核源代码树。请参阅作为 Linux-ATM 软件一部分的 USAGE 文件,因为情况可能会发生变化。发行版中的所有设备驱动程序都可以构建为内核模块或作为内核对象本身的一部分。如果您使用的是 Fore PCA-200E 适配器,则在内核配置期间无需选择驱动程序。PCA-200E 设备驱动程序作为模块单独构建,如 PCA200 发行版中包含的 README 文件中所述。
内核修补、重新构建和安装完成后,即可构建 ATM 支持软件。同样,请参阅 USAGE 文件中的说明。我建议的一个更改是将支持文件安装在 /usr/local/atm-version/bin 中,并从 /usr/local/atm 创建到实际安装目录的软链接。通过使用软链接,您可以更改 ATM 软件级别并在需要时将其回滚,而无需更改配置文件。
现在您可以配置 IP over ATM 了。首先,您必须决定使用哪种类型的“虚电路”来连接机器。ATM 是一种点对点、交换技术;为了使两台主机进行通信,必须在它们之间建立虚电路。
交换虚电路 (SVC) 是动态建立的连接,并在不再需要连接时拆除。但是,建立连接会产生较高的延迟。此外,如果连接上没有发送任何流量,SVC 将在超时一段时间后被删除。因此,与 SVC 相关的延迟并不总是可预测的。我在使用 SVC 时遇到了一些问题,例如连接未建立或有时无法保持打开状态。
永久虚电路 (PVC) 已建立并保持打开状态。因此,与使用 SVC 时不同,建立连接不会产生延迟。PVC 的缺点是必须配置交换机以建立主机之间的所有连接。当您有多台主机并且每台主机都需要与所有其他主机通信时,ATM 交换机内所需的 PVC 数量会迅速增长。SVC 和 PVC 的具体配置信息将在稍后讨论,但我将提前介绍一点,以便现在完成 IP 配置。配置 ATM 接口的步骤如下
使用以下命令启动 ATM 软件守护程序
atmsigd -b ilmid -b atmarpd -b
创建 ATM 设备名称
atmarp -c atm0
为 IP 配置 ATM 接口
ifconfig atm0 ipaddr netmask netmask mtu mtu
添加 ATM 子网的路由
route add -net network netmask netmask atm0
为 ARP 服务器创建永久 ATM ARP(地址解析协议)缓存条目
atmarp -s arpserver arpsrvnsap arpsrv
ipaddr 是 ATM 接口的 IP 地址,netmask 是网络掩码,network 是我们连接的网络的 IP 地址。arpserver 是 ATM ARP 服务器的 IP 地址,arpsrvnsap 是 ARP 服务器的 ATM 地址。ATM ARP 服务器用于将 IP 地址转换为 ATM 网络服务访问点 (NSAP) 地址。(NSAP 地址类似于媒体访问控制 (MAC) 地址,长度为 20 个八位字节。)建立节点之间的 SVC 需要 NSAP 地址。您还可以创建一个 /etc/hosts.atm 文件来包含 IP 到 NSAP 的映射,从而更快地进行 IP 到 NSAP 的转换。对于我的网络,我使用 Fore 交换机作为 ARP 服务器。atmarpd 守护程序维护 IP 到 NSAP 映射的缓存。atmarp 命令在使用 arpsrv 选项时使 ARP 缓存条目永久生效。
最后一个注意事项:如果您仅使用 PVC,则无需启动 atmsigd 和 ilmid 守护程序。列表 1 包含配置命令的完整示例。
我使用的 ATM 交换机配置命令适用于整个 Fore ATM 交换机系列,因为它们都具有相似的命令界面。
使用 SVC 时,主机必须将信息传递到 ATM 交换机,声明其与另一台主机建立连接的意图。连接建立的术语是“信令”。主机和交换机之间使用的 ATM 协议是用户网络接口 (UNI) 信令标准。UNI 标准有多个修订版。Fore ATM 交换机支持 UNI 3.0、3.1 和 4.0。Linux-ATM 软件也支持这些版本。
但是,标准是标准,实现是实现。在设置我们的 SVC 时,我遇到了 UNI 3.0 信令的几个问题。UNI 3.1 信令更稳定可靠。要更改 Fore ATM 交换机上的信令,必须使用交换机控制处理器 (SCP) 命令界面单独更改每个端口。
首先,通过 TELNET 会话或使用连接到 Fore 交换机上串行端口的终端登录到 SCP。此处使用的命令语法与 Fore 的语法相同。必需参数显示在 “<” 和 “>” 之间;选项括在方括号 (“[” 和 “]”) 中;选项的修饰符括在圆括号中。必须选择修饰符之一。
更改为 UNI 配置菜单
localhost::> conf uni
交换机提示符以斜体显示,而命令以正常文本显示。
show 命令将列出每个端口的当前 UNI 状态。如果端口已配置为 UNI 3.1,则无需进行任何更改。否则,您必须首先删除当前配置。删除命令的语法为 del port vpi,其中 port 是交换机端口,vpi 是虚拟路径标识符(通常为 0)。要删除端口 1A1 上 VPI 0 的信令,您将输入此命令
localhost::configuration uni> del 1a1 0
现在您可以为 UNI 3.1 配置端口了。新命令的语法是
new <port><vpi> [auto | uni30 | uni31] [-ilmi (up | down)]当您希望端口响应集成本地管理接口 (ILMI) 请求时,使用 ilmi 选项。ILMI 由主机使用以获取分配给主机的 ATM NSAP 地址。您通常希望端口的 ILMI 处于活动状态,因此端口 1A1、VPI 0 的命令是
localhost::configuration uni> new 1a1 0 uni31 -ilmi up
现在 ATM 交换机端口已配置完成,必须设置工作站上的软件。Linux-ATM 软件的关键部分是三个守护程序:atmsigd 用于处理信令 (UNI),ilmid 用于处理 ATM 地址注册,atmarpd 用于将 ATM 地址映射到 IP 地址。列表 1 是我用来启动 ATM 守护程序并在主机上配置 ATM 接口的启动脚本。可以从系统启动脚本(例如 /etc/rc.d/rc.local)调用此脚本,以在启动时配置 ATM 接口。ATM 信令守护程序 atmsigd 必须专门为您希望使用的信令版本编译,并且必须与 ATM 交换机端口已配置为使用的信令版本兼容。ATM 软件中使用的默认版本是 UNI 3.0。如果您已将交换机配置为使用 UNI 3.1,则由于向后兼容性,让主机使用 UNI 3.0 很可能可以工作。但是,我建议您将 Linux-ATM 软件配置为使用与交换机相同的版本,即 UNI 3.1。
要让信令守护程序使用 UNI 3.1,请编辑 ATM 源代码目录(如果您按照 USAGE 文件中的步骤操作,则为 /usr/src/atm)中的 Rules.make 文件。您需要更改 STANDARDS 行以指定要支持的信令版本。对于 UNI 3.1,此行应为:STANDARDS=-DUNI31。
如果您使用的是 Efficient ENI-155p ATM 卡,则可用的同时虚拟通道数量有限。ENI 卡通过使用适配器卡上的内存作为缓冲区来执行 ATM 信元的分割和重组 (SAR)。主机 ATM 软件为每个虚拟通道分配缓冲区空间。如果您尝试打开的 SVC 数量超过可用缓冲区空间支持的数量,您将收到来自 ATM ARP 守护程序的以下错误消息
atmarpd:IO: [2]connect: No buffer space available
当使用 IP over ATM 时,设备驱动程序使用 ATM 适配层 (AAL) 将数据包发送到 ATM 卡。虽然有多个适配层可用,但 AAL-5 用于 IP。AAL-5 数据包是一种服务数据单元 (SDU),在某种程度上类似于以太网帧。AAL-5 数据包由 Efficient ATM 适配器划分为单个 ATM 信元。
ATM 接口的 MTU(最大传输单元)大小取决于 SDU 大小。IP over ATM(经典 IP)规范规定 MTU 不应大于 9180 字节。AAL-5 尾部还有 8 个字节,因此 IP over ATM 的 SDU 在默认配置中为 9188 字节。卡上需要的缓冲区空间量取决于最大 SDU 大小。
Linux-ATM 软件分配最大 SDU 大小的三倍,并向上舍入到最接近的 2 的幂。在默认配置中,此分配导致为每个 ATM 连接保留 32KB 的缓冲区空间(9180 x 3 = 27540,四舍五入为 32768 字节)。此外,使用经典 IP 会建立两个 SVC:发起机器打开到目标机器的活动连接,目标机器打开返回的活动连接,即发起者上的被动连接。因此,这两个连接导致在 ATM 卡上分配两个缓冲区,总共 64KB。
默认配置允许主机在使用“客户端”版本的 ENI-155p ATM 卡时最多有 14 个并发连接,该卡具有 512KB 的内存,其中 504KB 的内存可用于 SAR 缓冲区。当使用 SVC 时,这 14 个连接允许使用 IP over ATM 与其他七个主机进行通信。如果您设置 PVC,则可以与其他 14 个主机进行通信。当使用 ARP 服务器时,您可用的连接将减少一个,主机计数也减少一个。“服务器”版本的 ENI 155p 卡具有 2MB 的内存,其中 2040KB 用于 SAR 缓冲区,从而允许更多并发连接。
要增加经典 IP 的并发连接数,您需要更改 ATM 接口上设置的最大 SDU 大小。通过使用上面给出的分配规则,您可以估算连接所需的内存量。例如,如果您希望每个连接使用 16KB,则最大 SDU 将为 16384 除以 3,即 5461 字节。在本文的示例中,我将使用 4352 字节的 SDU。
最大 SDU 被指定为 ATM ARP 守护程序的选项。但是,当 SDU 更改时,还必须将 IP 接口配置为具有与 SDU 相同大小的 MTU,减去 AAL-5 尾部的 8 个字节。因此,在我的示例中,MTU 为 4344 字节。
更改接口的最大 SDU 时可能会出现一个潜在问题:ATM ARP 守护程序 (atmarpd) 可能无法与 Fore 交换机上的 ARP 服务器通信。我们的交换机仅接受 SDU 为 9188 字节的连接。解决此问题的方法是在主机上创建永久 ARP 缓存条目,为与 ARP 服务器的连接指定最大 SDU 为 9188 字节。在工作站上配置 ATM 软件的步骤如下
为您的 MTU 大小配置 IP 接口,在我的示例中为 4344 字节
ifconfig atm0 ipaddr netmask netmask mtu 4344
为 SDU 大小为 9188 的 ARP 服务器创建永久 ATM ARP 缓存条目
atmarp -s arpserver arpsrvnsap qos \ ubr:sdu=9188 arpsrv
在 ATM 接口上配置 SDU(MTU 加 8 字节)
atmarp -q network ubr:sdu=4352
有关为 Efficient 适配器配置 ATM 软件的完整示例,请参阅列表 1。
要建立 PVC,必须执行以下步骤。
在工作站上,在每个节点上添加一个 ATM ARP 条目,指定用于连接到每个其他主机的 PVC(vpi.vci 对)。
在交换机上创建 PVC。
例如,在适当的主机上执行以下命令将在名为 node1 和 node2 的节点之间、接口 0 上、使用 vpi 0 和 vci 70 设置 PVC
node1: atmarp -s node2 0.0.70
node2: atmarp -s node1 0.0.70
以上命令告诉 node1 通过 PVC 0.0.70 与 node2 通信,并告诉 node2 通过 PVC 0.0.70 与 node1 通信。atmarp 命令将目标主机的 IP 地址链接到 PVC。您可以为每个连接选择不同的 PVC,但更简单的方法是考虑一个 PVC 连接两台机器。
vpi.vci 对不得在主机上使用。此外,在创建 PVC 之前,必须删除目标主机的任何 ATM ARP 缓存条目。(当打开到目标主机的 SVC 时,会创建这些缓存条目。)要在 node1 上删除 node2 的 ARP 缓存条目,您将使用此命令
node1: atmarp -d node2
接下来,必须配置交换机以完成主机之间的 PVC。了解 Fore 交换机使用的端口命名约定很有帮助。端口名称由三个标识符组成
板卡:交换机板卡的编号(与 SCP 编号相同);每个 SCP 控制一个交换机板卡。
网络模块:交换机板卡中包含端口的插槽(A、B、C 或 D)。
端口:网络模块上的物理端口号。
您现在必须在 ATM 交换机上创建虚拟通道。在我们的示例中,您将在 SCP 1 上输入以下命令
localhost::> conf vcc localhost::configuration vcc> new 1a1 0 70 1a2 0 70 localhost::configuration vcc> new 1a2 0 70 1a1 0 70
1a1 是 node1 的交换机端口,1a2 是 node2 的交换机端口。
交换机根据输入端口到输出端口的虚拟通道连接 (VCC) 映射完成 PVC。请注意,PVC vpi.vci (0.70) 与主机上 atmarp 命令给出的 vpi.vci 匹配。
以上命令将连接同一 ATM 交换机板卡上的两个端口。Fore ASX-1000 交换机最多有四个交换机板卡。如果您要连接不同交换机板卡上的机器,则过程更加复杂,因为您必须将每个端口连接到交换矩阵,并将矩阵连接到每个端口。因此,如果您希望将端口 1a1 上的机器连接到端口 3a1 上的机器,则需要以下命令
在 SCP 1 上
localhost::> conf vcc localhost::configuration vcc> new 1a1 0 70 1e3 0 70 localhost::configuration vcc> new 1e3 0 70 1a1 0 70
在 SCP 3 上
localhost::> conf vcc localhost::>configuration vcc> new 3a1 0 70 3e1 0 70 localhost::>configuration vcc> new 3e1 0 70 3a1 0 70在 Fore 交换机上,矩阵连接是插槽 e。因此,端口 1e3 指的是从交换机板卡 1 到交换机板卡 3 的连接。同样,3e1 指的是从交换机板卡 3 到交换机板卡 1 的连接。Fore 将这些端口称为“板卡内”端口。
经典 IP 设置完成后,可以执行所有标准网络测试。最简单的测试是通过使用 ping 命令来测试连接。SVC 和 PVC 连接之间的一个区别是,当使用 SVC 时,第一个 ping 响应的延迟很大。延迟的原因是建立 SVC 所需的设置时间。建立 SVC 后,SVC 和 PVC 连接的延迟应相同。
验证基本连接后,您可以在 ATM 连接上运行一些网络性能测试。我使用了 Netperf 工具(参见“资源”)以及本地开发的一些基准测试。最大吞吐量性能非常好,约为 132Mbps。这个数字接近 OC-3 ATM 网络的最大有效负载数据速率。
我提供了在具有 Linux 的 ATM 网络上设置交换机和主机所需的说明。给出的配置步骤特定于使用经典 IP 标准的 IP over ATM 连接。除了经典 IP 之外,局域网仿真 (LANE) 也可用于通过 ATM 传输 IP。Linux-ATM 软件也支持 LANE,但 LANE 的配置超出了本文的范围。有关更多信息,请参阅 Linux-ATM 发行版中的文档。
主机可以使用 ATM 接口以多种其他方式进行通信,而无需依赖经典 IP。ATM 软件支持“原生” ATM 套接字,应用程序可以通过 ATM 连接直接通信,完全绕过 IP 软件。
如果您有兴趣了解 ATM 技术但没有 ATM 硬件,Linux-ATM 软件可以为您提供帮助。该软件具有使用 TCP/IP 模拟 ATM 设备以建立实际连接的功能。通过利用此支持,您可以抢先一步配置 Linux 的 ATM 并学习 ATM 编程接口。
Wayne J. Salamon 是位于马里兰州盖瑟斯堡国家标准与技术研究院高性能系统和服务部门的计算机科学家。在过去的 12 年中,他一直从事 PC、UNIX 工作站和 IBM 大型机上的系统软件工作。在不做计算机工作时,他似乎弹吉他,但仅在连接到真空管放大器时。可以通过 wsalamon@nist.gov 联系 Wayne。