如何配置指定Aeron发送数据时使用的发送端源端口
Aeron发送端固定源端口配置方法
核心配置逻辑
Aeron原生支持指定Publication发送时的固定源端口,无需修改源码,所有配置通过通道URI参数完成。默认未指定本地绑定参数时,媒体驱动会在创建Publication时随机选择空闲UDP端口作为源端口绑定,只要显式指定本地绑定的端点信息即可实现固定源端口。
点对点单播场景配置(匹配问题描述场景)
问题描述的A到B的通信属于普通点对点单播场景,配置步骤如下:
- 提前确认机器A和2.2.2.2路由可达的出口网卡IP(例:
1.1.1.1),确定要固定使用的源端口(例:54321),注意所选端口不能被本机其他进程占用 - 修改机器A上的Publication通道配置,新增local-endpoint参数指定本地绑定的IP和端口
- 原随机源端口配置示例:
aeron:udp?endpoint=2.2.2.2:12345|stream-id=1001 - 固定源端口后的配置示例:
aeron:udp?endpoint=2.2.2.2:12345|local-endpoint=1.1.1.1:54321|stream-id=1001
- 原随机源端口配置示例:
- 机器B上的Subscription无需做任何调整,保持原有配置即可正常接收数据。
特殊场景配置说明
如果使用MDC(多目的地分发)模式的动态Publication,固定源端口需要通过control参数指定本地绑定地址,配置示例:
aeron:udp?control=1.1.1.1:54321|control-mode=dynamic|stream-id=1001
该模式下所有发往该Publication关联目的地的数据包,都会使用54321作为固定源端口。
配置注意事项
- 指定的固定源端口必须处于未被占用状态,否则Publication会创建失败,抛出端口占用相关异常
- local-endpoint/control中填写的本地IP必须是机器A上实际存在、且和目标地址路由可达的网卡IP,不要随意填写环回地址或不存在的IP,否则会导致通信异常
- 若将本地IP填为
0.0.0.0,Aeron会绑定本机所有网卡的指定端口,并根据系统路由表自动选择出口网卡,生产环境建议明确指定出口IP避免路由错误 - 同一台机器上不能同时启动多个绑定了相同本地IP+端口的Publication,否则会出现端口冲突
配置完成后可通过抓包工具验证,机器A发出的数据包源端口会固定为指定值,不再随机分配。
内容的提问来源于stack exchange,提问作者JulienBe
相关产品推荐
相关产品推荐

