对等计算实践:基于 IP 多播的发现

【信息科学与工程学】计算机科学与自动化——第三十五篇 调度理论和调度算法01——资源调度算法 算法逻辑 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 要完成有用的工作,P2P 应用程序中的对等点必须能够彼此发现对方并与对方交互。在上一篇文章中,Todd 描述了几种不同的机制,对等点可以使用这些机制彼此发现,他还解释了每种机制的优缺点。本月,他提供了一种基于 IP 多播的发现的实现。 在软件实体能够参与具有 P2P 应用程序特征的直接的对等交互之前,该实体必须发现将要与之交互的适当的对等点。所有可行的 P2P 体系结构都提供一种针对发现问题的解决方案。上一次,我们研究了实现发现的几种不同的方法。本月,我将描述其中一种机制的实现。让我们通过回顾来开始今天的讨论。 再访发现 对等点发现使 P2P 应用程序中的对等点能够彼此定位以便相互之间可以交互。实现对等点发现服务有多种方法。最简单的机制是显式点到点配置。这种机制通过要求每个对等点知道所有它可能与之交互的其它对等点,并与它们相连,来进行工作。点到点配置的主要优点是简单。它的主要缺点是缺乏灵活性并且缺少扩展到对等点的大型网络的能力。 发现的另一个公共模型是使用中央目录作为中介。该模型在许多传统的、非 P2P 分布式类型的应用程序中间很流行,其优点是很好理解。对等点向中央目录注册自己的存在,并使用中央目录定位其它对等点。这种模型的主要优点是易于管理和扩展的能力。但是,其集中化设计会导致单点故障,因此它对自然力或网上冲浪人数增加所带来的危害缺乏抵御能力。 许多流行的 P2P 应用程序使用网络模型而不是中央目录,在网络模型中,单个对等点只知道局域网络上的对等点身份。每个对等点都作为那些与之相连的对等点的目录。对等点通过向相邻对等点传播目录查询并返回相关的响应来进行合作。这种模型的主要优点是没有集中化。它的主要缺点是由于传播查询耗费了大量的网络和处理能力。 上面三种机制有无数种变体。不讨论这些变体了,让我们继续前进并研究另一种发现机制。 IP 多播发现 就每个对等点维护自己的目录这点而言,多播模型类似于网络模型。但是,对等点不通过合作来实现大规模网络查询。另外,对等点利用网络本身提供的特性(IP 多播)来定位和标识其它对等点。 IP 多播是无连接和不可靠的(不象 TCP/IP 是面向连接和可靠的)。虽然它使用 IP 数据报;但是不象单播 IP 数据报那样是从一台主机发送到另一台主机,多播 IP 数据报可以同时发往多台主机。 对等点定期使用 IP 多播来宣布自己的存在。宣布包含了它们的主机名和一个用于正常通信的端口。对此消息感兴趣的对等点检测这个消息后,抽取出主机名和端口号,并使用该消息建立一个通信通道。 回顾已经足够了。让我们开始研究代码吧。 简单的客户机与服务器 我们将从一个简单的示例开始,该示例演示了两个进程如何使用 IP 多播进行通信。为了简化演示,我将分别从客户机和服务器进程这两个方面来介绍示例。P2P 应用程序通常会实现这两个进程,将它们划分为客户机或服务器并不容易。 在本例中,服务器进程进行循环并等待数据报包的到来。每接收到一个包,服务器就会向控制台打印一条简短的诊断消息。客户机角色要简单得多 — 它多播单个数据报包并退出。 清单 1 和 2 说明了这两部分是如何组合在一起的。代码中的注释说明了正在发生的事情。 清单 1. 简单服务器 public class Server { public static void main(String [] arstring) { try { // Create a multicast datagram socket for receiving IP // multicast packets. Join the multicast group at // 230.0.0.1, port 7777. MulticastSocket multicastSocket = new MulticastSocket(7777); InetAddress inetAddress = InetAddress.getByName("230.0.0.1"); multicastSocket.joinGroup(inetAddress); // Loop forever and receive messages from clients. Print // the received messages. while (true) { byte [] arb = new byte [100]; DatagramPacket datagramPacket = new DatagramPacket(arb, arb.length); multicastSocket.receive(datagramPacket); System.out.println(new String(arb)); } } catch (Exception exception) { exception.printStackTrace(); } } } 清单 2. 简单客户机 public class Client { public static void main(String [] arstring) { try { // Create a datagram package and send it to the multicast // group at 230.0.0.1, port 7777. byte [] arb = new byte [] {'h','e','l','l','o'}; InetAddress inetAddress = InetAddress.getByName("230.0.0.1"); DatagramPacket datagramPacket = new DatagramPacket(arb, arb.length, inetAddress, 7777); MulticastSocket multicastSocket = new MulticastSocket(); multicastSocket.send(datagramPacket); } catch (Exception exception) { exception.printStackTrace(); } } } java.net 包中的两个类使它运行。java.net.DatagramPacket 类保存了 IP 数据报包中包含的数据。java.net.MulticastSocket 类创建一个调整到一个特定多播组的多播套接字。 发现组件 尽管上述示例是一个很好的 IP 多播的演示,但它没有说明实现基于 IP 多播的对等点发现需要什么。要使它有用,我们需要一个功能不仅限于发送和接收包的软件组件。理想情况下,这个组件将了解它所接收的包的源对等点,并适当地丢弃一些信息,这些信息是关于那些它认为已经消失、死亡或以其它方式离去的对等点的。 在这个新设计中,对等点是一个多播组的成员。请牢记,发送到多播组的消息会透明地路由到该组的所有成员。 设计包括两个核心类和三个接口(我使用术语“接口”似乎不太严谨 — 在技术上是一个接口和两个抽象类)。Member 类的实例是一个多播组的成员。这个类管理所有的通信细节。MemberManager 类的一个实例负责了解参与多播组的其它成员。 对等点通过向多播组发送一个消息,来向属于多播组中的对等点宣布自己的存在。每个消息包含关于发送消息的对等点的信息 — 通常是主机名和用于正常(与发现无关)通信的端口。Member 类和 MemberManager 类对这些消息的内容几乎一无所知。对该信息的访问权属于使用这两个类的应用程序。 有三个接口跨越了消息传递/发现层和使用它的应用程序层之间的边界。它们是 Reference 抽象类、Message 接口和 MessageFactory 抽象类。应用程序必须提供这三个接口的实现。 Reference 抽象类定义了对多播组成员的引用。MemberManager 类管理一个引用集。应用程序将实现这个类的一个具体版本,它将包含应用程序所需要的任何引用逻辑。该类定义了两个方法,名称是 equalsInternal() 和 hashCodeInternal(),并且重新定义了 equals() 和 hashCode() 方法来调用这些方法。它通过这样做来强制实现者为这两个关键功能提供实现 — MemberManager 依赖于它们。 Message 接口定义了通过网络代码交换的消息数据的应用程序视图。应用程序将该消息看作是相对于应用程序运行范围的高级概念 — 类似于主机名和端口的概念。网络代码希望发送一个由字节组成的包。Message 接口的实现定义了如何将这些高级信息与字节相互转换。引用是信息的一个关键部分,所有消息都必须包含,因此该接口要求实现提供用于读和写 reference 的方法。 问题的最后部分是 MessageFactory 抽象类。这个类定义了生成新的 Message 实例的机制。深藏在 Member 类内的网络代码使用一个工厂来创建从多播数据报中抽取出的数据的 Message 实例。每个 MessageFactory 实例拥有一个随机生成的身份,它使用这个身份来从接收的消息中滤出要发送的消息。 总之,这五个类和接口(Member、MemberManager、Reference、Message 和 MessageFactory)构成了一个用于进行对等点发现的简单框架。当然,还有可以改进的空间。可以很容易地添加一种基于事件的机制,用于向感兴趣的侦听器通知成员的出现或消失。一种用于过滤所接收消息的灵活机制将很有用,但其实现却比较困难。我将这些建议留作读者的作业。 Member 类 上面描述的框架的完整源代码太长了,这里就不详细展示了,所以让我们只研究 Member 类的部分代码,因为其中包含了操作的大多数内容。更准确地说,操作发生在两个内部类中:MemberClient 类和 MemberServer 类。 请再次考虑第一个示例。它由一个发送 IP 多播数据报的客户机和一个接收数据报的服务器组成。在本例中(清单 3 和 4),两个单独的应用程序执行这两项功能。P2P 应用程序中的对等点的行为方式既象客户机又象服务器,所以我们的 P2P 应用程序应该同时包含两者才是适合的。 清单 3. MemberClient 类 private class MemberClient extends Thread { public void run() { try { while (true) { try { Message message = m_messagefactory.createSendMessage(); Reference reference = message.createReference(); message.writeReference(reference); message.sync(); byte [] arb = message.getByteArray(); DatagramPacket datagrampacket = new DatagramPacket(arb, arb.length); datagrampacket.setAddress(m_inetAddress); datagrampacket.setPort(m_nPort); MulticastSocket multicastsocket = new MulticastSocket(); multicastsocket.send(datagrampacket); } catch (IOException ioException) { ioException.printStackTrace(); } try { synchronized (this) { wait(m_nPeriod); } } catch (InterruptedException interruptedException) { break; } } } catch (Throwable throwable) { throwable.printStackTrace(); } } } 清单 3 包含了 MemberClient 类的源代码。象清单 1 中的客户机一样,这个客户机创建一个 MulticastSocket 实例并使用它来发送一个 DatagramPacket 实例。DatagramPacket 实例包含一个到发送方对等点的引用,该引用是作为字节数组编码的。只要该对等点还是活动的并在运行,客户机就会每隔一段常规时间来广播这条信息。 清单 4. MemberServer 类 private class MemberServer extends Thread { public void run() { try { MulticastSocket multicastsocket = new MulticastSocket(m_nPort); multicastsocket.joinGroup(m_inetAddress); while (true) { Message message = m_messagefactory.createReceiveMessage(); byte [] arb = message.getByteArray(); DatagramPacket datagrampacket = new DatagramPacket(arb, arb.length); multicastsocket.receive(datagrampacket); message.sync(); if (m_messagefactory.isMine(message) == false) { Reference reference = message.createReference(); message.readReference(reference); m_membermanager.addReference(reference); } } } catch (Throwable throwable) { throwable.printStackTrace(); } } } MemberServer 类在很多方面类似于清单 2 中的服务器。除了创建必需的代码,使用它从建立的通信(wire)上采集适当的数据报以外,这个服务器还对已编码的引用进行解码、创建消息并将消息传递到 MemberManager 实例进行保管。干得不错。 该类的其余部分由用于各种特性的读方法和写方法以及用于控制该类的生命周期的 start() 和 stop() 方法组成。 P2P 应用程序 对等点发现框架完成了,剩下的所有工作就是将它集成到现有的 P2P 应用程序中去了。对原来的 P2P 应用程序的更改相对较少。 首先,在其前身中,P2P 应用程序期望在其特性文件中列出所有已知的对等点。尽管这对演示用途来说很好(请回忆上面讨论的点到点配置),并在最多至大约四个对等点的情况下运行良好,但最终它的限制还是太大了。因此,除去了在特性文件中读取和管理对等点的代码,并以使用上面的发现机制的代码取代它。 其次,因为在特性文件中枚举了对等点,看上去它们就好象持久存在了。现有的应用程序如果假定它们不会消失,有时会侥幸获得成功。但是,在 P2P 的真实世界中,事情更易发生变化。新的应用程序进行了重新设计,适于在对等点消失时进行更好的恢复。 更新的源代码可在参考资料中得到。 结束语 找到对等点只是成功了一半。下一次我将研究一个难题,涉及两个对等点在现代因特网上的通信,要克服防火墙、网关以及其它一大堆麻烦。 参考资料 下载并更新本文的源代码。 “How IP Multicast Works”一文为初学者提供了很棒的简介。 Jxta Discovery Service 使用 IP 多播来定位合适的对等点。 在这个关于 Jxta 的系列文章中,Making P2P interoperable(developerWorks,2001 年 8-9 月)中,Sing Li 提供了一篇关于这种新的 P2P 技术的实用简介,并演示了如何使用 Jxta 构建 P2P 应用程序。 Vincent Matossian 的网站上有一个很棒的到高级 P2P 主题的链接集,其中包含发现。 请到 developerWorks Java 技术专区查找更多 Java 编程参考资料。 关于作者 自从有了台式计算机以来,Todd Sundsted 就一直在编写软件。他对安全性、分布式计算和发生于大规模细粒度系统中的动态行为以及突发的行为感兴趣。除了写作以外,Todd 还做一些编码工作。可通过 todd-p2p@etcee.com 与 Todd 联系。
[Web3] 基础第5篇: 共识算法与 P2P 通信协议 CometBFT 采用Tentmint 共识,一种易于理解、基本异步的 BFT 共识算法。该算法遵循一个简单的状态机,如下所示:上图展示了 Tendermint BFT 共识流程,描述了一个区块从提议(Propose)到最终提交(Commit)的完整过程。Tendermint 共识采用三阶段投票机制(Prevote、Precommit、Commit) 来确保区块最终性。三阶段投票机制(Prevote → Precommit → Commit)需要 2/3 以上的投票支持 才能进入下一阶段。 阅读详情

相关推荐

已知文件名取文件所在目录

                                                                          何志丹已知文件名,如何取文件所在目录?最简单的方法是从后向前找"//".但有时,文件名中没有"//",这时要先转化一下.具体代码如下:CString GetPathName(const CString strPathFileName){ //取

闻缺陷则喜何志丹 1950

计网笔记--------对等计算机模式

对等计算机模式对等计算机模式。

2301_81063297的博客 883

对等计算应用与技术

还在四处寻找有关于对等计算应用与技术吗?整理发布的这一款对等计算应用与技术定能给你需要的...该文档为对等计算应用与技术,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看

对等计算实际应用之:网络信任与安全

一旦 P2P 应用发展到一个引人关注的程度,信任和安全问题就出现了。在用户间互相了解的小型应用中,信任和安全很少会成为问题。可是,有用的 P2P 应用很少会保持这么小的规模。本文将探讨在 P2P 应用中的信任和安全问题,为您介绍使分布式应用中的信任成为可能的工具。信任在每个具有一定规模的分布式应用(包括对等应用)中都是一个问题。在一个分布式应用中,信任的等级就是衡量我们确信程度的尺度,即我们正与之

键者天行 5662

ANSYS CFX 自定义函数数据导入实战指南

本文详细介绍了在ANSYS CFX中实现自定义函数数据导入的完整流程与实战技巧。通过具体案例,指导用户如何将外部实验或计算数据(如材料属性随温度变化)导入CFX,创建可调用的函数,并正确关联到仿真模型中,从而显著提升仿真的真实性与准确性。

v6b7n8m9q0的博客 703

Oracle EBS财务模块(三)总账功能

(一)总账管理系统主要功能  总账管理系统(Oraclegeneralledger)是一个公司一切账务系统的核心,它好比是公司会计信息的中央处理器。总账管理系统提供了一个完整的财务管理核算及分析流程。它是所有子账户的信息存储器,因此反映了所有子账户的财务和现金活动。总账管理系统的主要作用是记录公司的财务活动,并生成财务报表和管理报表,以帮助公司内外人士进行决策。一个公司或组织的制造系统、项目管理系

苏南生的优快云博客 2万+

NCRE四级网络工程师考题详解----对等计算模型(P2P)

对等计算模型(P2P): 在这种模型中,所有的计算机都可以当服务器。用中心服务器存放各个资源的目录。持续运转。以Napster为代表。 分布式非结构化P2P网络,没有中心服务器,采用泛洪方式,负载很重,适用规模较小的网络。采用TTL机制决定是否继续转发信息,以Gnutella为代表。 分布式结构化P2P网络:分布式散列表(DHT),非中心化和自组织,有良好的可扩展性,维护成本大。以pastry...

一串代码的博客 680

从 JDK8 到 JDK17:CRMEB 框架升级

【摘要】CRMEB开源框架已成功从JDK8升级至JDK17,带来显著性能提升:并发吞吐量提高35%,响应延迟降低40%,资源占用减少25%。升级方案解决87个技术卡点,支持模块化扩展和微服务转型,兼容SpringBoot3.0等新技术。提供基础版到企业级的升级服务,包含代码重构指导和性能调优。经金融级验证的方案可帮助电商平台实现日均10万+UV承载,支付成功率提升至99.7%。现以低于市场30%的价格提供全周期技术支持,助力企业抢占技术先机。

weixin_39782540的博客 701

对等计算实践: 发现

 不管通过何种持久化技术,都必须通过数据连接访问数据库,在Spring中,数据连接是通过数据源获得的。在以往的应用中,数据源一般是Web应用服务器提供的。在Spring中,你不但可以通过JNDI获取应用服务器的数据源,也可以直接在Spring容器中配置数据源,此外,你还可以通过代码的方式创建一个数据源,以便进行无依赖的单元测试。     配置一个数据源     Spring在第三方依赖包中包含了两

lgmawei的专栏 904

MobileNet V3 图像分类

MobileNet V3

Henry的博客 1771

内存预取黑科技:__builtin_prefetch在数据库和游戏开发中的高阶用法

本文深入探讨了GCC内置函数`__builtin_prefetch`在数据库和游戏开发中的高阶应用。通过LevelDB的SSTable文件读取优化和UE5引擎场景数据流式加载的实战案例,详细解析了预取参数调优的艺术,并借助perf工具量化分析了不同策略的性能提升效果。文章还介绍了与`__builtin_expect`等内置函数的协同优化技巧,帮助开发者最大化缓存命中率。

weixin_29019241的博客 417

[转载]对等计算实践:基于 IP 多播的发现

对等计算实践:基于 IP 多播的发现要完成有用的工作,P2P 应用程序中的对等点必须能够彼此发现对方并与对方交互。在上一篇文章中,Todd 描述了几种不同的机制,对等点可以使用这些机制彼此发现,他还解释了每种机制的优缺点。本月,...

congji3817的博客 162

电路板保险丝如何选型

在电路板保险丝选型过程中,需要考虑多个因素以确保其适合特定的电路需求。最后,经过以上程序选定的样品需要在实际的电路中进行测试,以验证所选择的保险丝是否合适。

weixin_57010826的博客 1310

Java对等计算实践:基于 IP 多播的发现

要完成有用的工作,P2P 应用程序中的对等点必须能够彼此发现对方并与对方交互。本文提供了一种基于 IP 多播的发现的实现。  在软件实体能够参与具有 P2P 应用程序特征的直接的对等交互之前,该实体必须发现将要与之交互的适当的对等点。所有可行的 P2P 体系结构都提供一种针对发现问题的解决方案。在本文我将描述其中一种机制的实现。让我们通过回顾来开始今天的讨论。再访发现 对等点发现使 P2P 应用程

Zero'Coffee 1509

Allegro如何改变线宽操作指导

用Allegro做pcb设计的时候,改变走线线宽是非常常用的功能,如下图。线宽目前是12mil,需要把线宽改成15mil。如何改变线宽操作指导。

weixin_54787054的博客 4254

[网络安全自学篇] 七十三.WannaCry勒索病毒复现及分析(四)蠕虫传播机制全网源码详细解读

这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步。前文分享了逆向分析OllyDbg动态调试工具的基本用法,包括界面介绍、常用快捷键和TraceMe案例分析。这篇文章将继续详细讲解WannaCry蠕虫的传播机制,带领大家详细阅读源代码,分享WannaCry勒索病毒是如何传播感染的。作者分析该病毒一个月,一方面觉得自己技术菜,另一方面深知系统安全需要坚持,继续加油。希望文章对您有所帮助~

杨秀璋的专栏 1万+

IBM 对等计算实践 系列文章

对等计算实践: P2P 应用程序框架http://www.ibm.com/developerworks/cn/java/j-p2p/part2/index.html对等计算实践: P2P 遇上 SSLhttp://www.ibm.com/developerworks/cn/java/j-p2p/part4/index.html对等计算实践: 发现http://www.ibm.com/dev

cnrandy 的专栏 772

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

对等计算与普适计算

导读:   对等(P2P)计算是在互联网上实施分布式计算的新模式。在这种模式下,服务器与客户端的界限消失了,网络上的所有节点都可以“平等”共享其他节点的计算资源。   “对等系统”定义如下:对等系统由若干互联协作的计算机构成,且至少具有如下特征之一:系统依存于边缘化(非中央式服务器)设备的主动协作,每个成员直接从其他成员而不是从服务器的参与中受益;系统中成员同时扮演服务器与客户机的角色;系

xu的blog 1934

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

网格计算

了解了云计算 学习了jsf事件机制,学习了Oracle相关内容 http://wenku.baidu.com/view/03f8973231126edb6f1a10f5.html 网格计算即分布式计算,是一门计算机科学。它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终结果。 最近的分布式计算项目...

supremeYing 732

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

计算机网络(四)——组建对等网

我们这计算机网络的课真滴水。。。 对等网 含义: 1.对等网中的每一台计算机的关系是平等的,没有主从之分 2.对等网中的资源是分布在每一台计算机上的,每一台计算机既是资源的提供者也是资源的使用者。 3.对等网中每一台计算机都是客户机,因而它要用来完成自己的作业,同时由于他们又都是服务器,就都要满足其他计算机的作业要求。 优点: 1.对等网建立容易,操作简便 2.对等网建立和维护的成本比较低 3.对...

朱坚强的博客 4854

对等计算实践: P2P 遇上 SSL

保证对等机之间的通信安全 级别: 初级 Todd Sundsted, 首席设计师, PointFire, Inc 2001 年 10 月 07 日 对任何重要的 P2P 应用程序而言,对等机之间的安全通信都是一个核心要求。尽管安全的细节依赖于如何使用该应用程序和该应用程序将要保护什么,但通过使用现有技术,例如 SSL 实现强壮的、一般用途的安全...

weixin_33827965的博客 217

elasticsearch集群发现机制:Zen Discovery

Zen发现机制 zen发现机制是elasticsearch默认的内建模块。它提供了多播和单播两种发现方式,能够很容易的扩展至云环境。

alex的博客 1万+

按下Ctrl弹出一个对话框松开关闭此对话框,如何实现?

                                    何志丹(一),新建一个单文档工程CtrlEg。(二),在视图类中为WM_KEYDOWN和WM_KEYUP增加响应函数。具体代码如下:Dialog dlg ;//定义成类成员更规范,这儿定成变量是为了方便查看void CCtrlEgView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nF

闻缺陷则喜何志丹 1834

两台内网机器直接对话:EasyNTS上云网关平台P2P互联规则怎么配

再决定是否选择“允许服务中继”兜底。

AI与流媒体视频技术 209
上一篇: SWT:AWT和SWING的强大竞争者
下一篇: IBM developerWorks电子商务随需应变专题免费讲座
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值