数据链路层属于计算机网络的低层。数据链路层使用的信道主要有以下两种类型:
(1)点对点信道:这种信道使用一对一的点对点通信方式
(2)广播信道:这种信道使用一对多的广播通信方式,因此过程比较负责。广播信道信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送
下图是主机H1向H2发送数据
3.1 数据链路和帧
链路和数据链路并不是一回事
所谓链路就是从一个借点到相邻结点的一段物理线路,而中间没有任何其他的交换结点
数据链路则是一个概念。这是因为当需要在一条线路上传送数据时,除了必须有一条物理线路外,还必须有一些必要的通信协议来控制这些数据的传输,还必须有一些必要的通信协议来控制这些数据的传输,若把实现这些协议的硬件和软件加到链路上,就构成了数据的链路。现在最常用的方法是使用网络配适器来实现这些协议的硬件和软件,一般的配适器都包括了数据链路层和物理层这两层的功能
帧——点对点信道的数据链路层的协议数据单元
数据链路层把网络层交下来的数据构成帧发送到链路上,以及把接受到的帧中的数据取出并上交给网络层,在因特网中网络层协议数据单元就是IP数据报(或简称为数据报,分组或包)
点对点信道的数据链路层在进行通信时的主要步骤如下:
(1)结点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧
(2)结点A把封装好的帧发送给结点B的数据链路层
(3)若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报上交给上面的网络层;否则丢弃这个帧
数据链路层不必考虑物理层如何实现比特传输的细节。我们甚至还可以更简单的设想好像是沿着两个数据链路层之间的水平方向吧帧直接发送到对方
3.1.2 三个基本问题
数据链路层协议有很多种,但是三个基本问题是共同的,这三个问题使:封装成帧,透明传输和差错检测
1. 封装成帧
封装成帧就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧
分组交换的一个重要概念就是:所有在因特网上传送到数据都是以分组(即IP数据报)为传送单位。网络层的IP数据传送到数据链路层就成为帧的数据部分,在帧的数据部分的前面和后端分别添加上首部和尾部,构成了一个完整的帧。因此,帧长等于数据部分的长度加上帧首部和帧尾部的长度,而首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限)。此外,首部和尾部还包括许多必要的控制信息。
2.透明传输
由于帧的开始和结束的标记是使用专门指明的控制字符,因此,所传输的数据中的8比特的组合一定不允许和作用帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误
当传送的帧是用文本文件组成的帧时(文本文件中的字符都是从键盘上输入的),其数据部分显然不会出现像SOH或EOT这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,因此这样的传输就是透明传输。
3.错检测
现实的通信链路都不会是理想的。这就是说,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1.这就叫做比特差错,比特差错是传输差错中的一种。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率。误码率与信噪比有很大的关系,如果设法提高信噪比,就可以使误码率减小。实际的通信链路并非理想的,他不可能使误码率下降到零。因此,为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错的检测措施,目前在数据链路层广泛使用了循环冗余检验CRC的检错技术
在数据链路层若仅仅使用循环冗余检验CRC差错检测技术,则只能做到对帧的无差错接受,即:凡是接收端数据链路层接受的帧,我们都能以非常接近于1 的概率认为这些帧在传输过程中没有产生差错。接收端丢地的帧虽然曾收到了,但最终还是因为有差错被丢弃,即没有被接受,以上所述可以近似地表述为:凡是接收数据链路层接受的帧均无差错
可靠传输:数据链路层发送端发送什么,在接收端就受到什么
传输差错可分为:基本比特差错;收到的帧并没有出现比特差错,但却出现了帧丢失,帧重复或帧失序。
为把数据链路层做成是可靠传输的,我们在CRC检错的基础上增加了,帧编号。确认和重传机制
3.2 点对点协议PPP
1.ppp协议应满足的需求
(1)简单:接收方每收到一个帧,就进行CRC检验。如CRC检验正确,就收下这个帧;反之,就丢弃这个帧,其他什么都不做
(2)封装成帧:PPP协议必须规定特殊的字符作为帧定界符(即标志一个帧的开始和结束的字符),以便使接收端从接收到的比特流中能准确找出帧的开始和结束位置
(3)透明性:PPP协议必须保证数据传输的透明性,这就是说如果数据中碰巧出现了和帧定界符一样的比特组合时,就要采取有效的措施来解决这个问题
(4)多种网络层协议:PPP协议必须能够在同一条物理链路上同时支持多种网络层协议(如:IP和IPX)的运行,当点对点链路所连接的是局域网或路由器时,PPP协议必须同时支持在链路所连接的局域网或路由器上运行的各种网络层协议
(5)多种类型链路: 除了要支持多种网络层的协议外,PPP还必须能够在多种类型的链路上运行。例如,串行(一次只发送一个比特)或并行的(一次并行地发送多个比特),同步的或异步的,低俗的或告诉的,电的或光的,交换的(动态的)或非交换的(静态的)点对点链路
(6)差错检测 :PPP协议必须能够对接收端收到的帧进行检测,并立即丢弃有差错的帧。若在数据链路层不进行差错检测,那么已出现差错的无用帧就还要在网络中继续向前转发,因而会白白浪费许多的网络资源
(7)检测连接状态:PPP协议必须具有一种机制能够及时(不超过几分钟)自动检测出链路是否处于正常工作状态。当出现故障的链路隔了一段时间后又重新恢复正常工作时,就特别需要这种及时检测功能
(8)最大传送单元 PPP协议必须对每一种类型的点对点链路设置最大传送单元MTU标准默认值,这样做事为了促进各种实现之间的互操作性。如果高层协议发送的分组过长并操作MTU的数值,PPP就要丢地这样的帧,并返回差错,需强调的是,MTU是数据链路层的帧可以载荷的数据部分的最大长度,而不是帧的总长度
(9)网络层的地址协商 PPP协议必须提供一种机制使通信的两个网络层(例如,两个IP层)的实体能够通过协商知道或能够配置彼此的网络层地址。协商的算法应尽可能简单,并且能够在所有的情况下得出协商结果。这对拨号连接的链路特别重要,因为仅仅在链路层建立了连接而不知道对方网络层地址时,则还不能够保证网络层能够传送分组。
(10)数据压缩协商 PPP协议必须提供一种方法来协商使用数据压缩算法,但PPP协议并不要求将数据压缩算法进行标准化
ppp协议不需要的功能
(1)纠错:在TCP/IP协议族中,可靠传输由运输层TCP协议负责,而数据链路层的PPP协议只进行检错。这就是说,PPP协议是不可靠传输协议。
(2)流量控制 在TCP/IP协议族中,端到端的流量控制由TCP负责,因而链路级的PPP协议就不需要再重复进行流量控制
(3)序号: PPP不是可靠传输协议,因此不需要使用帧的序号(许多过去曾经很流行的停止等待协议或连续ARQ协议都是用序号),端到端的流量控制由TCP负责,因而链路级的PPP协议就不需要在重复进行流量控制
(4)多点线路:PPP协议不支持多线线路(即一个主站轮流和链路上的多个站进行通信),而只支持点对点的链路通信
(5)半双工或单工链路 :PPP协议只支持全双工链路
3. PPP协议的组成
PPP协议有三个组成部分:
(1)一个将IP数据报封装到串行链路的方法。PPP既支持异步链路(无奇偶检验的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中就是其信息部分。这个信息部分的长度受最大传送单元MTU的限制
(2)一个用来建立、配置和测试数据链路连接的链路控制协议LCP。通信的双方可协商一些选项。在RFC1661中定义了11种类型的LCP分组。
(3)一套网络控制协议NCP,其中的每一个协议支持不同的网络协议层,如IP。OSI的网络层。DECnet,以及AppleTalk等
3.2.2 PPP协议的帧格式
1.字段的意义
2.字节填充
当信息字段中出现和标志字段一样的比特组合时,就必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中
当PPP使用一部传输时,它把转义符定义为0x7D,并使用字节填充,RFC1662规定如下填充方法
(1)把信息字段中出现的每一个0x7E字节转变为2字节序列(0x7D,0x5E)
(2)若信息资源中出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把0x7D转变成为2字节序列(0x7D,0x5D)
(3)若信息字段中出现ASCLL码的控制仪字符(即数值小于0x20的字符),则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变。例如,出现0x03(在控制字符是传输结束ETX)就要把它转变为2字节序列(0x07D,0x31)
3.零比特填充
PPP协议用在SONET/SDH链路时,是时候同步传输(一连串的比特连续传送)而不是异步传输(逐个字符的传送)。在这种情况下,PPP协议采用零比特填充方法来实现透明传输
3.2.3 PPP协议的工作状态
下图是PPP协议的状态图
PPP链路的初始和终止状态永远是图中的链路静止状态,这时在用户PC机和ISP的路由器之间并不存在物理层的连接。
当用户PC机通过调制解调器呼叫路由器时,路由器就能够检测到调制解掉器发出的载波型号。在双方建立了物理层连接后,PPP就进入链路建立状态,其目的是建立链路层的LCP连接。
这时LCP开始协商一些配置选项,即发送LCP的配置请求帧。这是个PPP帧,其协议字段置为LCP对应的代码,而信息字段包含特定的配置请求。链路的另一端可以发送以下几种相应的一种:
(1)配置确认帧:所有选项都接受
(2)配置否认帧:所有选项都理解但不能接受
(3)配置拒绝帧:选项有的无法识别或不能接受,需要协商
LCP配置选项包括链路上的最大帧长,所使用的鉴别系i恶意的规约(如果有的话),以及不使用PPP帧中的地址和控制字段(因为这两个字段的值是固定的,没有任何信息量,可以在PPP帧的首部中省略这两个字节)
协商结束后双方就建立了LCP链路,接着就进入鉴别状态,在这以状态,只允许传送LCP协议的分组、鉴别协议的分组以及检测链路质量的分组。若使用口令鉴别协议PAP,则需要发起通信的一方发送身份标识符和口林。系统可允许用户重试若干次。如果需要有更好的安全性,则可使用更加复杂的口令握手鉴别协议。若鉴别身份失败,则转到链路终止状态。若鉴别成功,则进入网络成协议状态
在网络层协议状态,ppp链路的两端的网络控制协议NCP根据万络层的不同协议互相交换网络层特定的网络控制分组。这个步骤很重要的,因为喜爱你在的路由器都能够同时支持多种的网络层协议。总之,PPP协议连夺冠的网络层可以运行不同的网络层协议,但仍然可使用同一个PPP协议进行通信
如果在PPP链路上运行的是IP协议,则对PPP链路的每一端配置IP协议模块(如分配IP地址)时就要使用NCP中支持IP的协议——IP控制协议IPCP。IPCP分组也封装成PPP帧(其中的协议字段为0x8201)在PPP链路上传送。在低速链路上运行时,双方还可以协商使用压缩的TCP和IP首部,以减少在链路上发送的比特数
当网络层配置完毕后,链路就进入可进行数据通信的链路打开状态。链路的两个PPP端点可以彼此向对法国发送分组。两个PPP端点还可以发送回送请求LCP分组和回送回答LCP分组,以检查链路的状态。
数据传输结束后,可以由链路的一端发出终止请求LCP分组请求终止链路连接,在收到对方发来的终止确认LCP分组后,转到链路终止状态。如果链路出现故障,会从链路打开状态转到链路终止状态。当调制解调器的载波停止后,则回到链路静止状态
图的右边方框给出了PPP协议的几个状态的说明,从设备之间的无链路开始,到先接力物理链路,在建立LCP链路。经过鉴别后在建立NCP链路,然后才能交换数据。由此可见,PPP协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容
3.3 使用广播信道的数据链路层
3.3.1 局域网的数据链路层
共享信道要着重考虑的一个问题就是如何使众多用户能够合理而方便地共享通信媒体资源。这在技术上有两种方法:
(1)静态划分信道: 频分复用、时分复用。波分复用和码分复用等。用户只要分配到了信道就不会和其他用户发生冲突。但是这种划分信道的方法代价较高,不适合于局域网使用
(2)动态媒体接入控制,它又称为多点接入,其特点是信道并非在用户通信时固定分配给用户。这里有分为以下两类:
随机接入 : 特点是所有的用户可随机地发送信息。但如果恰巧有两个或更多的用户在同一时刻发送信息,那么在共享媒体上就要产生碰撞(即发生了冲突),是的这些用户的发送都失败。因此必须有解决碰撞的网络协议
受控接入 : 特点是用户不能随机地发送信息而必须服从一定 的控制。这类的典型代表有分散控制的令牌环局域网和集中控制的多点线路探询,或称为轮询