在sneakernet上自动发送消息

时间:2015-02-20 22:04:20

标签: network-protocols

我正在开发一个需要一个系统的项目,该系统归结为网络协议设计中的一个奇怪的练习。情况的具体细节是复杂和无关紧要的,所以在这里我将把它与一种强制性的sneakernet进行比较。

假设在森林或山脉或北极高原或其他地方的建筑物中有许多桌面。它们没有联网,因为在建筑物之间铺设电缆非常昂贵。 (在这种情况下,实际上在物理上是不可能的,但我离题了。)人们经常在建筑物之间通勤,每个人都有闪光灯驱动器。到达新建筑时,他们做的第一件事就是将闪存盘插入桌面。当它插入时,一个软件启动并从中读取数据,并可以自由地传输数据和从中传输数据。您可以假设桌面具有无限的存储空间,但驱动器没有。

桌面上装有需要到达其他建筑物的消息。每条消息都有指示源和目标的元数据,以及可能的任何其他必要的协议信息。该驱动器还携带用于构建的消息,软件将首先卸载该消息。然后,基于某种算法,软件将新消息加载到驱动器上。 每个建筑物通过运输公司沿着的道路连接到五个左右的其他建筑物。任何给定的建筑物都不可能直接连接到任何其他特定的建筑物,但在任意两个给定点之间总是至少有一条路径(通过其他建筑物)。

我希望尽量减少在建筑物之间传递信息所需的人际互动。显然,发送者必须指定目的地,我们可以合理地期望运营商知道他们的下一站,但也许不会更远。我也希望有一些完美的分布式东西 - 不需要依赖任何中央服务器。

软件可以使用什么最简单的系统自动将消息从一个建筑物路由到另一个建筑物?理想情况下,软件的每个独立实例将决定相同输入的相同路由。鉴于每个驱动器/运营商和每个建筑物都有一个唯一的ID,软件如何自动映射出网络中的所有连接?这样的系统怎么能处理新建筑物或道路的发现?如果一些航空公司知道他们有一个明确的遥远的源,目的地和航路点,那么如何处理可能遵循相同路径(部分和/或全部路线)的信息呢?系统如何处理“数据包丢失”(例如其中一个运营商在途中崩溃)?有没有办法可以滥用或破坏系统?我该怎么做才能防止这种情况?

另外,我想要更新桌面上的软件。我可以要求每个驱动器都带有他们遇到的最新版本的副本,但这不是很节省空间。相反,我可以让他们只携带最新的版本号,以及他们访问过的需要更新的任何建筑物的ID列表。当驱动器撞到具有最新版本的建筑物时,那里的软件清除列表并向那些建筑物创建自动消息,询问他们是否仍需要更新。如果他们回答“是”,它会打包本地存储的增量并将其发送出去。在这种情况下,补丁将由系统的开发人员签名,以确保真实性。有没有一种方法可以分发(即如果每个建筑物的常驻黑客都有权访问)?或者更具体地说,它如何处理三角洲碰撞?

任何明确的问题或建议也会有所帮助;我所描述的只是逻辑上与我将要应用的内容类似,所以我不知道我是否已经假设某些不明显或忘记提及重要细节的内容。

1 个答案:

答案 0 :(得分:1)

两年前我编写了类似这样的东西。

对于协议:

-rumor路由您的消息RSA编码到其公钥已知的目的地

- 为了方便起见,从昵称到RSA密钥的分发翻译列表

-rumor路由RSA-subscirbed确认以删除消息的副本。

- 每个桌面客户端都有一个基本的公共RSA密钥,可以确认客户端软件的更新。

- 如果运营商已满,则旧邮件优先。

-meta-information始终优先。

-last但并非最不重要:每封邮件都有一个死机收件人超时。

这有以下优点:

  • 并非每个人都能获得所有信息,但每个人都会获得有关每个信息的元信息,从而导致该网络可搜索

  • 您可以匿名发送邮件或使用您的公钥签名

  • 绝对不需要了解拓扑结构。

  • 元信息(确认消息)的转发速度比数据快,因此如果负载很重,则会自动删除负载。