6

发送 UDP 多播时,您可以使用IP_MULTICAST_TTL设置 TTL。但否则你会使用IP_TTL. 为什么这两个不同的选项在 和 的setsockopt()眼中getsockopt()?在任何情况下单独设置它们是有意义的吗?

在我看来,他们最终在 IP 标头中设置了相同的值。

4

1 回答 1

8

这些选项实际上功能不同。

设置IP_MULTICAST_TTL只影响传出的多播数据报,不影响单播数据报。相反,设置该IP_TTL选项(至少在 Linux 上)只影响传出的单播数据报。这允许您将一个 TTL 用于多播,一个 TTL 用于单播。

IPv6 也有类似的标志,即IPV6_MULTICAST_HOPSIPV6_UNICAST_HOPS

最好将多播数据包的 TTL 设置得尽可能低。这可以防止它们被传播得比需要的范围更广,并淹没网络段。这对于单播数据报来说并不是一个真正的问题,因为它们只用于一台机器。

因此,如果您计划从同一个套接字发送多播和单播数据报,使用它可能是有意义的。

此行为在 CentOS 7.2(内核 3.10)和 Ubuntu 16.04(内核 4.4)上得到确认。

于 2018-03-26T12:39:04.920 回答