假如我们先暂时将 P2P 放一放,可以发现 DNS 是分散式目录的一个优秀示例。与因特网本身相似,DNS 设计为甚至在部分网络受到严重破坏的情况下仍能工作。DNS 目录采用层次化结构,根目录代表顶级域(譬如“com”),它将子域查询服务(如“etcee.com”这样的域)的任务委派到下一层次的 DNS 服务器。
在任意一种情况下,只有目录位置必须配置到每个对等点中,这对于点到点模型有重要优势。为加入到 P2P,对等点将自己注册到集中目录服务器。回忆上面的图。当对等点 A 希望与一个它不知道位置的对等点交互时,对等点 A 向目录服务器发送请求。然后,目录服务器向 A 返回那个对等点的位置。
多播(multicast)模型 除了网络中的节点不必协助发现以外,多播模型和网络模型很相似。这种模型利用网络自身提供的特性来定位和确认对等点和资源。这种技术的实现(Sun Microsystems 的 PRoject Jxta 是一个极佳的示例;有关 Jxta的更多信息,请参阅参考资料)使用 ip 多播来实现查询。
不象单播(unicast) IP 数据报 — 一台主机,最多只能向一台主机发送数据报,多播 IP 数据报可以同时发往多台主机。更重要的是,发送方不必知道有多少接收方存在或者究竟有没有接收方存在。发送主机只是封装消息并将它发布到网络上。所有调整到适当频道(非凡 IP 地址和端口号的组合)的客户机将接收到该消息的一个副本。
使用 IP 多播技术的发现通过让对等点用多播定期公布自己的存在来工作。该消息包含对等点的 TCP/IP 主机名和端口号。对此消息感爱好的对等点检测这个消息后,抽取出主机名和端口号,并使用这个信息与新对等点建立正常的 TCP/IP 连接。
这就是多播是如何在单个子网上工作的。众多子网(组成整个网络)间的路由多播通信是完全不同的,并且是一个非常复杂的课题。这也是基于 IP 多播的发现的主要局限。没有路由器的支持,基于 IP 多播的发现被局限在同一子网上的对等点之间。不幸的是,因特网对多播并不友好。通常,因特网(或大型内部网)上的发现由跨网络边界的非凡对等点将消息复制到另一个网络中来实现。
结束语 P2P 应用程序的对等点发现是一个有趣的话题。下个月,我们将研究使用 IP 多播来查找活动对等点的对等点发现的实现。这个简单 P2P 应用程序代码的附加部分将消除一个最大的问题 — 对等点的点到点配置。