数据链路层有两种通信方式: 点对点信道:使用一对一的点对点通信方式。 广播信道: 使用一对多的广播通信方式,使用专用的共享信道协议是为了协调多台主机的数据发送。
基础概念
链路(link)就是从一个结点到相邻结点的一段物理线路(有线或无线),中间没有任何其他的交换结点。 数据链路(data link)除了必须有一条物理线路外,还必须有一些必要的通信协议来控制这些数据的传输。 现在最常用的是使用网络适配器(既有硬件,也包括软件)来实现这些协议。一般的适配器都包括了数据链路层和物理层这两层的功能。 帧是点对点信道的数据链路层的协议数据单元。 IP数据报是网络层协议数据单元(或简称为数据报、分组或包)。
点对点信道的数据链路层在进行通信时的主要步骤如下: (1)结点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧。 (2)结点A把封装好的帧发送给结点B的数据链路层。 (3)若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报交给上面的网络层;否则丢弃这个帧。
三个基本问题
数据链路层上不管是什么协议,都不能避免的三个问题,分别是 封装成帧、透明传输和差错检测
封装成帧
封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。 首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限),SOH和EOT都是控制字符的名称。 为了提高帧的传输效率,应当使帧的数据部分长度尽可能地大于首部和尾部的长度,但是,每一种链路层协议都规定了所能传送的帧的数据部分长度上限——最大传送单元MTU(1500字节)。
透明传输
在数据链路层透明传送数据”表示无论什么样的比特组合的数据,都能够按照原样没有差错地通过这个数据链路层。 发送端利用字节填充(byte stuffing)或字符填充(character stuffing)方式让数据不包含特殊字符,接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符。
- 在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B,二进制是00011011)。
- 如果转义字符也出现在数据当中,那么在转义字符的前面插入一个转义字符。
差错检测
比特差错
比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1,这就叫做比特差错。 为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施,目前在数据链路层广泛使用了循环冗余检验CRC(Cyclic Redundancy Check)的检错技术。 假设要发送的数据是 101001,接收端和发送端约定的除数是 1101,那么冗余的位数是 3 位,所以被除数就是 101001000,所得的余数是 001,具体计算过程如下所示:(注意:目标是把第一位消除掉,所以有1101 和 0000) 发送端发送的数据由原来的 101001 变为 101001001,001 作为余数,我们称其为 FCS(帧检测序列) 接收端将接收到的数据利用上诉的计算过程计算,如果结果为 000,则说明发送过程中没有比特差错;否则就是有错误,将进行丢弃操作,但是具体是那个字节发错,就不知道了。 在数据链路层,发送端帧检验序列FCS的生成和接收端的CRC检验都是用硬件完成的,处理很迅速,因此并不会延误数据的传输。
传输差错
传输差错可分为两大类:一类就是前面所说的最基本的比特差错,而另一类传输差错则更复杂些,这就是收到的帧并没有出现比特差错,但却出现了帧丢失、帧重复或帧失序。 现在互联网就采取了区别对待的方法: 对于通信质量良好的有线传输链路,数据链路层协议不使用确认和重传机制,即不要求数据链路层向上提供可靠传输的服务。如果在数据链路层传输数据时出现了差错并且需要进行改正,那么改正差错的任务就由上层协议(例如,运输层的TCP协议)来完成。 对于通信质量较差的无线传输链路,数据链路层协议使用确认和重传机制,数据链路层向上提供可靠传输的服务
点对点协议PPP
PPP协议就是用户计算机和ISP进行通信时所使用的数据链路层协议。 PPP协议有三个组成部分: (1)一个将IP数据报封装到串行链路的方法。PPP既支持异步链路(无奇偶检验的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中就是其信息部分。这个信息部分的长度受最大传送单元MTU的限制。 (2)一个用来建立、配置和测试数据链路连接的链路控制协议LCP(Link Control Protocol)。通信的双方可协商一些选项。在RFC 1661中定义了11种类型的LCP分组。 (3)一套网络控制协议NCP(Network Control Protocol)(5),其中的每一个协议支持不同的网络层协议,如IP、OSI的网络层、DECnet,以及AppleTalk等。
各字段的意义
PPP的帧格式前3个字段(Flag、Address、Control)固定为:0x7E、0xFF和0x03。 协议字段:表示 Information 封装的协议包的类型(例如LCP、NCP和IP等)。 数据字段:包含PPP的净荷,数据的长度是经过协商确定,是可变长度的。 FCS字段:为整个帧的循环冗余校验码,用来检测传输中可能出现的数据错误。
字节填充
0x7E -> (0x7D,0x5E) 0x7D -> (0x7D,0x5D) 0x03 -> (0x7D,0x23)
零比特填充
01111110 - > 011111010
- 发送端只要发现有5个连续1,则立即填入一个0
- 接收端先找到标志字段F以确定一个帧的边界,接着用硬件对其中的比特流进行扫描,每当发现5个连续1时,就把这5个连续1后的一个0删除,以还原成原来的信息比特流。
初始化PPP链路
- 当用户拨号接入ISP后,就建立了一条从用户个人电脑到ISP的物理连接。
- 用户个人电脑向ISP发送一系列的链路控制协议LCP分组(封装成多个PPP帧),以便建立LCP连接,这些分组及其响应选择了将要使用的一些PPP参数。
- 接着进行网络层配置,网络控制协议NCP给新接入的用户个人电脑分配一个临时的IP地址,这样,用户个人电脑就成为互联网上的一个有IP地址的主机了。
- 当用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址,接着,LCP释放数据链路层连接,最后释放的是物理层的连接。
总结:从设备之间无链路开始,到先建立物理链路,再建立链路控制协议LCP链路。经过鉴别后再建立网络控制协议NCP链路,然后才能交换数据。由此可见,PPP协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。
链路控制协议(LCP) LCP 建立点对点链路,是 PPP 中实际工作的部分。LCP 位于物理层的上方,负责建立、配置和测试数据链路连接。LCP 还负责协商和设置 WAN 数据链路上的控制选项,这些选项由 NCP 处理。
PPP允许多个网络协议共用一个链路,网络控制协议 (NCP) 负责连接PPP(第二层)和网络协议 (第三层)。对于所使用的每个网络层协议,PPP 都分别使用独立的 NCP来连接。例如,IP 使用 IP 控制协议 (IPCP),IPX 使用 Novell IPX 控制协议 (IPXCP)。
|