IP多播技术

367 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

多播(multicase)是在网络层原生提供的一种多对多的通信方式,它并非通过本机完成多个消息的发送,而是通过路由器完成向多个目标发送的功能。

系统中对我们开放的接口在UDP的socket 上。 这也是UDP号称支持对多的原因。

使用

基本上同普通 UDP socket 一致,由此带来了第一个问题,它是需要端口的。

尽管看到的多播介绍一般只会说多播地址。实际上却还需要加上端口。这实际上也是一个常见多播技术中常见的坑。

与普通的 UDP 不同的是,它是需要向系统声明多播地址的。

同时它还需要指定本地使用的地址,而不像普通的 UDP 可以绑定所有地址。那么显然这里就要注意选择要和待接收数据机器处于同一网络内的地址进行绑定。

由于自身也处于多播组中,因此发出去的消息会回送给本机。 如果要避免本机接受,可以把回送请求关闭,具体可以参考相关 socket 选项。

由于编程方式的不同,可能有的人写程序接受多播数据采用的方式是使用不同的进程接受数据。 如果要复用这个 socket,请务必记得设置 socket 的地址复用。

各种值得注意坑

  • 回送的设置

作为多播组的成员,会接受到多播组的消息,甚至会接受自己的声音。如不需要可以通过设置关闭。

  • 无法接受消息(发送地址的原因) 请注意需要进行这种多对多通信的机器是否处于同一网络,以及绑定地址要求为该网络。 多网卡(各种虚拟网卡 VMware等)的机器尤其需要注意这个问题。

  • 无法接受消息(防火墙原因)

这个是一个需要注意,有的机器因为安全问题可能不允许这种流量的流入。还有的甚至不允许发出。这点尤其体现在windows机器上。而且可能没有办法解决。