多播广播自我澄清

时间:2019-01-24 18:20:33

标签: networking multicast

设置:

用户有两个应用程序-一个发送方一个接收方-在同一主机/服务器上运行。用户对其进行设置,以便发件人将消息发送到其自己的IP地址而不是127.0.0.1。为了简单起见,假设其IP和端口为x:y。然后,用户将接收方设置为在x:y上接收消息。同样,它在同一台主机/服务器上。

问题:

  1. 据我了解,这是不可能的,因为该端口已被保留。因此,我不能使用相同的端口尝试向自己发送数据包。我可以在同一节点上使用用于发送方和接收方的端口吗?
  2. 如果我使用SO_REUSEADDR可以解决此问题,还是只能解决IP冲突而不解决端口重用问题?
  3. 如果未使用IP_MULTICAST_LOOP设置程序,主机将不会向自身多播消息,对吗?
  4. 设置了IP_MULITCAST_LOOP后,如果我只想向自己发送消息,可以使用127.0.0.1,还是必须使用其他地址?此外,端口如何解析?
  5. 如果我没有在同一节点上看到消息,那么最好的猜测是未设置IP_MULITCAST_LOOP吗?

1 个答案:

答案 0 :(得分:0)

让我们逐步进行:

  1. 发送端口根本没有关系。因此,您可以为发送方选择一个任意端口,并为接收方使用特定的端口号来提供服务。

  2. 否,SO_REUSEADDR / PORT无法解决此问题。即使您设法做到这一点:不要在同一端口上启动多个侦听器。这会造成奇怪的影响。 SO_REUSEADDR / PORT的主要目的是允许服务器在先前的服务器进程刚刚终止时创建一个TCP(而非UDP)套接字,而无需等待过时套接字的TCP状态机超时。

  3. 更正,假设您是说 multicast 而不是 broadcast

  4. 是,不是:如果您只想向自己发送消息,则可以将数据包发送到127.0.0.1,然后您的消息将是普通的单播数据包,不再是多播数据包,而IP_MULTICAST_LOOP不会根本不重要。组播数据包是普通UDP数据包,其目的地址在组播地址范围内(即224.0.0.0-239.255.255.255)。接收套接字无法轻易分辨出数据包是通过单播还是通过多播发送的。

  5. 接口之间同一主机上的
  6. IP路由并非易事。普通路由表中仅显示所涉及的许多机制和路由规则,仅用于传出流量。它还取决于您尝试观察消息的方式。没有一个地方可以看到所有消息通过一个节点(不幸的是)。通常,所有这些都附加到接口,并且还附加到入口和出口侧,并且入口和出口侧通常没有文档记录且不可配置。监视本地流量可能很棘手,可能需要虚拟网络接口。真的很乱。

摘要:您正在尝试将消息从一个进程发送到同一主机上的另一个进程。为此,使用单播UDP,就可以完成。不涉及多播。