像 SLIP 一样,PPP 是一种用于通过串行连接发送数据报的协议;然而,它解决了一些 SLIP 的缺陷。首先,它可以承载大量的协议,因此不限于 IP 协议。它在链路本身上提供错误检测,而 SLIP 接受并转发损坏的数据报,只要损坏没有发生在头部。同样重要的是,它允许通信双方协商选项,例如启动时的 IP 地址和最大数据报大小,并提供客户端授权。这种内置的协商允许可靠地自动化连接建立,而身份验证消除了 SLIP 所需的笨拙的用户登录帐户的需要。对于这些功能中的每一个,PPP 都有一个单独的协议。在本章中,我们将简要介绍 PPP 的这些基本构建块。对 PPP 的讨论远非完整;如果您想了解更多关于 PPP 的信息,我们建议您阅读其 RFC 规范以及十几个左右的配套 RFC。[1] 还有一本关于 使用和管理 PPP 的综合 O'Reilly 书籍,作者是 Andrew Sun。
在 PPP 的最底层是 高级数据链路控制 (HDLC) 协议,它定义了各个 PPP 帧周围的边界,并提供 16 位校验和。[2] 与更原始的 SLIP 封装相反,PPP 帧能够容纳来自 IP 以外协议的数据包,例如 Novell 的 IPX 或 Appletalk。PPP 通过在基本的 HDLC 帧中添加一个协议字段来实现这一点,该字段标识帧携带的数据包类型。
链路控制协议 (LCP) 在 HDLC 之上使用,用于协商与数据链路相关的选项。例如,最大接收单元 (MRU) 指出链路的一侧同意接收的最大数据报大小。
PPP 链路配置阶段的一个重要步骤是客户端授权。虽然这不是强制性的,但对于拨号线路来说,这确实是防止入侵者的必要措施。通常,被叫主机(服务器)要求客户端通过证明它知道一些密钥来授权自己。如果呼叫者未能提供正确的密钥,则连接将被终止。使用 PPP,授权是双向的;呼叫者也可以要求服务器验证自身。这些身份验证程序彼此完全独立。有两种用于不同类型授权的协议,我们将在本章中进一步讨论:密码认证协议 (PAP) 和 挑战握手认证协议 (CHAP)。
跨数据链路路由的每个网络协议(如 IP 和 AppleTalk)都使用相应的 网络控制协议 (NCP) 进行动态配置。为了通过链路发送 IP 数据报,运行 PPP 的双方必须首先协商它们各自使用的 IP 地址。用于此协商的控制协议是 互联网协议控制协议 (IPCP)。
除了通过链路发送标准 IP 数据报外,PPP 还支持 IP 数据报的 Van Jacobson 头部压缩。这种技术将 TCP 数据包的头部缩小到只有三个字节。它也用于 CSLIP,更通俗地称为 VJ 头部压缩。压缩的使用也可以在启动时通过 IPCP 进行协商。
[1] | 相关的 RFC 列在本手册末尾的参考文献中。 |
[2] | 事实上,HDLC 是国际标准组织 (ISO) 设计的一种更通用的协议,也是 X.25 规范的重要组成部分。 |