串口通讯—网络通信的数据包(帧)
 

在网络通信中,“包”(Packet)和 “帧”(Frame)的概念相同,均指通信中的一个数据块。对于具体某种通信网络,一般使用术语“帧”。一种网络的帧格式可能与另一种网络不同,通常使用术语“包”来指一般意义的帧。串行通信的数据格式有面向字符型的数据格式,如单同步、双同步、外同步;也有面向比特型的数据格式,这以帧为单位传输,每帧由六个部分组成,分别是标志区、地址区、控制区、信息区、帧校验区和标志区。
串行通信协议属于ISO国际参考标准的第三层,数据链路层。数据链路层必须使用物理层提供给它的服务。物理层所做的工作是接收个一个原始的比特流,并准备把它交给目的地。不能保证这个比特流无差错。所接收的比特的数量也许少于,也许等于或多于所传递的比特的数量,它们具有不同的值。一直要上到数据链路层才能进行检测,如果需要的话,纠正错误。对于数据层,通常的方法是把比特流分成离散的帧,并对每一帧计算出校验和……。当一帧到达目的地后重新计算校验和时,如果新算出的校验和不同于帧中所包括的值,数据链路层就知道出现差错了,从而会采取措施处理差错(即,丢弃坏帧,并发回一个差错报告)。
数据链路层的任务是在两个相邻接点间的线路上无差错地传送以帧为单位的数据。每一帧包括数据和必要的控制信息。人们发现,对于经常产生误码的实际链路,只要加上合适的控制规程,就可以使通信变为比较可靠的。如IBM公司推出了著名的体系结构SNA,在SNA的数据链路规程采用了面向比特的规程SDLC,后来ISO把它修改后称为HDLC,译为高级数据链路控制。在INTERNET中,用户与ISP(INTERNET服务提供者)之间的链路上使用得最多的协议就是SLIP和PPP。
下面就简单介绍HDLC帧结构以及PPP帧结构:
1.HDLC的帧结构:

  从网络层交下来的分组,变成为数据链路层的数据。这就是图1中的信息字段。信息字段的长度没有具体规定。数据链路层在信息字段的头尾各加上24bit的控制信息,这样就构成了一个完整的帧。HDLC规定了一个帧的开头(即首部中的第一个字节)和结尾(即尾部中的最后一个字节)各放入一个特殊的标记,作为一个帧的边界。这个标记就叫做标志字段F。标志字段F为6个连续1加上两边各一个0共8位。地址字段A也是8个比特,它一般被写入次站的地址。帧校验序列FSC字共占16位,采用CRC-CCITT生成多项式。控制字段功8位,是最复杂的字段,HDLC的许多重要功能都要靠控制字段来实现。根据其前面两个比特的取值,可将HDLC的许多帧划分为三大类,即信息帧、监督帧和无编号帧。


图1

2.点对点协议PPP的帧结构:PPP帧格式和HDLC的相似,PPP帧的前3个字段和最后两个字段和HDLC的格式是一样的。PPP不是面向比特的,因而所有的PPP帧的长度都是整数个字节。与HDLC不同的是多了一个2个字节的协议字段。当协议字段为0X0021时,信息字段就是IIP数据报。若为0XC021,则信息字段是链路控制数据,而0X8021表示这是网络控制数据。其结构视图如图2所示。


图2

3.例子:异步通信的数据格式

  异步通信的数据格式如图3所示:



图3

可以看出,按标准的饿异步通信数据格式,1个字符在传输事,除了传输实际编码信息外,还要传输几个外加数位。具体说,在一个字符开始传输前,输出线必须在逻辑上处于“1”状态,这称为标识态。传输一开始,输出线由标识态变为“0”状态,从而作为起始位。起始位后面为5~8个信息位,信息位有低往高排列,即第一位为字符的最低位,在同意个传输系统中,信息位的数目是固定的。信息位后面为校验位,校验位可以按奇校验设置,也可以按偶校验设置,也可以不设置。最后的位数为“1”,它作为停止位,停止位可为1位、1.5位或者2位。如果传输1个字符以后,立即传输下一个字符,那么,后一个字符的起始位变紧挨着前一个字符的停止位了,否则,输出线又会进入标识态。