计算机协议是什么[转]
转载自《操作系统真相还原》
协议是一种大家共同遵守的规约,主要用来实现通信、共享、协作:起初是为避免大家各干各的,无法彼此调用对方成果的情况,从而给大家统一一种接口、一组数据调用或者分析的约定。
大家达成一致后,都遵守这个约定开发自己的产品,别人只要也按照这个约定就能够享用自己的成果,从而实现了彼此兼容。只要是技术人员都对TCP/IP 有所了解,这就是我们目前赖以生存的网络协议。根据OSI 七层模型,它规定数据的第一层,也就是最外层物理层,这一层包含的是电路相关的数据。
发送方和接收方都彼此认同最外层的就是电路传输用的数据。每一层中的前几个固定的字节必须是描述当前层的属性,根据此属性就能找到需要的数据。各层中的数据部分都是更上一层的数据,如第一层(物理层)中的数据部分是第二层(数据链路层)的属性+数据,第三层(网络层)的数据部分是第四层(传输层) TCP 或UDP 的属性+数据。各层都是如此,直到第七层(应用层)的数据部分才是真正应用软件所需要的数据。由此可见,对方一大串数据发过来后,经过层层剥离处理,到了最终的接收方(应用软件),只是一小点啦。
如下图所示,两边的应用程序互发数据时,其实发的就是最顶层的那一小点“数据”,每下一层,便加了各层的报文头,上层整个(包括自己的报文头和报文体)全部成了下一层的数据部分。
这样说似乎还是很抽象,具体地说,就是需要的数据是在偏移文件固定大小的字节处,这个固定字节是多少,就是协议中所规定的。不了解TCP/IP的可以参看各层报文格式,慢慢一起学习吧,共勉。
举个例子:
如果你通过网络进行通信,你也可以不要网络协议栈,同样也是可以收发包的。但是问题就来了,别人发给你的包都是按照网络协议栈要求来的,发给你后,你却没有网络协议栈来解析,所以你就不知道别人发给你的东西是什么。。。。你也可以把包按照你自己的封装来发包给别人,但是别人收到包以后,却又不知道你发的包到底是什么东东。。。。双方是可以通信,但通信双方却不知道各自说的是什么意思,这就很尴尬了,也是协议栈的用处所在。