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