我们都知道软件发展经历了很长一段路程,在软件刚刚起步的时候,有一批世界顶尖的科学家用自己整个的人生为我们创造了今天美好的信息世界,我印象最深的是我看过一本书,书名是《优雅人生》是专门介绍一位伟大的女性IT工作者,她是一位传奇人物,她是编译器的先驱,在她晚年的时候都拼命在一线开发环境中肩负着整个美国的IT重任,这位女性就是,格雷斯-霍珀;值得我们去敬仰,去学习;我为什么要讲上面的一段话呢,其实这源自于本人对技术强烈的欲望和兴趣,尤其崇拜那些传奇人物;在我们现在的软件开发人员中很大一部分人没有兴趣去关心那些历史,那些过去很老的技术,很麻烦的操作过程;有没有必要那就要看每个人的理解了;我们大部分的开发人员都是做应用层开发,也很少接触底层技术,什么编译器、动态链接等等复杂枯燥的东西;在我看来,尽管我们在日常开发中不需要去关心那些底层的技术,但是那些技术跟我们日常开发息息相关,比如编译报错、动态链接内存分配、PE文件符号重定位,都是我们需要了解的东西;不错,可能有又很多人不赞成这种观点,熟话说得好,苏业有专攻;凡事都是相对的,我们拿园子的前辈来说,他们都是精于某个领域,都是不断的挖掘底层的实现,这些内容在书上是更本找不到的,比如袁永福袁老师他在图形软件领域已经摸索了很久,对底层操作系统的消息、事件等等,对底层都是很了解的;这样的前辈数不胜数,他们都有一个共同特点,就是专研实现背后的实现,知其然而知其所以然;偶尔跟一些同僚朋友聊天,他们对软件开发的理解很简单,无非就是上网搜一堆别人封装好的控件或者DLL,然后自己捣鼓捣鼓,拼成一个界面看起很完美,后台一片杂乱无章的软件;
唠叨了这么多,就是希望能将自己的这份热情去感染很多的人,朋友不要浮于表面,一定要沉,沉的越深越好;本人在思考一片有关程序员修炼之道的文章,这篇文章需要我们站在一定的高度看技术,把技术比喻成金字塔,倒立的金字塔,我们要向下走,越走越宽松,本人近期将出搞,供大家学习;
好了我们进入今天要讲的主题,".NET简谈网络系统大局观",我所有的技术性的文章都围绕着微软的.NET领域,所以我的文章都会以.NET作为前缀,让客友们能清楚的知道这篇文章是那个技术领域的;所谓网络系统,可能又有很大一部分人觉得那不就是ASP.NET之类的B/S系统吗,其实不是,它跟具体的软件应用模式没多大关系,不是我们所谓的C/S或B/S,而是我们所有通讯系统的根基,了解网络的朋友可能就很清楚了,不管什么软件模式、软件架构如果要实现通讯都必须经过底层的通讯系统来传输消息,我们所谓的B/S系统是站在一个应用协议角度去看的,HTTP、FTP等等都属于应用层协议,这些应用层协议本身是不能够进行网络传输的,必须向下传递直到网络层,然后通过网络协议如:TCP、UDP等等将其上层协议包装起来在进行向下传递至链路层然后进行传输,当然我讲的简单了,能说明原理就行了;看过OSI模型的朋友可能就知道我说的是什么意思了,我们来看一张图:[王清培版权所有,转载请给出署名]
1:
这幅图大致的给出了消息传递的流程,我们就拿B/S系统来说吧,我们的HTTP应用层协议向下传递至表示层,表示的作用大概是将我们上层的消息进行必要的编码、加密;继续向下传递至会话层,会话层的功能大概是添加必要的会话信息,比如我们在通讯过程中可能由于网络故障网络长时间没有响应,这时候我们可以通过这部分消息进行判断当前会话的情况是否中断,中断后消息从何处重新发送;我就讲两个层面了,如果有兴趣的朋友可以自己参考相关文档,说的比我专业详细,我只是简单的帮助初学者了解这部分内容;最终消息通过Internet传输到IP所指定的对方机器中,这个时候我们就涉及到了网络通讯中的关键部分端口,很多人对端口的概念不是很理解,很多大型软件都有端口的设置,比如我们的SQLSERVER数据库就有1433端口,其实端口的概念就好比我们把IP比喻成一栋大楼,端口就好比我们大楼的房间,我们的PC机有很多应用程序,如:HTTP、FTP等等包括我们自定定义的一些列协议,这些协议是针对某些应用程序存在而有效的,如HTTP协议离开了浏览器,它的存在可能没有多大意义了,我们不可能让用户对着一堆乱七八糟的HTML吧,所以我们要用端口进行区分,应用程序用端口进行侦听网络上的消息,端口是依附于具体的应用程序的;请看图:[王清培版权所有,转载请给出署名]
2:
这幅图是一个程序流程图,可能还不是不够清晰的说明我们上面比喻的例子;我们来一幅更能说明问题的图:
3:
图3应该能很清楚的说明我们上面的问题了,打个比方有一个送快递的将包裹送到我们前台接待那里,然后前台接待人再看包裹的收货人是谁是哪个部门的,在将包裹送到部门中去;这样就完成了包裹的整个邮递过程;我们的消息也是一样的,必须明确知道消息的端口是什么,这样我们的“消息总闸”才能知道这个消息是正确并且是安全的,不是黑客来探访的;我们用.NET开发网路系统时,首先我们要定义我们应用程序要使用的接口,然后要传输的消息;我们开发一个服务器端和一个客户端,在服务器端,发送消息的时候,客户端要在消息到来之前进行端口侦听;
基本的网络系统结构就讲完了,希望对一些初学者来说能有帮助,谢谢;[王清培版权所有,转载请给出署名]