我正在做一个项目,这个项目需要一个系统,可以归结为网络协议设计中的一个奇怪的练习。具体细节的情况是复杂和无关的,所以这里我要比较它是一种强制性的运动鞋网。
比方说,在整个森林、山脉、北极高原或什么地方的建筑物里都有许多台式机。它们没有联网,因为在建筑物之间铺设电缆是非常昂贵的。(在这种情况下,实际上是不可能的,但我离题了。)不过,人们经常往返于建筑物之间,每个人都有一个闪存盘。当他们到达新大楼时,他们做的第一件事就是把这个闪存插入到桌面上。当它插入时,一个软件启动并从它读取数据,并可以自由地传输数据。您可以假设桌面有无限的存储空间,但是驱动器没有。
桌面上装载着需要到达其他建筑物的消息。每个消息都有指示源和目的地的元数据,以及潜在的任何其他必需的协议信息。该驱动器还携带了该建筑物的信息,软件将首先卸载这些信息。然后,在一定算法的基础上,软件将新的消息加载到驱动器上。每座建筑物都通过公路连接到其他五座左右的建筑物,而这些道路是由运输公司沿途进行的。任何给定的建筑物都不可能直接连接到任何其他特定的建筑物,但在任何两个给定的点之间总是至少有一条路径(通过其他建筑物)。
我希望尽量减少人与人之间的互动,以获取建筑之间的信息。显然,发件人必须指定目的地,我们可以合理地期望承运人知道他们的下一站,但也许不会更远。我也希望得到一些完美的分布--不需要依赖任何中央服务器。
这个软件能用什么最简单的系统自动地将消息从一栋楼传送到另一栋楼?理想情况下,软件的每个独立实例都会为相同的输入决定相同的路径。假设每个驱动器/载体和每个建筑物都已经有一个唯一的ID,该软件如何能够自动绘制出网络中的所有连接?这样的系统如何处理新建筑物或新道路的发现?如果一些运营商知道他们有一个明确的远离源、目的地和通道的地方,那么应该如何处理那些能够可行地遵循同一条路径的消息(对于部分和/或全部路由)?系统如何处理“分组丢失”(例如,其中一家运营商在途中崩溃)?系统是否有可能被滥用或破坏?我能做些什么来阻止这种情况?
另外,说我想更新桌面上的软件。我可以要求每个驱动器携带他们遇到的最新版本的副本,但这并不是非常节省空间。相反,我可以让他们只携带最新的版本号,以及他们访问的任何需要更新的建筑物的I列表。当驱动器用最新版本击中建筑物时,那里的软件会清除列表,并自动向这些建筑物发出信息,询问它们是否还需要更新。如果他们回答“是”,它会打包本地存储的三角洲并将其发送出去。在这种情况下,补丁将由系统的开发人员签名,以确保真实性。但是,是否有一种方法可以分发(即,如果每一栋楼的常驻黑客都被授予访问权限)?或者更具体地说,它如何处理三角洲碰撞?
任何清晰的问题或建议也会有帮助;我所描述的只是逻辑上类似于我将要应用它的东西,所以我不知道我是否假设了一些不明显的东西,或者忘记提到重要的细节。
发布于 2016-09-19 15:05:45
大约两年前我设计了这样的程序。
关于议定书:
-rumor将您的消息路由到它的公钥已知的目的地
为了方便起见,-distributed从nick-name到RSA-key的翻译列表
-rumor路由RSA确认以删除消息的副本。
-every桌面客户端有一个基本的RSA公钥,可以确认客户端软件的更新.
-if的载体是满的,那么旧的消息有优先权。
-元信息总是优先考虑的。
-last但并非最不重要:每条消息都有死收件人的超时。
这具有以下优点:
https://stackoverflow.com/questions/28639028
复制相似问题