PPP ( Point to Point Protocol )属于TCP/IP 模型中的网络接口层,是一个数据链路层协议,主要用于在全双工的同异步链路上进行点到点的数据传输。
PPP协议的通信双方是客户和ISP( Internet Service Provider ),他们通过Modem1和电话网络连接。当客户拨通ISP 后,它们之间就建立了一条虚拟的直连链路。
当用户对带宽的要求较高时,单个的PPP链路无法提供足够的带宽,这时将多个PPP链路进行捆绑形成MP链路,旨在增加链路的带宽并增强链路可靠性。
PPP 规定了以下内容:
在PPP 链路上可以传输不同网络协议的数据, NCP 用于对这些网络协议相关的参数进行配置。但NCP 只是一个统称,如果传输的是IP 数据,则NCP 是指IPCP ;如果传输的是DECnet数据,则NCP 对应的是DNCP 。最新的NCP 是2011 年8 月发布的TNCP ,而TRILL用于路由网桥的连接。不同类型的NCP充分说明了PPP 具有良好的通用性。
PPP协议是在串行线IP协议**SLIP(Serial Line IP)2**的基础上发展起来的。由于SLIP协议具有只支持异步传输方式、无协商过程(尤其不能协商如双方IP地址等网络层属性)、只能承载IP一种网络层报文等缺陷,在发展过程中,逐步被PPP协议所替代。
PPP协议有如下优点:
另外,PPP还提供了用于网络安全方面的验证协议口令鉴别协议PAP(Password Authentication Protocol)和挑战握手鉴别协议CHAP(Challenge Handshake Authentication Protocol),用于网络安全方面的验证。
在建立PPP 链路前,发起方必须通过电话网络呼叫回应方。呼叫成功后双方建立了一条物理连接。之后,发起方向回应方发送一系列的链路控制协议LCP 分组(封装成多个PPP 帧),以便建立LCP 连接。
在LCP配置协商阶段链路的回应方可以发送以下几种响应中的一种:
1.配置确认帧(Configure-Ack) 所有选项都接受。
2.配置否认帧(Configure-Nak) 所有选项都理解但不能接受。
3.配置拒绝帧(Configure-Reject) 选项有的无法识别或不能接受,需要协商。
建立LCP 连接后,用PAP或CHAP验证身份。
在这一状态,只允许传送LCP 协议的分组、验证协议的分组以及监测链路质量的分组。若使用口令鉴别协议PAP ,则需要发起通信的一方发送身份标识符和口令。系统可允许用户重试若干次。如果需要有更好的安全性,则可使用更加复杂的口令握手鉴别协议CHAP 。若鉴别身份失败,则转到“链路终止”。若鉴别成功,则进入“网络层协议”状态。
最后用NCP配置IP 层参数(主要是配置IP 地址)。在“网络层协议”状态, PPP 链路的两端的网络控制协议NCP根据网络层的不同协议互相交换网络层特定的网络控制分组。这个步骤是很重要的,因为现在的路由器都能够同时支持多种网络层协议。总之, PPP 协议两端的网络层可以运行不同的网络层协议,但仍然可使用同一个PPP 协议进行通信。
当网络层配置完毕后,链路就进入可进行数据通信的状态。两个PPP 端点除可以发送数据分组外,还可发送回送请求LCP 分组(Echo-Request)和回送回答LCP 分组(Echo-Reply),以检查链路的状态。
通信完成后,NCP 释放网络层连接,收回原来分配出去的IP地址。接着, LCP释放数据链路层连接。最后释放的是物理层的连接。
当PPP 使用异步传输时,它把转义符定义为0x7D。
1.把信息字段中出现的每一个Ox7E 字节转变成为2个字节序列(Ox7D, Ox5E)。
2.若信息字段中出现一个Ox7D 的字节(即出现了和转义宇符一样的比特组合),则
把Ox7D 转变成为2 字节序列(Ox7D, Ox5D)。
3.若信息字段中出现ASCII 码的控制字符(即数值小于Ox20 的字符),则在该字符前
面要加入一个Ox7D 字节,同时将该字符的编码加以改变。
PPP 协议用在SONET/SDH 链路时,使用同步传输(一连串的比特连续传送)而不是异
步传输(逐个字符地传送)。在这种情况下, PPP 协议采用零比特填充方法来实现透明传输。
1.在发送端,先扫描整个信息字段。只要发现有5个连续1,则立即填入一个0。
2.接收端在收到-个帧时,先找到标志字段F以确定一个帧的边界,接着再用硬件对其中的比特流进行扫描。每
当发现5个连续1时,就把这5个连续1后的-个0 删除,以还原成原来的信息比特流。
在链路建立阶段,PPP协议通过LCP报文进行链路的建立和协商。此时LCP报文作为PPP的净载荷被封装在PPP数据帧的Information域中,PPP数据帧的协议域的值固定填充0xC021(代表PPP 帧的信息字段就是IP 数据报)。
在链路建立阶段的整个过程中信息域的内容是变化的*(因为通信双方可以开展多次配置协商。如果对方不识别某些选项,则随后的协商将不包含它们。此外,回应方返回的否认或拒绝报文中可能包含其接受的配置选项值,以便发起方以此为依据修正配置项)*,它包括很多种类型的报文,所以这些报文也要通过相应的字段来区分。
Code域:Code域的长度为一个字节,主要是用来标识LCP数据报文的类型(对应关系如下图)。
在链路建立阶段,接收方接收到LCP数据报文。当其Code域的值无效时,就会向对端发送一个LCP的代码拒绝报文(Code-Reject报文)。
Identifier域
Identifier域为1个字节,用来匹配请求和响应。当Identifier域值为非法时,该报文将被丢弃。通常一个配置请求报文的ID是从0x01开始逐步加1的。当对端接收到该配置请求报文后,无论使用何种报文回应对方,但必须要求回应报文中的ID要与接收报文中的ID一致。
Length域
Length域的值就是该LCP报文的总字节数据。它是Code域、Identifier域、Length域和Data域四个域长度的总和。Length域所指示字节数之外的字节将被当作填充字节而忽略掉,而且该域的内容不能超过MRU的值。
Data域
Data域所包含的是协商报文的内容,这个内容包含以下字段。
– Type为协商选项类型。
– Length为协商选项长度,它是指Data域的总长度,也就是包含Type、Length和Data。
– Data为协商选项的详细信息。
常见的Type中的类型值:
0x01 最大接收单元(Maximum-Receive-Unit)用以向对方通告可以接收的最大报文长度。
0x02 Async-Control-Character-Map
0x03 认证协议(Authentication-Protocol)认证协议用以向对方通告使用的认证协议。PAP 用C023表示, CHAP 用C223 表示。
0x04 质量协议(Quality-Protocol)质量协议用以向对方通告使用的链路质量监控协议。LQR 用C025表示。
0x05 魔术字 (Magic-Number)魔术字用以防止环路。
0x06 RESERVED
0x07 协议域压缩 (Protocol-Field-Compression) )用以通知对方可以接收“协议”字段经过压缩的PPP帧。
0x08 地址及控制域压缩(Address-and-Control-Field-Compression)用以通知对方可以接收“地址”和“控制”字段经过压缩的PPP 帧。
当通信一方欲终止链路时, 应向对方发送Terminate-Request 报文,对方则以Terminate-Ack 响应。这两种报文的首部与Configure-Request 首部相同,其数据区可以为空,也可以是发送方自定义的数值,比
如:发送方可以在其中包含对终止原因的描述。
链路维护报文用于错误通告及链路状态检测。LCP 规定了5 种维护报文。
参考文档 网络协议与分析(第二版)——寇晓蕤,罗军勇,蔡延荣编著
参考文档 计算机网络自顶向下方法(第七版)——James F.Kurose
参考文档 HUAWEI NetEngine40E 全业务路由器 V800R011C00特性描述 - 广域网接入
Modem(调制解调器)是Modutor(调制器)和Demodulator(解调器)的简称。 ↩︎
SLIP协议是指串行线路网际协议(Serial Line Internet Protocol),是最早的、也是仅有的两个串行IP协议之一,属于异型IP协议。 ↩︎