Joh*_*nck 5 c sockets multicast ttl setsockopt
发送UDP多播时,您可以使用IP_MULTICAST_TTL设置TTL.但否则你会用IP_TTL.为什么这两种不同的选择在setsockopt()和getsockopt()?是否有任何情况下单独设置它们是否有意义?
在我看来,他们最终在IP头中设置了相同的值.
这些选项实际上的功能不同
设置IP_MULTICAST_TTL仅影响传出的多播数据报,而不影响单播数据报.相反,设置IP_TTL选项(至少在Linux上)仅影响传出的单播数据报.这允许您使用一个TTL进行多播,使用一个TTL进行单播.
IPv6有类似的标志,即IPV6_MULTICAST_HOPS和IPV6_UNICAST_HOPS.
最好将多播数据包的TTL设置得尽可能低.这可以防止它们被广泛传播到比需要更广泛的范围并充斥网络段.对于单播数据报而言,这不是一个真正的问题,因为它们仅用于单个机器.
因此,如果您计划从同一个套接字发送多播和单播数据报,则使用它可能是有意义的.
在CentOS 7.2(内核3.10)和Ubuntu 16.04(内核4.4)上确认了这种行为.