数据链路层协议之点对点协议PPP
数据链路层
- 数据链路层使用的信道主要有两种类型:
点对点信道:一对一通信方式
广播信道:一对多通信方式 - 数据链路层把网络层交下来的数据构成帧发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。 数据链路层协议数据单元是数据帧(帧)。 网络层协议数据单元是IP数据报(数据报、分组、包)。
- 数据链路层的基本功能
封装成帧:
封装成帧就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。数据帧的长度就是数据加上首部和尾部的总长度。 首部和尾部的一个重要作用就是进行帧定界,就是确定数据帧的界限。
透明传输:
由于帧的开始和结束的标记是专门指明的字符,因此所传输的数据中不能够有任何8比特的字符和用作帧定界的控
制字符的比特编码一样。
差错检测:
数据帧在传输中可能发生两种错误:
比特差错:1 可能会变成 0 而 0 也可能变成 1。
传输差错:收到的帧没有出现比特差错,但却出现了帧丢失、帧重复和帧失序。
数据链路层使用循环冗余检验CRC
(Cyclic Redundancy Check)来实现差错检测。
CRC的基本原理:
在发送端,先把数据划分为组,假定每组k个比特。例如数据M=100101(k=6)。通过CRC运算,在数据M的后面添加供差错检测用的n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。 在接收端,先从接收的数据帧中提取出n位冗余码,进行CRC检验。 如果检验的结果正确,则接受(accept)数据帧。如果检验的结果不正确,则直接丢弃。 CRC检验不能确定错误发生的原因,只能判断数据帧是否正确。
点对点协议PPP
点对点协议 PPP (Point-to-Point Protocol):点对点链路上,使用最为广泛的数据链路层协议。
什么情况下使用点对点协议 PPP?
用户使用拨号电话线接入因特网时,一般都是使用 PPP 协议。
PPP协议的基本特征
-
简单
IETF在设计因特网体系结构时把其中最复杂的部分放在TCP协议中,而网际协议IP则相对比较简单,它提供的是不可靠的数据报服务。数据链路层就应该设计的比网络层更加简单,因此数据链路层的帧,不需要纠错,不需要序号,也不需要进行流量控制。因此,“简单”是首要追求。对简单的追求还使得协议不易出错,不同厂商在协议的不同实现上提高了互操作性,促进了协议标准化工作过。 -
封装成帧
PPP协议规定特殊的字符作为帧定界符,便于在比特流中方便的确定帧的开始和结束位置。 -
透明性
PPP协议要保证数据传输的透明性,也就是转义符。 -
多种网络层协议
PPP协议必须能够在同一条物理链路上同时支持多种网络层协议的运行。 -
多种类型链路
PPP协议必须能够在多种类型的链路上运行,要支持并行和串行通信、同步和异步通信、低速和高速通信、电或者光通信、交换和静态通信。 -
差错检测
PPP协议要对接收的帧进行检测,对检测错误的帧立即丢弃。 -
最大传送单元
PPP协议必须对每一种类型的点对点链路设置最大传送单元MTU的标准默认值。也就是定义数据帧的大小。 -
网络层地址协商
PPP协议必须提供一种机制使通信的两个网络层的实体能够通过协商知道或能够配置彼此的网络层地址。 -
数据压缩协商
PPP协议必须提供一种方法来协商使用数据压缩算法,以提高数据传输效率。 -
不支持可靠传输
可靠传输由TCP协议负责,PPP协议不需要进行纠错、不需要设置序号来解决传输错误、不需要进行流量控制。PPP协议不支持多点线路,仅支持点对点链路通信,且只支持全双工通信。
PPP协议的组成三要素
-
封装方法
PPP协议要包含一个将IP数据报封装成串行链路的方法。既要支持异步链路,也要支持同步链路。 -
链路控制协议(LCP,Link Control Protocol)
用来定义建立、配置和测试数据链路链接的协议。 -
网络控制协议(NCP,Network Control Protocol)
PPP包含了一套NCP,每个NCP协议支持不同的网络层协议,例如IP、OSI的网络层、DECnet、AppleTalk等,实现向上兼容。
PPP协议的帧格式
F字段:标志字段,规定为0x7E(十六进制下的7E),二进制表示为01111110,表示PPP数据帧的开始和结束。
A字段:规定为0xFF,二进制表示为11111111,没有任何意义,预留使用。
C字段:规定为0x03,二进制表示为00000011,没有任何意义,预留使用。
协议字段:
0x0021:信息字段为IP数据报。
0xC021:信息字段为PPP链路控制数据。
0x8021:信息字段为网络控制数据。
信息字段:长度可变,但不超过 1500 字节。
FCS字段:2 个字节,使用 CRC 的帧检验序列。
如果在信息字段中出现和标志字段一样的比特组合时(0x7E-F字段),就需要采取一些措施使像标志字段一样的比特组合不能出现在信息字段中,一般有异步传输和同步传输两种方法:
异步传输:字节填充
对信息字段内出现标志字段的组合时,使用转义字符进行字节填充。
(0x7E) -> (0x7D,0x5E)
(0x7D) -> (0x7D,0x5D)
ASCII码的控制字符,即<(0x03)在字符前增加0x7D,并对该字符的编码加以改变。
同步传输:零比特填充
在发送端,同步传输通过硬件或者软件扫描整个信息字段。对于五个连续的1,在后面填入一个0,避免六个连续的1的出现。在接收端,先找到标志字段 F 以确定一个帧的边界,再用硬件扫描整个信息字段,每当发现 5 个连续 1 时,就把这 5 个连续 1 后的一个 0 删除,以还原成原来的信息比特流。