2018.3.30
协议栈学习
OSI模型与协议栈
要弄懂什么是协议栈,首先就得学习一种协议栈。无线自组网协议栈是以OSI七层模型为原型的,于是我开始学习OSI模型,希望到时学习前者时能更好更快地理解。
OSI模型是干嘛的?个人认为是一种参考,一种比较稳健高效的跨设备信息交互的系统。它分很多层次,自底而上有物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
一个特点是:下层是为上层服务的,且这种服务是不可逆的、不越级的,比如说网络层只能得到数据链路层的服务,而不能得到物理层的服务。
另一个特点是:每一层有个“工人“为它服务,即下一层,且每一层有个“大佬”被它服务,即上一层。对于“工人”,让他服务时,需要给“工人”足够的细节、足够的信息,要清楚讲好他该做些什么,这样他将做他所分配的工作。但值得注意的是,关于“工人”怎样完成这件任务是无关紧要的,即下一层运作流程,该层是不予以关心的,只要下一层能完成任务就好。对于“大佬”,为他服务时,需要提供尽可能广泛、不特殊的接口,因为“大佬”可能需要你做很多事情,为使得能样样任务办好,该层应该有个能应付绝大多情况的能力。
以上两个特点是重要的,且对于构建一种新的系统模型时,这两个特点有很大的参考性。两个特点均保证了系统的逐级性,较严格的一级一级划分,不会出现跨级的联系。且系统的每一级只需着眼与它自己,不用关心下级的工作,只要学会把下级当作“黑匣子”用,且能给上级提供广泛性的服务就好了。可以说,这两个特点使得我们更容易地去实现、维护、修正这个系统。(其实这也有点模块化的味道)
那么协议栈是什么?首先要说说什么是协议。个人认为这可以理解为一种规范,举个例子,中文就可以看成是一种协议,大家都认同“电脑”这个词就是指电脑,于是大家就能很好地交流。要是有一天有个人称之为“脑电”,或许人们就听不懂了,交流也难以进行了。于是,协议可以理解为规范。很自然的,一个协议的成功与否应取决于有多少人遵守此协议,像那些人人都用的TCP/IP协议就很成功了。懂了协议,就来说说什么是协议栈。个人认为随着科技发展,有些系统是越发展越复杂了,像网络,一个OSI模型,整整七层,层层都有不容小觑的任务。每个任务的实现需要规范一些事情,比如大家电脑在网络中的地址,是应该叫“广东省广州市中山大学呢”,还是叫“中山大学广州市广东省”呢,这些需要有个规范,有个协议,有时一个任务可能需要不止一个协议。于是一层几个任务,几个协议,因为层层之间有级别,于是协议之间也有级别,像数据结构——栈一样,层层分级,于是曰之“协议栈”。
物理层,个人认为其主要特点是该层的任务与协议都是很“实在”的,“物理”性的。它规范了很多硬件方面的标准(机械特性、电气特性、功能特性、规程特性),比如,一条网线要多少条电线绞在一起,每条电线的半径,每条电线的作用,高电平、低电平所代表的意义(0还是1)之类的。物理层主要任务是在设备间建立、维护、断开物理上的链接,且要尽力屏蔽物理设备和传输媒体,通信手段的不同,为上级数据链路层提供广泛性服务,使它感受不到这些差异。
这里有些许概念应该了解:
模拟信号:电平幅度连续变化的电信号
数字信号:两种不用的电平表示0,1比特序列电压跳变的脉冲信号
调制:将发送端的数字信号变换为模拟信号
解调:将接收端的模拟信号变换为数字信号
串行通信:将一个字符的二进制代码从低位到高位依次传输,一个信道
并行通信:将一个字符的二进制代码同时通过8条并行的通信信道发送
单工通信:只能一个方向传输,例如寻呼机
半双工通信:双向传送,但一个时间只能一个方向发送信息,例如对讲机
全双工通信:可以同时发送信息,并且双向传送,例如手机
多路复用技术:发送端将多个用户的数据通过多路复用器汇集到一条通信线路(这条通信线路的带宽应该尽可能高),发送到接收端,接收端通过分用器把数据分离成各路数据,分发给接收端的多个用户
数据链路层,个人认为其主要特点是相邻两点的数据传输。它规范了两点间以什么样的流程(异步传输/同步传输)、载体(HDLC帧/BSC帧)来传输数据。这一层有较多任务:一是数据链路的建立、维护、断开;二是确保数据准确,至少逻辑无误(差错控制、流量控制)数据传输本质上是以物理信号传输,势必会受到自然界环境中其它物理信号的干扰,接收端接收到的,极有可能是有效信息与误差信息的叠加。因此,修正所接受到的数据是很有必要的,但更为重要的是要有能力发现数据部分信息有错。一种方法是循环冗余编码(CRC),此法主要原理是数学规律,有一点类似a+1与a对b的余数是不同的,正确的数据与有差错的数据也是如此。那么又如何修正有差错的数据呢?一种简单又有效的方法是要求发送点重发,直至接收点所收数据无误。另一种不常见的方法是数据本身所带有额外的信息,这些信息能使数据恢复为正常数据(或许是利用某种数学知识、算法)显然,前者的开销小(不需要带太多额外信息),但是需要发送多次;后者的开销大,实现难,但只需发送一次(或许后者适用于军事)。数据链路层协议(连路通信规程)是用来规范传输数据的流程载体的,分两类,异步协议和同步协议。异步协议是指