23rd
十一月

How to learn HTTP ?
马克龙 发布于: 2009年11月23日 开发与应用 标签:, 评论 (0)

博客园中的gpcuster有一文《浅析HTTP协议》,通俗易懂。哪怕是讲解基本原理的几句,都可以给RFC 2616的初学者起到一个抛砖引玉的作用。我个人认为以下四段点得不错:

1.HTTP建立连接的两种方式:(非持久连接方式 和 HTTP/1.1默认的持久连接方式)
2.HTTP代理
3.多线程下载
4.HTTPS传输协议原理(涉及对称加密 和 非对称加密, 加密与解密)

当然,要理解好并应用好HTTP协议,应该熟悉TCP/IP体系结构,理解每一层如何使用服务和提供服务。

另外,很看好gpcuster推荐的这本书《HTTP Developers Handbook》。该作者Chris Shiflett还写过《Essential PHP Security》,挺不错的。

19th
十一月

复杂的计算机网络
马克龙 发布于: 2009年11月19日 开发与应用 标签:, 评论 (0)

说实话,扯这个题目好难。其实我也不懂,此文也只是为自己对计算机网络的学习抛砖引玉。

计算机网络是个很复杂的系统,要想通盘掌握所有各种细节是不实际的,也就图个理解罢了。学习它,要从分层次的体系结构开始,理解了具有五层协议的“原理体系结构”(综合了OSI、TCP/IP两种体系结构的理论)也就抓住了计算机网络的精髓。至少我是这么理解的。

最近看的《计算机科学导论》,让我有从全局看待计算机科学的机会,其注重讲解基本概念,从二进制表示的计算机数据开始到计算机硬软件、计算机网络、最后到数据的组织,文笔可谓一脉相承、通俗易懂。一个计算机的内部是如此的奥秘,计算机与计算机之间组成的网络更是奥秘。所以这两天开始温习大学里上过的计算机网络课程,用的是谢希仁的《计算机网络教程》一书。

作者在chapter 2.1中假设了一个最简单的情况:连接在网络上的两台计算机A与B要互相传送文件?当A向B传送数据时,A是发起通信的计算机;当B向A传送数据时,B是发起通信的计算机。完成这一任务首先必须在这两台计算机之间建立一条传送数据的通路。但这远远不够,至少还需要完成以下工作:

1.发起通信的计算机必须将数据通信的通路进行激活,即发出一些信令,保证要传送的计算机数据能在这条通路上正确地发送和接收。
2.发起通信的计算机必须要告诉网络如何识别将要接收数据的计算机,即如何找到要通信的对方计算机。
3.发起通信的计算机必须查明对方计算机是否已准备好接受数据。
4.发起通信的计算机必须弄清楚,在对方计算机中的文件管理程序是否已经做好文件接收和存储的准备工作。
5.若两台计算机的文件格式不兼容,则至少其中的一台计算机应完成文件格式的转换。
6.对出现的各种差错和意外事故,如数据传送错误、重复或丢失,网络中某个结点交换机出现故障等,应该有可靠的措施来保证对方计算机最终能接收到正确的文件。

以上6步也只是轻描淡写,实现以上过程也是相当复杂的,涉及通信的两台计算机及所有设备,必须高度协调工作才行。试想一下,显示生活中打电话的原理不也是如出一辙吗?让对方电话机响起-》让自己知道对方已经拿起话筒-》让对方听到你的“喂,你好”-》听到对方的应答,这个过程是极其复杂的。但这个过程的具体技术实现是透明的,也就是说我们完全不知道里面经过了多少技术细节。

(全文…)

12th
十一月

What is BNF?
马克龙 发布于: 2009年11月12日 开发与应用 标签:, 评论 (0)

BNF is a formal metasyntax, originally created by John Backus, used to express context-free grammars. It was originally named “Backus Normal Form” but then renamed “Backus-Naur Form”, because Peter Naur made some changes to it.

BNF is one of the most commonly used metasyntactic notations for specifying the syntax of programming languages, command sets, and the like. It is widely used for language descriptions but seldom documented anywhere, for example, you can see is used in book named “HTML and XHTML The Definitive Guide”.

There are many variants and extensions of BNF, such as EBNF (described in ISO/IEC 14977) and ABNF (described in RFC 5234). ABNF is often used to act as a definition language for communication protocols of IETF, for example, you can see it used in RFC 2616 to specify HTTP/1.1.

By the way, you can also click here to see what is EBNF in Chinese, and here to see what is ABNF.