[原创]PeerForum 飘论坛
2013-03-04 08:33:20
我新设计了一种防蟹、防墙的论坛技术,称为 PeerForum,飘论坛。它的特点有:<br/><br/>[mgleft=50]1、[b]去中心化,p2p,不设服务器。[/b]<br/><br/>[img]http://pic002.cnblogs.com/images/2011/157655/2011042013271528.png[/img]<br/><br/>每个 client 都是别人的 server,实质是 peer。帖子存放于各处,互通有无,形成网状连接,这样的论坛是无法和谐的。<br/><br/>2、[b]无用户系统,以数字签名的公钥记录帖子的发布者。[/b]<br/><br/>每个用户可以有至少一组非对称加密的密钥。以公钥为自身标识。发布帖子时,将帖子内容、公钥和识别串一同发送出去。识别串由帖子内容经 hash 再用私钥加密而得。接收者用收到的发布者公钥解密识别串,若所得与帖子内容的 hash 值相等,即认为发布者正确。<br/><br/>帖子发布之后不能编辑。<br/><br/>3、[b]用户自治。[/b]<br/><br/>没有服务器,也没有管理员。论坛秩序全靠彼此平等的用户以拒绝帖子和拒绝用户节点的方式维持(后详)。[/mgleft]<br/><br/>每个用户节点由上下两层构成,上层很简单,是一个运行在 localhost 上的 webserver,供浏览器访问论坛;下层是“飘层”,通过飘协议——PFP(PeerForum Protocol)——与其它节点通信。PFP 是一个应用层协议,所有数据加密传输。<br/><br/>每个用户节点 web 层的界面与功能可以自已定义。重点在飘层。飘层通过飘协议实现两类功能:<br/><br/>1、[b]节点管理[/b] 每个用户节点需要记录其它若干个用户节点(IP、端口、通信密钥),这些节点称为直接节点。节点通过直接节点与整个飘网络通信。其中的通信密钥供节点间传递消息(对称)加密用,有别于标识帖子发布者的用户公钥。<br/><br/>[mgleft=50]1.1、获取节点 每个用户节点建立之初必须存有至少一个有效的直接节点,通过这个节点接入飘网络。随后,新节点可以从直接节点获取更多的节点信息,保存为直接节点。<br/><br/>直接节点的关系是不对等的。A 以 B 为直接节点,但 A 不一定是 B 的直接节点。每个节点可以自行设置管理直接节点的策略。用户可对自身设置别名并传给其它节点,也可对直接节点设置别名(只在本地可用),但这些别名不能作为标识用户的依据。<br/><br/>1.2、拒绝节点 用户获取帖子时会记录每个帖子来自哪个节点。如果用户认为帖子的内容不适当,可以拒绝帖子,并将其发送节点的计数器加 1。满足拒绝条件时即拒绝节点。拒绝条件形如:在某个时长之内对来自某个节点的帖子的拒绝数达到某个门限,即拒绝此节点若干天。数值可设。<br/><br/>1.3、改变节点 用户预期自身的 IP 、端口或通信密钥将会改变之前,发送这一消息给直接节点。若直接节点也以此节点为直接节点,则改变对它的记录。<br/><br/>1.4、协同拒绝 用户可以获取某些直接节点的拒绝节点表,并拒绝这些节点。[/mgleft]<br/><br/>2、[b]帖子管理[/b] 每个帖子含有如下数据:内容(含标题、标签、时间)、上级帖子(根帖无上级),再将这些数据放在一起作 hash 运算,运算结果作为帖子的 id。如果某个节点改变了一个帖子的内容,此帖子的 id 也必然改变,改变后的帖子将被视为一个新的帖子。以标签代替分版。由上级帖子确定所在位置。时间等信息可能不准确,仅具参考价值。<br/><br/>帖子在本地存储时除了内容标签,还分为四个目录:未处理、推荐、通过、拒绝。后详。<br/><br/>[mgleft=50]2.1、获取帖子 用户节点定期从直接节点按照预设策略获取本地没有的帖子,将新得的帖子放在“未处理”目录中。用户看过帖子之后,将之移动到推荐、通过、拒绝三个目录当中。拒绝的帖子将不再显示内容,但仍保留树形列表中的位置,不妨碍显示回复它的帖子。<br/><br/>获取帖子可以预设如下策略:对每个直接节点的每个目录(未处理、推荐、通过)各自获取帖子的数目或者时间起止点。避免一次传输过多数据。第二种策略是对特定的帖子,获取所有回复它的帖子及回复这些回复的帖子……即所有子孙节点。第三种策略是对特定的帖子,获取它所回复的帖子及此帖所回复的帖子……即所有祖先节点。<br/><br/>用户可以设置,将推荐的帖子主动传送给直接节点。如 2.2.2。<br/><br/>2.2、发布帖子 用户发布一个帖子,将之保存在本地之后,可选择被动传送或主动传送。<br/><br/>2.2.1、被动传送 用户仅将自己发布的帖子放在某个目录(未处理、推荐、通过)里,待其它节点来索取帖子之时与其它帖子一起发送。这种方式的传播速度较慢,但可以有效隐藏自身,令其它节点无法定位帖子的发布者。<br/><br/>2.2.2、主动传送 用户主动将新发布的帖子推送到各直接节点。各直接节点依据自身设置决定是否接收。如果接收,存入未处理目录之后可依据设置决定是否转发给自己的直接节点。这种方式可将帖子快速传播出去,但如果网络受到监控,有可能定位到帖子的发布者。[/mgleft]<br/><br/>飘层不处理话题,话题由 web 层根据帖子数据自行生成。从每个帖子的上级节点信息组装出完整的帖子树,将根帖(无上级节点)的标题(第一行前若干字)置为话题的标题。将此话题信息(帖子数、最后回复时间)存放在本地供自己阅读,不向外传。<br/><br/>飘论坛的管理由用户通过拒绝操作实现。不能像传统论坛一样将违规的帖子彻底删除,但众多用户的选择可以决定帖子的传播范围。用户的评判没有一致的标准,但综合的结果可以存优汰劣。这也是 SNS 的典型机制。经过长期演化,整个的飘论坛可能分化成多个互不相通的部分,分久而合,合久乃分,天道在焉。[edit]2013-03-08 21:14:18.400009[/edit]
若问使君才与术,何如?占得人间一味愚。

