本章目录
3.8 PPP协议的配置示例(以Cisco Packet Tracer为工具)
前言
本章探讨数据链路层,就不考虑物理层是如何实现比特传输的细节,在这一章,我们就可以简单的认为数据帧通过数据链路由节点A发送到节点B。
1 数据链路层基本概念
1.1 数据发送模型
1.2 数据链路层使用的信道(两类)
- 点对点信道:这种信道使用一对一的点对点通信方式。
- 广播信道:这种信道使用一对多的广播通信方式,因此过程比较复杂。
- 广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。
1.3 链路(link)
链路(link)是一条点到点的物理线路段,中间没有任何其他的结点。
- 一条链路只是一条通路的一个组成部分。
1.4 数据链路(data link)
除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加在链路上,就构成了数据链路。
- 现最常用的方法:使用适配器(即网卡)来实现这些协议的硬件和软件
- 一般的适配器都包括了数据链路层和物理层这两层的功能
1.5 帧
数据链路层传送的是帧。数据链路层像个数字管道,常常在两个对等的数据链路层之间画出一个数字管道,而在这条数字管道上传输的数据单元是帧。
2 三个基本问题
数据链路层需要解决的三个基本问题:封装成帧、透明传输、差错检验。
2.1 封装成帧
封装成帧(framing)就是在一段数据(网络层的IP数据报)的前后分别添加首部和尾部,然后就构成了一个帧,确定帧的界限。首部和尾部的一个重要作用就是进行帧定界。
补充说明:
MTU(Maximum Transmission Unit,最大传输单元)是计算机网络中的一个重要概念,指在数据链路层允许传输的耽搁数据包的最大字节数。它决定了在不分片(fragment)的情况下,网络能够传输的最大数据包大小。如以太网的默认MTU为1500字节,超过此值的数据包需要分片。
2.2 透明传输
透明传输是计算机网络中确保数据在传输过程中内容不被篡改或误解的核心机制。其核心目标是让数据在跨越不同协议层或网络设备时无需发送方和接收方感知底层处理细节,实现“无感知”的可靠传输。
1. 问题:
若传输的数据是ASCII码中“可打印字符集”时,一般没有问题;若传输的数据不是仅由“可打印字符”组成时,就会出问题,如下图所示:
2. 解决方式:
字节填充法(byte stuffing)
- 发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B)。
- 注意:不同的数据链路层协议,定义的转义字符不一样。
- 接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
- 如果转义字符也出现在数据中,那么应在转义字符前插入一个转义字符。
- 接收端收到后去掉转义字符,还原出发送数据,这就是透明传输。
2.3 差错检验
现实的通信链路都不会是理想的。这就是说,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1,这就叫做比特差错。
为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。目前在数据链路层广泛使用了循环冗余检验CRC(Cyclic Redundancy Check)的差错检验技术。
补充:
误码率BER(Bit Error Rate):在一段时间内,传输错误的比特占所传输比特总数的比率。
2.3.1 循环冗余检验CRC
在数据链路层传送的帧中,广泛使用了循环冗余检验CRC的差错检测技术。
- 发送端:
- 在发送端,先把数据划分为组。假定每组k个比特。
- 假设待传送的一组数据M = 101001(现在k=6)。我们在M的后面再添加供差错检测用的n位冗余码一起发送。
- 冗余码的计算示例:现在k = 6,M = 101001,设n = 3,除数P = 1101,被除数是
= 101001000。模2运算的结果是:商Q = 110101,余数R = 001。把余数R作为冗余码添加到数据M的后面发送出去。发送的数据是
= 101001001,共 k + n 位(此处的+是拼接之意)。注:
- 循环冗余的除数P是发送端和接收端双方事先商定好的。
- 用二进制的模2运算进行
的运算,这相当于在M后面添加n个0。
- 得到的(k + n)位的数除以事先选定好的长度为(n + 1)为的除数P,得出商是Q、余数是R,余数R比除数P少1位,即R是n位。
- 帧检验序列FCS:在数据后面添加上的冗余码称为帧检验序列FCS。循环冗余检验CRC和帧检验序列FCS并不等同,区别如下:
- CRC是一种常用的检错方法,而FCS是添加在数据后面的冗余码;
- FCS可以用CRC这种方法得出,但CRC并非用来获得FCS的唯一方法。
- 接收端(对收到的每一帧进行CRC校验):
- 检验:
- 若FCS = 余数R = 0,则判定这个帧没有差错,就接受;
- 若FCS = 余数R != 0,则判定这个帧有差错,就丢弃。
- 特点:
- 但这种检测方法并不能确定究竟是哪一个或那几个比特出现差错;
- 只要经过严格的挑选,并使用位数足够多的除数P,那么出现测不到差错的概率就是变得很小很小。
- 检验:
- 小结:CRC差错检测技术
- 仅用循环冗余检验CRC差错检测技术只能做到无差错接受(accept)。
- “无差错接受”是指:“凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”。
- 也就是说:“凡是接收端数据链路层接受的帧都没有传输差错”(有差错的帧就丢弃而不接受)。
- 要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制。
- 考虑:帧重复、帧丢失、帧乱序的情况.
- 仅用循环冗余检验CRC差错检测技术只能做到无差错接受(accept)。
3 使用点到点信道的数据链路层(PPP协议)
PPP协议是数据链路层的核心协议之一,专为点对点通信设计,广泛应用于拨号上网、宽带接入(如PPPoE)、串行链路通信等场景。用户到ISP的链路使用PPP协议,如下图所示:
3.1 PPP协议的特点
- 简单,不提供可靠传输,出错后直接扔掉;
- 封装成帧,首部和尾部,帧开始符,帧结束符;
- 透明传输,加转义字符,收到后去掉转移字符;
- 差错检测,CRC计算FCS;
- 支持多种网络层协议,IPv4和IPv6网络层协议都可以封装到PPP帧中;
- 多种类型链路,光纤,铜线,同步传输、异步传输,串行、并行链路均可;
- 检测连接状态,检测连接状态;
- 最大传送单元,最大传输单元,1500字节;
- 网络层地址协商,能够为拨号的一段分配IP地址,子网掩码 网关和DNS;
- 数据压缩协商;
3.2 PPP协议的组成
1. 多协议封装:支持IP、IPX、AppleTalk、等多种网络层协议,通过协议字段标识数据类型。
2. 链路控制:通过LCP(链路控制协议)建立、配置和终止链路。
3. 认证机制:支持PAP(密码认证协议)和CHAP(挑战握手认证协议),保障连接安全。
4. 错误检测:使用FCS(帧校验序列)检测数据帧是否损坏。
5. 网络控制:通过NCP(网络控制协议)为上层协议分配参数(如IP地址)。
补充说明:
- PPP并非包含HDLC,而是在HDLC框架基础上扩展功能,适应更复杂的网络需求。
- HDLC适合简单高效的专线通信,PPP则更适合需要灵活性、安全性和多协议支持的场景。
3.3 PPP协议的帧格式
字段 | 长度(字节) | 功能 |
标志(Flag) | 1 | 标识帧的起始和结束(固定为0x7E,二进制01111110) |
地址(Address) | 1 | 固定为0xFF(广播地址),因PPP是点对点协议,故无需具体地址 |
控制(Control) | 1 | 固定为0x03,表示无序号帧(不用考虑先后顺序) |
协议(Protocol) | 2 | 标识数据部分类型(如:0x0021为IP数据包,0xC021为LCP协议数据) |
数据(Data) | 可变( |
上层协议数据(如:IP包) |
FCS(帧校验序列) | 2或4 | 校验帧完整性(如:CRC算法) |
3.4 PPP协议的透明传输问题
在同步传输(以帧为单位传输)时,PPP协议使用0比特填充法。
在异步传输(以字节为单位传输)时,PPP协议使用字符填充法。
1. 异步传输使用字节填充
- 在异步传输的链路上,数据传输以字节为单位,PPP帧的转义符定义为0x7D,并使用字节填充。
- 把信息字段中出现的每一个0x7E字节转变成为2字节序列(0x7D,0x5E)。
- 若信息字段中出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把0x7D转变成为2字节序列(0x7D,0x5D)。
2. 同步传输使用零比特填充
- 在同步传输的链路上,数据传输以帧为单位,PPP协议采用零比特填充方法来实现透明传输。
- 大家把PPP协议帧界定符0x7E写成二进制01111110,也就是可以看到中间有连续的6个1,只要想办法在数据部分不要出现连续的6个1,就肯定不会出现这界定符。
- 具体办法就是“零比特填充:
- 发送端:只要发现有5个连续1,则立即填入一个0。
- 接收端:对帧中的比特流进行扫描,每发现5个连续1时,就把这5个连续1后的一个0删除。
知识点补充:
- 同步传输
同步传输(Synchronous Transmi