数据链路层使用的信道主要有两种类型:点对点信道和广播信道。
点对点
路由器在转发分组时只使用了下面的三层。
链路是从一个结点到相邻结点的一段物理线路,中间没有其他交换结点。
必须有一些必要的通信协议来控制这些数据在链路上的传输。把实现这些协议的硬件和软件加到链路上,就构成了数据链路。现在使用网络适配器来实现这些协议。
点对点信道的数据链路层的协议数据单元--帧。
数据链路层把网络层交下来的数据构成帧发到链路上,以及把接收到的帧中的数据取出并上交给网络层。网络层协议的数据单元是IP数据报。
点对点信道的数据链路层在进行通信时的主要步骤如下:
(1)结点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧。
(2)结点A把封装好的帧发送给结点B的数据链路层。
(3)若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报上交给上面的网络层;否则丢弃这个帧。
数据链路层有很多种,但有三个基本问题是共同的。分别是:封装成帧、透明传输和差错检测。
封装成帧
封装成帧就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。
网络层的IP数据报传送到数据链路层就称为帧的数据部分。每一种链路层协议都规定了所能传送的帧的数据部分长度上限--最大传送单元MTU。
控制字符名称SOH表示帧的首部,EOT表示帧的结束。
透明传输
当数据中碰巧有控制字符EOT时,后面的数据部分会被丢弃。
这时需要时数据中的控制字符不被当做帧结束的标志。要使其透明。
具体的方法是:发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”。在接收端的数据链路层在把数据送往网络层之前删除插入的转义字符。
这种方法称为字节填充或字符填充。
差错检测
数据链路层广泛使用了循环冗余检验CRC。
用二进制的模2运算进行2n乘M的运算,这相当于在M后面添加n个0。得到的(k+n)位的数除以收发双方事先商定德 长度为(n+1)位的除数P,得出商Q(不重要)而余数是R(n位,比p少一位)。这个余数R就作为冗余码拼接在数据M的后面发送出去。这种为了进行检错而添加的冗余码常称为帧检验序列FCS。
在接收端把接收到的数据以帧位单位进行CRC检验:把收到的每一个帧都除以同样的除数p,然后检查得到的余数R。
(1)若得出的余数R=0,则判定这个帧没有出错。
(2)若得出的R!=0,则帧出错。
在数据链路层仅仅使用循环冗余检验CRC差错检测技术,则只能对帧的无差错接受。即:“凡是接收端数据链路层接收的帧,我们都以非常接近1的概率认为这些帧在传输过程总没有产生错误”。
这样认为:凡是接收端数据链路层接受的帧均无差错。
数据链路层不是可靠传输。可靠传输是:数据链路层的发送端发送什么,接收端就收到什么。除了比特出错,还有可能出现帧丢失、帧重复和帧失序。
在数据链路层使用CRC检验,能够实现无比特差错的传输,但这不是可靠传输。过去观点:必须让数据链路层向上提供可靠传输,增加了帧编号、确认和重传机制。
点对点协议PPP
是目前使用最广泛的数据链路层协议。
PPP(点到点协议)是为在同等单元之间传输数据包这样的简单链路设计的链路层协议。
PPP协议是用户计算机和ISP进行通信时所使用的数据链路层协议。
PPP协议应该满足的要求:
(1)简单;(2)封装成帧;(3)透明性;(4)多种网络层协议;(5)多种类型链路;(6)差错检测;(7)检测连接状态;(8)最大传输单元;(9)网络层地址协商;(10)数据压缩协商。
最大传输单元是数据链路层可以载荷的数据部分的最大长度,不是帧的总长度。IP数据报的长度是可变的,但是不超过1500字节。
PPP协议有三个部分组成:
(1)一个将IP数据报封装到串行链路的方法。
(2)一个用来建立、配置和测试数据链路连接的链路控制协议LCP。
(3)一套网络控制协议NCP,其中的每一个协议支持不同的网络层协议。
PPP帧的格式
PPP帧的首部和尾部分别为四个字段和两个字段。
首部的第一个字段和尾部的第二个字段都是标志字段F,规定为0x7E.标志字段表示一个帧的开始或结束。因此标志字段是PPP帧的定界符。
字段意义
首部中的地址字段A规定为0xFF,控制字段C规定为0x03。PPP首部的第四个字段是2字节的协议字段。当协议字段为0x0021时,PPP帧的字段就是IP数据报。若为0xC021,则信息字段是PPP链路控制协议LCP的数据,而0x8021表示这是网络层的控制数据。
字节填充
当信息字段中出现和标志字段一样的比特组合时,就采取措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。
当PPP使用异步传输时,它把转义符定义为0x7D,并使用字节填充。
(1)把信息字段中出现的每一个0x7E字节转变成为2字节序列。
(2)若信息字段中出现一个0x7D的字节,则把0x7D转变成为2字节序列(0x7D,0x5D)。
零比特填充
使用零比特填充来实现透明传输。做法:扫描整个信息字段,只要发现有5个连续的1,则立即填入0。接收端在收到一个帧时,先找到标志字段F以确定一个帧的边界,扫描比特流,当发现5个连续的1时,就把这5个1后的一个0删除。
PPP协议的功能
PPP协议的工作状态
当用户拨号接入ISP后,就建立了一条从用户PC到ISP的物理连接。这时,用户PC向ISP发送一系列的链路控制协议LCP分组,以便建立LCP连接。接着还要进行网络层配置,网络控制协议NCP给新接入的用户PC分配一个临时的IP地址。这样PC用户就称为因特网上的一个有IP地址的主机了。
当用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址。接着,LCP释放数据链路层连接。最后释放的是物理层的连接。
当用户PC通过调制解调器呼叫路由器时,路由器就能检测到调制解调器发出的载波信号。在双方建立了物理层连接后,PPP就进入“链路建立”状态,其目的是建立链路层的LCP连接。
这时LCP开始协商一些配置选项,即发送LCP的配置请求帧。这是个PPP帧,其协议字段置为LCP对应的代码,而信息字段包含特定的配置请求。链路的另一端可以faso9ng以下几种响应中的一种:
(1)配置确认帧;(2)配置否认帧;(3)配置拒绝帧。
在“网络层协议”状态,PPP链路的两端的网络协议NCP根据网络的不同协议互相交换网络层特定的网络控制分组。这个步骤非常重要,因为现在的路由器都能够同时支持多种的网络层协议。
数据传输结束后,可以由链路的一端发出终止请求LCP分组请求终止链路连接,在收到对方发来的终止确认LCP分组后,转到“链路终止”状态。如果链路出现故障,也会从“链路打开”状态转到“链路终止”状态。