数据链路层是OSI参考模型中的第二层,介乎于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,数据链路必须具备一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。
数据链路层在物理层提供的服务的基础上向网络层提供服务,其基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。数据链路层应具备如下功能:
①链路连接的建立,拆除,分离。
②帧定界和帧同步。链路层的数据传输单元是帧,协议不同,帧的长短和界面也有差别,但无论如何必须对帧进行定界。
③顺序控制,指对帧的收发顺序的控制。
④差错检测和恢复。还有链路标识,流量控制等等。差错检测多用方阵码校验和循环码校验来检测信道上数据的误码,而帧丢失等用序号检测。各种错误的恢复则常靠反馈重发技术来完成。
数据链路层协议是为发对等实体间保持一致而制定的,也为了顺利完成对网络层的服务。主要协议如下:
a.ISO1745--1975:“数据通信系统的基本型控制规程”。这是一种面向字符的标准,利用10个控制字符完成链路的建立,拆除及数据交换。对帧的收发情况及差错恢复也是靠这些字符来完成.ISO1155,ISO1177,ISO2626,ISO2629等标准的配合使用可形成多种链路控制和数据传输方式。
b.ISO3309--1984:称为“HDLC帧结构”.ISO4335--1984:称为“HDLC规程要素”。ISO7809--1984:称为“HDLC规程类型汇编”。这3个标准都是为面向比特的数据传输控制而制定的。有人习惯上把这3个标准组合称为链路控制规程。
c.ISO7776:称为“DTE数据链路层规程”。与CCITTX.25LAB“平衡型链路访问规程”相兼容。
数据链路层成纸的方法主要有三个:字符计数法,字符填充的首尾界定法和比特填充的首尾界定法。
字符计数法用一个帧的字节来说明帧的总长度(总长度包含这个帧头)
看这张图,白色为帧头,指明了长度,比如帧长度为5,后面就跟了4个字节,第二帧的长度为5,后面也跟了4字节,之后是两个8字节长度的,所以各自跟了7字节的正文部分。但是很显然,如果头这一个字节出了问题,影响的就不仅仅是这一帧了,其他的都会出问题。比如:
第二个帧头出了问题,那么就会出现大问题:后面的全部帧都会出错,连锁反应。所以这种方法不太常用。
在帧的头之前和尾之后加一个特殊的字符,只要读到这个字符帧就开始了,再次读到就认为这个帧结束了,如下图所示:
这种方法能够避免上面字符计数法的头出错问题,但是他也有问题:如果正文里面出现了flag特殊字符怎么办?解决办法是在正文里面flag字符前面加上转义字符esc,这样读到flag之前如果没有转义字符esc,那么认为帧结束,如果有esc那么认为他就是普通的数据就行。问题又来了,那么正文里面如果有esc字符呢?那么就在esc前面再加一个esc就行了,这两个的处理是一样的。如下图:
这种方法和第二种比较类似,区别是他把flag具体化了,为6个1。这样当正文读取的时候一旦出现了5个连续的1,那么在后面填充一个0,避免出现6个1造成帧提前结束。如下图所示:
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』