《超脑黑客校对版作者疯狂小强》第194/659页


  【LINUS:这是IEEE组织为要在各种UNIX操作系统上运行的软件而定义API的一系列互相关联的标准的总称,最初起源于1985年的一个项目……】
  接着,LINUS开始给林鸿详细介绍了一下这个标准的有关内容。
  实际上,LINUS之前也对这个标准一点都不清楚,只是听学校的老师曾经说起过,因为这个标准是UNIX下的标准,统一规定了所有系统命令的实现细节。
  于是,刚开始的时候,他便在MINIX的邮件讨论组中发布了一个求助帖子,寻求有关POSIX的相关标准下载地址,可是这个帖子并没有获得几个人的关注和回应,他没有找到POSIX的相关资料。
  于是,他只好退而求其次,找来一份SUN服务器的UNIX使用手册,按照上面的命令调用一个个对这些系统命令进行实现。
  但是,这份UNIX手册上并没有详细说明这些命令所实现的内部细节,只描写了结果。
  例如LS命令,手册上只描写了这个命令的结果,以及可以加上哪些参数实现,如“LS-ALL”可以将当前目录下所有的文件,包括隐藏文件在内,都显示出来。
  具体的实现方式,则是LINUS按照文件系统中的原理自己想出来的,例如首先要找到当前目录的引导区,然后再分析里面的文件节点,从这些节点中读出每一个文件的名称,大小以及创建日期等信息,然后再将其显示在显示器屏幕上。
  要实现这些系统调用的功能,必须对底层的基本原理非常了解,当然这并不能难倒LINUS,否则他还谈什么编写自己的操作系统?
  他按照UNIX手册和《操作系统:设计与实现》中所提及到的资料,总共实现了二十来个系统调用,这正是林鸿在LINUX中所实现的那些。
  【LINUS:前一阵子才有一个朋友给我寄了几卷厚厚的POSIX的手册,不过既然现在你已经开始移植BASH了,接下来的工作你就继续做着吧。】
  【STONE:从哪里可以找到POSIX的手册?】
  【LINUS:这点我也不太清楚。不过,你身在美国,应该不难,去图书商城或者图书馆看看,应该可以找到。我这几本POSIX手册的出版社是……】
  接着,LINUS将出版社和地址方面的信息全部提供给了林鸿,让他如果实在找不到,就按照这些信息去找,直接向出版社邮购也行。
  【LINUS:还有,我一个朋友手里正好有基于苹果系统的服务器,上次我让他试用了一下CQCQ软件,他愿意免费将服务器端进行托管,你觉得怎么样?】
  LINUS说的事情,是上次林鸿提到自己想要将CQCQ的服务器端托管到另外的地方,于是LINUS就留心了一下。
  【STONE:可以。我把服务器端的安装文件传给你。】
  随着访问用户的增多,SAM官方的那个服务器的性能有点跟不上了,再加上最近又出现了德州仪器公司的那档子事情,林鸿最终同意将服务器端转走。
  原本林鸿还打算将CQCQ发布出去,让更多的人使用,并且继续改进,可是上次和凯文聊过一次之后,他的这个计划便搁浅了。
  他决定重新设计CQCQ的结构,增加其安全性,然后再发布出去。
  目前这个版本,暂时就用来内部几个人沟通吧,等将服务器端移走之后,林鸿便决定推荐这个软件SAM其他成员使用。
  和LINUS结束聊天之后,林鸿便开始正式着手重新设计CQCQ软件。


