我有一台运行 Linux 2.6.33 的嵌入式设备发送大量多播数据,这通常是 LAN 上同类设备中的唯一设备。但是,在极少数情况下,同一网络上有两个或多个设备,我需要一种客户端连接方式来区分设备。
编辑:单个客户端只对来自单个设备的流量感兴趣。
我可以在每个数据报中嵌入一个标识符,但这意味着客户端需要花费宝贵的时间来检查数据包,这可能在驱动程序中更快地实现。慢速客户端肯定会开始丢包。
我可以为每个设备使用单独的多播 IP 地址,或者只区分每个设备发送到的端口。这已经实现。
我可以使用特定于源的多播。
我不知道最常见的操作系统和驱动程序实现 SSM 的效率如何,也不知道为每台设备使用不同的多播组是否比依赖 SSM 更快。
因为这完全取决于实现,所以我希望获得有关选项 2 和 3 的现场建议,并且我想知道仅切换多播端口是否足以区分流量。
最佳答案
在我看来,这三个选项之间并没有太大区别。这就是为什么。无论如何,多播流量都会到达客户端主机。现在是发件人区分部分。无论您选择哪种方式,都是比较的问题:
- 两个任意大小的标识符(您选择),但最有可能的是
int
s - 两个...
- IP 地址,在 IPv4 的情况下为 4 个字节,如果您选择使用不同的多播组
- 或端口,如果您选择使用不同的端口,则为 2 个字节
- 还是两个 IP 地址,但是比较将由内核执行,而不是您的应用程序
最重要的是,在性能方面没有太大区别,因为您将对两种原始数据类型执行一次比较。无论如何,这种比较将在几个处理器指令中实现,因此无论是在内核空间还是用户空间中执行都没有什么大不了的。
我会选择负担较小的编程方法。无论您选择哪种方法,性能都几乎相同。
关于linux - 特定于源的多播操作系统/驱动程序性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11995080/