iOS Bonjour 通过互联网进行通信

6

我知道iOS的Bonjour实现(NSNetService,NSNetServiceBrowser)可以在本地网络上直接使用。

文档中提到可以设置Bonjour DNS服务器以便通过互联网连接用户,因此我的问题是:

  1. Bonjour DNS服务器接口是什么?是否有示例可以开始操作?
  2. DNS服务器是否负责对等方的初始握手/连接和其余部分(发送/接收数据)直接协商?
  3. DNS服务器是否提供NAT打洞机制?

谢谢!

1个回答

4
Bonjour本地服务发现基于“多播DNS”。每当某个客户端想要了解网络或网络上的服务的任何信息时,它使用多播地址 224.0.0.251,这意味着只有在该多播组内的客户端才能一起使用Bonjour。 RFC5771将244.0.0/24 IP地址空间定义为“本地网络控制块”,不会转发到您的本地网络之外。
但是,实际上,Bonjour只是一种基于DNS的方法-您可以告诉NSServiceBrowser在非本地域中搜索,这仅需要DNS服务器对特定请求做出响应(如手动向现有名称服务器添加DNS-SD服务发现记录所述),这允许通过互联网进行服务发现,甚至如果您使DNS更新工作正常(设置Bonjour名称服务器)还可以进行服务注册,但仅限于此-您必须自己考虑打孔问题。
所以,赶快给自己弄一个BIND服务器并开始尝试吧 ;)

谢谢回复!难道 iOS 没有基于互联网的点对点框架吗? - sternr
至少我不知道有任何现成的解决方案.. 如果你想自己编写代码,就必须深入了解框架。 如果你要连接的设备彼此靠近,你可以使用Bump的API来连接设备,并通过“碰一下”在任何网络上传输数据。 - Martin Ullrich
关于“打孔”的评论是不正确的。只有在计算机拥有公共地址或可以通过NAT-PMP或uPNP进行端口转发协商时,Bonjour才会在广域区域注册服务。 - andrewtj
1
我刚刚进行了一个快速测试:使用C DNS服务发现API在未配置在我的OS X系统上的域中注册导致Bonjour设置了端口转发并尝试添加该域中的记录。这次失败是因为所涉及的区域需要TSIG才能更新。因此,我认为只要您允许开放式更新(因为在iOS上无法设置TSIG凭据),它应该可以正常工作。如有任何问题,请随时给我发电子邮件。 - andrewtj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接