第二百一十一章 加密算法
  对CQCQ软件重构的想法,林鸿实际上在和凯文聊过之后,就开始在脑海中慢慢成型。
  对发送消息进行加密这个问题比较好解决,据林鸿所知,目前有一些加密性能比较好的加密算法都是免费并且公开的,他可以直接拿来使用。
  关键在于如何建立起负责消息传递中转的“秘密据点”。
  这些据点必须具有随机的特点,不能一直固定,这样就可以增加被追踪拦截的难度。
  现在这种一台服务器管理并转发所有在线聊天客户端的信息的模式肯定是行不通了,因为这种结构太过脆弱,只要对方攻占了服务器,整个聊天网络就会瘫痪。
  林鸿经过慎重思考,觉得还是回归到自己最初的想法比较靠谱,也就是,把客户端和服务器端集成到一起。
  也就是说,网络上有多少个是用整个软件的客户,那么就有多少台消息中继服务器,每一台服务器都可以对消息进行中转,构成一个庞大的没有任何规律的网状网络。
  确定好了这个大体的方向之后,他脑海中各种灵感不断冒出,以至于他立刻从课桌里面拿出几张白纸,开始以极快地速度将这些想法以图形和简短的文字记录在这些纸上。
  不一会儿,不断冒出的想法就记满了五张白纸,林鸿这才停了下来。
  林鸿抽出其中一张,这张纸上,画了一张用方块代表计算机的网络拓扑图,用线条表示数据流动的方向。
  林鸿重新回过头来,对之前的思路进行整理,然后又对这张图进行完善和修补。
  接下来便又抽出另外一张纸,这张纸上画了四个方块表示计算机,中间用几条细线和一条粗线连接,细线表示少量数据交换,粗线表示真正的数据。
  想了一下,林鸿又重新在它们之间添加了两条粗线,将原来的那一根粗线给划掉了。
  经过刚才一阵头脑风暴,林鸿对于CQCQ新版的架构已经有了底稿,总体的设计框架已经想清楚了,接下来就是对它的技术细节的实现。
  放弃中央控制服务器的架构,转而采用点对点的架构,消息可以通过每一个客户端进行中转。
  不过,还是会存在一个对整个拓扑网络节点进行维护的“中继服务器端”,这些服务器端并不涉及到数据的中转,只保存客户端节点信息,例如IP映射地址,在线节点列表以及它们之间的拓扑结构。
  考虑到稳定性方面的问题,这些服务器端不能只有一个,而是多个,并且他们共同维护同一张数据表,即每一台服务器上都有全部的备份,这样,即时某一台服务器下线了,整个通信网络也不会受到影响。
  并且,按照林鸿现在的设想,就算是所有中继服务器都被关停或者下线,也不会造成整个通信网络的瘫痪,最多会影响到消息发送的即时性。
  当网络中存在中继服务器的时候,客户端会和中继服务器保持连接,以便获知自己好友在线状态,要发送信息的时候,也会先向中继服务器查询整个拓扑结构,然后通过算法计算,随机找出一条最优路径,通过这条最优路径将消息发送到目的地。
  而假设所有中继服务器都挂掉了,大家便无法确认好友是否在线,数据传输的时候,是一种广播式的行为,即向全网广播自己的消息,在传输之前,还得确认下一个节点是否在线,然后再传输,最终总会到达自己发送的目的。
  不过这样一来,通信就失去了时效性,可能一条信息发送出去,快则几秒钟,慢则要好几分钟甚至上十分钟对方才能够收到,时间的长短和网络的拓扑结构有关。
  这种结构,在安全方面也有保证。
  一条信息发出,会首先通过自身的软件进行加密,然后再传送到“中转节点”中,那些节点都是匿名的,经过至少五次跳转之后,完全查不到来源路径,最终从“出口节点”对消息进行解密,然后再传递到目标客户端。
  在整个流程中,唯一有可能被监听的环节就在于最后的“出口节点”,假设有人正好在出口节点监控,则就可以截获被发送的消息。
  这个缺点林鸿也发现了,所以他在后来对图纸进行整理的时候,再次进行了完善。
  他想了一个解决方案,那就是消息发送之后,会加密成一个数据包,然后再对这个数据包进行分割,包的各部分通过几条不同的路径最终传递到目的地,这样,就算某一个“出口节点”被监控了,他们截获的内容也只有一部分,没有截获其他包的话,根本无法对整个包进行解密。
  理论上,同时将所有包都截获的可能性是趋近于零的,所以这样一来,通讯安全得到了最大限度的保障。
  林鸿设计的整个新的架构,不但实现了信息传递的匿名性,而且消除了中心化的服务器端,极大地提升了软件的保密性和稳定性。
  经过反复完善和优化,林鸿觉得最终没有问题之后,便开始着手进行代码编写。
  由于他对加密解密方面还不是很了解,所先将其他基本功能暂时实现,将加密解密放到了最后。
  到天亮的时候,新版CQCQ的原型便被编写出来了,首先实现的功能非常简单,只能传递文字版,并且还没有对其进行加密。
  今天是周一,林鸿的课不多,上午在十点多的时候就已经没课,他便立刻奔向了学校图书馆。
  今天来这里有两个问题需要解决。
  一个是查找一下,看看有没有POSIX标准的书籍,另外就是学习一下加密解密算法方面的内容。
  由于林鸿是图书馆的常客,另外又是最近风头正盛的SAM小组成员,图书馆中的不少工作人员都对他非常熟悉了,见到他之后,纷纷和他打着招呼。
  林鸿微笑着一一回应,这几个月来,他算是彻底融入了拉丁学校的这个大集体当中。虽然这里也存在着一些瑕疵,但是总体上还是让人觉得比较舒服的,大家相互之间都比较友好,别人遇到什么困难,也会热心帮忙。
  有一点林鸿感触最深:这里的学生和老师之间的关系完全是对等的,相互间说话,完全没有国内的那种一个聆听,另外一个不是训话就是大讲道理的那种常见情况。
  林鸿来到计算机科学类区域,开始慢慢寻找自己所需要的内容。
  “POSIX……加密算法……”
  林鸿口中念叨着这两个词汇,在书架间一格格看过去。
  走过几个格子之后,林鸿停了下来,一本书籍吸引住了他的目光――《MD5算法应用》。
  他将这本书拿到手中,翻看了一下前言和目录,于是将其拿在了手里,继续查看书架上其他书籍。
  在书架走廊上转了几圈之后,林鸿手中已经多了好几本大部头:《RSA加密算法》、《加密算法导论》、《公钥密码学》、《对称和非对称加密算法》……
  在选择这几本书的时候,林鸿都会大致看一下前沿和目录,他原本只是想研究其中的一本,可是这几本书他实在是难以选择,觉得都非常不错,于是决定干脆都进行阅读,反正他看书的速度很快。
  让林鸿有点遗憾的是,这个图书管里面并没有关于POSIX标准的书籍。

当前:第194/659页

提示: 双击屏幕进入下一页