简单的 Linux IP 中继器扩展 HomePlug 范围
电力线通信 (PLC) 技术允许您通过电网的低压和中压电力线传输数据。因此,建筑物中的任何设备都可以访问 LAN 以共享资源。图 1 显示了我们目前正在使用的 Ovislink HomePlug 以太网桥。

图 1. HomePlug 以太网桥
PLC 具有明显的优势,主要优势是不需要铺设电缆,因为网络基础设施已经部署到位——电网。然而,PLC 也存在很大的局限性,例如
高衰减,因此仅在短距离内有效。
阻抗随电源周期而变化,这是由于存在二极管和变压器等非线性器件。
设备开启和关闭时偶尔发生的阻抗变化。
由于家庭电网拓扑结构引起的反射。
电力线通常缺少接地连接。
为了避免这些问题,HomePlug 使用了鲁棒的正交频分复用 (OFDM) 方案,带有 1,280 个正交正交幅度调制 (QAM) 载波。因此,HomePlug 的最大点对点范围约为 200 米。
为了进一步扩展范围,我们开发了一个简单的 Linux IP 中继器。我们已经在桌面电脑和基于嵌入式微控制器的开发卡上实现了它。后者产生了一种小型、低功耗、低成本的设备,可以轻松安装在任何建筑物位置。
我们将网络划分为 C 类子网(图 2),以便同一子网内的任何两个设备都能相互看到。子网中的设备无需中继器即可通信,因此我们仅在连接不同子网中的设备时才需要它。任何两个子网中的一部分设备都可以看到另一子网中的一部分设备。
假设中继器最初安装在父子网 192.168.0.X 中,地址为 192.168.0.1(可以是任何地址)。对于任何新的子网 192.168.X.X,我们为中继器网关保留 IP 地址 192.168.X.1。当数据包的目的 IP 地址不属于发送者子网时,中继器会路由它。实际上,中继器不进行路由,因为同一传输线支持数据包的入口和出口。因此,它不需要路由表,只需使用相同的介质中继数据包。
为了使中继器属于不同的子网,它必须有多个 IP 地址。换句话说,有必要为其以太网卡分配多个网络接口。在图 2 所示的示例中,中继器卡有两个网络接口,其 IP 地址分别为 192.168.0.1 和 192.168.120.1。在 Linux 中,这样做如下
# ifconfig eth0:0 192.168.0.1 # ifconfig eth0:1 192.168.120.1
子网的数量事先未知,因此中继器必须自动配置自身。在我们的试验中,我们将其 IP 地址设置为 192.168.0.1,如典型的商用内置 DHCP 服务器一样。
我们使用一个名为 hprmanager 的程序实现了中继器自配置,现在可以通过电子邮件从 pedro@det.uvigo.es 获取。该程序将以太网卡设置为混杂模式,并查找新的子网以注册它们。
中继器通过捕获网络中循环的每个数据包来发现它互连的子网。在永久状态下,即使以太网卡处于混杂模式,由于网络卡和电力线之间放置了 PLC 调制解调器(图 2),它也不会接收到所有数据包。此 PLC 调制解调器阻止除目标地址是广播地址、多播地址或中继器地址本身之外的所有数据包。但是,中继器必然会接收来自未知子网的广播和多播数据包。在任何情况下,也可以手动设置网络接口。
每台计算机都必须选择其自身子网中的网关。假设我们正在配置子网 192.168.0.X 中的计算机,它必须将 192.168.0.1 设置为默认网关
# route add default gw 192.168.0.1
要在桌面 Linux 机器上配置中继器,需要执行以下几项操作
通过将以下行添加到 /etc/sysctl.conf 来激活数据包转发模块
net.ipv4.ip_forward = 1
分配默认 IP 地址;如前所述,中继器的地址为 192.168.0.1。
启动中继器管理器。假设它位于 /bin/ 中,只需将此行添加到 /etc/rc.d/rc.local
/bin/hprmanager &
此过程适用于大多数 Linux 发行版。对于那些没有 /etc/sysctl.conf 文件(例如 Debian)的发行版,首先需要创建一个 shell 脚本文件(以#! /bin/sh) 命名为 /etc/init.d/local,其中包含以下行/bin/hprmanager &。最后,应将脚本添加到所需的运行级别,例如
update-rc.d local start 80 2 3 4 5
由于 μClinux 在嵌入式系统上运行,因此上一节中的设置必须在加载后立即生效。μClinux 操作系统的默认安装不包括数据包中继模块。因此,我们首先必须编译一个具有数据包中继支持的内核,使用以下四个配置步骤
在“网络选项”部分启用“IP:高级路由器”选项(图 3)。
在“文件系统”部分启用“/proc 文件系统支持”选项。
在“常规设置”部分启用“Sysctl 支持”选项。
使用图 5 中所示的板卡,我们必须在“以太网(10 或 100Mbit)”部分禁用“CS89x0 以太网的硬件字节交换支持”选项(图 4)。
最后,我们通过修改初始化脚本 /etc/rc 来完成中继器设置的三个关键步骤。首先,激活列表 1 的第 11 行中显示的数据包转发模块。其次,分配默认 IP 地址,如第 15 行所示。第三,启动中继器管理器,如第 19 行所示。
列表 1. /etc/rc 的修改
1 hostname uCsimm 2 /bin/expand /etc/ramfs.img /dev/ram0 3 mount -t proc proc /proc 4 mount -t ext2 /dev/ram0 /var 5 mkdir /var/tmp 6 mkdir /var/log 7 mkdir /var/run 8 mkdir /var/lock 9 mkdir /var/empty 10 11 echo "1" > /proc/sys/net/ipv4/ip_forward 12 13 ifconfig lo 127.0.0.1 14 route add -net 127.0.0.0 netmask 255.0.0.0 lo 15 ifconfig eth0 192.168.0.1 promisc \ netmask 255.255.255.0 broadcast 192.168.0.255 16 17 portmap & 18 cat /etc/motd 19 /bin/hprmanager &
我们已在 Motorola MC68EZ328 DragonBall 微控制器板(图 5)上成功测试了这些设置,该板具有 8MB RAM、2MB Flash ROM、10Mbps 以太网卡和 μClinux v2.4.24 操作系统。
扩展的 HomePlug 网络可以通过调制解调器路由器连接互联网。图 6 代表了这种情况。
让我们考虑 Linux 桌面中继器来说明提供互联网连接的解决方案。如果父子网中的路由器的地址为 192.168.0.1,则必须为中继器分配不同的地址。此外,路由表确实会更改。但是,子网 B 中计算机的配置是相同的。它们只需通过中继器路由 Internet 数据包,首先发出
# route add default gw 192.168.120.1
子网 A 中的计算机通过中继器将数据包路由到子网 B,而面向 Internet 的数据包直接通过路由器。在这些计算机中,我们必须执行以下命令
# route add -net 192.168.120.0 netmask 255.255.255.0 gw 192.168.0.2 dev eth0 # route add default gw 192.168.0.1
中继器必须通过设置以下内容,通过路由器路由面向 Internet 的数据包
# route add default gw 192.168.0.1
最后,路由器通过中继器将数据包发送到子网 B。配置过程取决于路由器型号。一种典型且简单的方法是通过在任何 Web 浏览器中访问 URL http://192.168.0.1 登录到基于 Web 的配置。然后,有必要通过网关 192.168.0.2 添加路由 192.168.120.0/24。
我们测试中最有趣的结果是,除了中继器允许超出 HomePlug 范围的通信外,当两个节点几乎看不到彼此时,它还可以增强通信。这是因为可用的 HomePlug 载波数量增加。
为了清晰起见,在我们的测试中,我们假设父子网中没有互联网连接的配置。首先,我们测量了在没有中继器的情况下彼此看不到的三层建筑物中两台个人计算机之间的响应时间和吞吐量。我们测试了 UDP 和 TCP 流量。我们使用了 Qcheck 工具,这是 Ixia 的网络检查实用程序。使用基于桌面的中继器,我们获得的 TCP 和 UDP 流量的响应时间约为 100 毫秒,吞吐量在 2Mbps 范围内。这对于中等大小的家庭来说是实际的性能。
在第二个测试中,我们在两台几乎看不到彼此的计算机之间插入了中继器。插入中继器后,TCP 和 UDP 的响应时间都翻了一番(大约 50 到 100 毫秒)。然而,吞吐量从 1.5Mbps 增长到 2Mbps。
我们目前正在具有 100-BaseT 以太网接口的卡上测试 μClinux 版本,例如 μCdimm ColdFire 和 EV-S3C4530,它们均来自 Arcturus Networks。
本文资源: /article/8527。
Francisco J. González-Castaño 是西班牙维戈大学电信工程系 GTI 组的教授 (www-gti.det.uvigo.es)。他从事高性能网络技术和分布式计算等领域的研究。
Pedro S. Rodríguez-Hernández 是西班牙维戈大学电信工程系 GTI 组的教授。他从事实时和嵌入式系统方面的工作。
Felipe J. Gil-Castiñeira 是西班牙维戈大学电信工程系 GTI 组的助理教授。他从事无线网络技术及其应用方面的工作。
Miguel Rodelgo-Lacruz 是西班牙维戈大学电信工程系 GTI 组的研究员。他从事高性能网络技术方面的工作。
José Valero-Alonso 最近在西班牙维戈大学电信工程系 GTI 组获得了工程学位。他对计算机体系结构和客户端-服务器系统感兴趣。