4

这是一个有点晦涩的问题,但我很困惑,我想也许外面的人可能对这个问题有更多的线索。

我的同事几个月来一直在他的 MacBook Pro 上成功运行一个使用 IPv6 多播的内部应用程序,但今天 Mac 决定停止路由多播数据包。特别是,程序会打印此错误:

SendDataUDP(ff02::bead:cede:deed:feed@4) 在网络接口 [名称=[en0] 描述=[] IP=[fe80::222:41ff:fe21:dfd4@4] 网络掩码=[ffff: ffff:ffff:ffff::] Broadcast=[::]] (errno=65/没有到主机的路由)。

...这很好地描述了出了什么问题...它试图将 UDP 数据包发送到所示的 IP 地址,并且 send() 失败并显示 errno=EHOSTUNREACH。

我不明白的是,什么可能导致 IPv6 链接范围多播地址“无法访问”?如果我对链接范围多播的理解是正确的,则数据包只需从本地以太网端口(在这种情况下为 en0,它已启动并在该机器上工作)发出。

我是否缺少多播的某些方面,或者他的机器只是坏了?他说他没有改变任何东西,只是神秘地停止了工作。

4

2 回答 2

3

要测试 en0 是否仍然能够传输链路本地多播请求,请尝试

ping6 ff02::1%en0

这会联系所有主机,因此您应该得到大量响应(为了好玩,请尝试添加 -w)。

于 2009-08-12T16:46:28.147 回答
2

查看内核源代码可能会有所帮助。(特别是出口 IPv6 数据包出口路径,ip6_output.c)当您在那里时,您还可以查看导致它的套接字调用等。

对于多播,假设您将其设置为ip6_output(),看来获得此错误的唯一可能方法是不指定要发送的接口。(这很奇怪,因为您的错误消息明确提到了接口)

有没有可能这台 MacBook 上的无线接口在以前没有启用,而现在“链接本地”多播的想法是模棱两可的?使用套接字时是否明确指定接口?地址末尾的@4 在我看来很奇怪。(那是一个接口索引吗?)该约定通常%用于接口范围 ID,但如上一个答案及其评论中所述,它并未得到普遍支持。

于 2009-10-18T01:15:36.163 回答