概述
wfb_rx 是 WFB-ng(WiFi Broadcast Next Generation)的接收端二进制程序,负责从 WiFi 无线网卡捕获无线数据包、解密、FEC 前向纠错解码,并将恢复后的 UDP 数据转发给下游应用。
该程序支持三种运行模式:
- LOCAL 模式(默认):本地接收 + FEC 聚合,直接从 WiFi 监控接口抓包并输出解密后的数据
- FORWARDER 模式(
-f):仅将原始无线数据包转发到客户端,不做 FEC 解码
- AGGREGATOR 模式(
-a):作为服务器接收来自多个 FORWARDER 的原始数据包并进行 FEC 聚合
使用方式
LOCAL 模式(本地接收 + 聚合)
1 2 3
| wfb_rx [-K rx_key] { [-c client_addr] [-u client_port] | [-U unix_socket] } \ [-p radio_port] [-R rcv_buf] [-s snd_buf] [-l log_interval] \ [-e epoch] [-i link_id] interface1 [interface2] ...
|
FORWARDER 模式(仅转发原始包)
1 2
| wfb_rx -f [-c client_addr] [-u client_port] [-p radio_port] \ [-R rcv_buf] [-s snd_buf] [-i link_id] interface1 [interface2] ...
|
AGGREGATOR 模式(远程聚合服务器)
1 2
| wfb_rx -a server_port [-K rx_key] { [-c client_addr] [-u client_port] | [-U unix_socket] } \ [-R rcv_buf] [-s snd_buf] [-l log_interval] [-p radio_port] [-e epoch] [-i link_id]
|
参数详解
| 参数 |
简写 |
说明 |
默认值 |
-K rx_key |
|
接收端密钥文件路径。用于解密从发送端收到的数据包。文件格式由 wfb_keygen 生成。 |
rx.key |
-f |
|
FORWARDER 模式标志。启用后仅将原始无线包转发给客户端,不进行 FEC 解码和聚合。适用于分布式部署场景中的远程采集节点。 |
关闭 |
-a server_port |
|
AGGREGATOR 模式 + 服务器监听端口。启用后作为 UDP 服务器接收来自多个 FORWARDER 节点的原始数据包并进行 FEC 聚合。此模式下不需要 WiFi 接口参数。 |
关闭 |
-c client_addr |
|
客户端地址。解密后的数据将发送到该 IP 地址的 UDP 端口(由 -u 指定)。在 AGGREGATOR/FORWARDER 模式中用于指定下游消费者地址。 |
127.0.0.1 |
-u client_port |
|
客户端 UDP 端口号。解密后的数据将发送到该端口。 |
5600 |
-U unix_socket |
|
Unix Domain Socket 路径。使用 Unix socket 代替 UDP 向下游传递数据。与 -c/-u 互斥,二选一。 |
空(不使用) |
-p radio_port |
|
无线电端口号。用于构建 channel_id = (link_id << 8) + radio_port,必须与发送端一致以正确匹配数据包。 |
0 |
-R rcv_buf |
|
接收缓冲区大小(字节)。设置 pcap/UDP socket 的接收缓冲区大小。增大此值可减少丢包,但会增加延迟。设为 0 使用系统默认值。 |
系统默认 |
-s snd_buf |
|
发送缓冲区大小(字节)。设置输出 socket 的发送缓冲区大小。设为 0 使用系统默认值。 |
系统默认 |
-l log_interval |
|
日志输出间隔(毫秒)。控制统计信息输出的频率。 |
1000 |
-e epoch |
|
纪元号。用于丢弃来自旧会话的包,防止重放攻击。每次重新启动发送端时会自动递增。设为 0 表示接受任何 epoch。 |
0 |
-i link_id |
|
链路 ID(24位)。用于构建 channel_id = (link_id << 8) + radio_port,实现多链路隔离。多个 WFB-ng 实例可以使用不同的 link_id 在同一物理网络上共存而不互相干扰。 |
0x000000 |
interface1 [interface2] ... |
|
WiFi 无线网卡接口名称列表(如 wlan0、wlan1)。在 LOCAL/FORWARDER 模式下为必需参数,指定用于捕获无线数据包的监控模式接口。AGGREGATOR 模式下不需要此参数。 |
- |
channel_id 计算方式
1
| channel_id = (link_id << 8) + radio_port
|
接收端和发送端的 channel_id 必须完全匹配才能正确通信。数据包中的 MAC 地址后四个字节即为 channel_id,BPF 过滤器在驱动层直接过滤不匹配的包以提高效率。
输出统计信息格式
程序运行时通过 stdout 输出制表符分隔的统计数据:
- RX - 接收端总体统计(时间戳、总包数、总字节数、解密错误、会话包、数据包、FEC恢复、丢失、损坏等)
- TX_ANT - 发送天线延迟统计
- RX_ANT - 接收天线 RSSI/SNR 统计
典型使用场景
1. 地面站本地接收(最常见)
1 2
| wfb_rx -K /etc/gs.key -c 127.0.0.1 -u 5600 wlan0
|
2. 多网卡接收(自动 TX 分集)
1 2
| wfb_rx -K /etc/gs.key -c 127.0.0.1 -u 5600 wlan0 wlan1 wlan2
|
3. 分布式部署 - FORWARDER 节点
1 2
| wfb_rx -f -c 192.168.1.100 -u 5700 wlan0
|
4. 分布式部署 - AGGREGATOR 节点
1 2
| wfb_rx -a 5700 -K /etc/gs.key -c 127.0.0.1 -u 5600
|
依赖库
- libpcap(无线数据包捕获)
- libsodium(加密/解密)
- librt(实时时钟)