本节书摘来自异步社区《操作系统真象还原》一书中的第0章,第0.13节,作者:郑钢著,更多章节内容可以访问云栖社区“异步社区”公众号查看
0.13 什么是工程,什么是协议
这两个小问题,一些非开发型技术人员经常会问到,做过开发的同学肯定了解。想想还是简单说一下吧(因为这名词似乎也没法说复杂)。
软件中的工程是指开发一套软件所需要的全部文件,包括配置环境。
在一般的集成开发环境中如eclipse或vc++,在程序的开始都是先建立一个project,这就是所谓的工程,它相当于一个大目录,以后写的代码都在这里面。
全部文件包含实际代码和环境配置两部分。实际代码部分,除了自己写的代码文件之外,一般都要包含其他同事写的头文件,若是与他方合作,还要包含第三方头文件。环境配置部分,一般是配置一些模板、库文件目录,具体还要根据所用的实际框架来配置,包含一些服务器的地址,端口之类也都在配置文件中。还是那句话,工程就是为了完成软件编写所涉及的全部相关文件。
协议是一种大家共同遵守的规约,主要用来实现通信、共享、协作;起初是为避免大家各干各的,无法彼此调用对方成果的情况,从而给大家统一一种接口、一组数据调用或者分析的约定。
大家达成一致后,都遵守这个约定开发自己的产品,别人只要也按照这个约定就能够享用自己的成果,从而实现了彼此兼容。只要是技术人员都对TCP/IP有所了解,这就是我们目前赖以生存的网络协议。根据OSI七层模型,它规定数据的第一层,也就是最外层物理层,这一层包含的是电路相关的数据。发送方和接收方都彼此认同最外层的就是电路传输用的数据。每一层中的前几个固定的字节必须是描述当前层的属性,根据此属性就能找到需要的数据。各层中的数据部分都是更上一层的数据,如第一层(物理层)中的数据部分是第二层(数据链路层)的属性+数据,第三层(网络层)的数据部分是第四层(传输层)TCP或UDP的属性+数据。各层都是如此,直到第七层(应用层)的数据部分才是真正应用软件所需要的数据。由此可见,对方一大串数据发过来后,经过层层剥离处理,到了最终的接收方(应用软件),只是一小点啦。
如图0-7所示,两边的应用程序互发数据时,其实发的就是最顶层的那一小点“数据”,每下一层,便加了各层的报文头,上层整个(包括自己的报文头和报文体)全部成了下一层的数据部分。
这样说似乎还是很抽象,具体地说,就是需要的数据是在偏移文件固定大小的字节处,这个固定字节是多少,就是协议中所规定的。不了解TCP/IP的同学可以参看各层报文格式,自行查阅吧。