计算机应用研究
APPLICATION RESERCH OF COMPUTERS
2000  Vol.17　No.1　P.58-60




PPP协议及其在INTERNET远程接入技术中的应用
曾勇军
摘 要 PPP协议是当前广泛应用在INTERNET中的链路层协议，其研究和开发具有十分重要的意义。分析了PPP的协议结构、运行机制，并对其在远程接入技术中的应用进行了描述。
关键词 PPP LCP NCP 远程接入服务器 RADIUS
　　近年来，Internet在我国得到了迅猛地发展，上网的用户数也在逐年增加。当前，用户访问Internet主要是通过PSTN/ISDN拨号来完成的，在这种远程接入技术中，PPP(Point-to-Point Protocol)协议得到了广泛的应用，成为实现远程用户访问Internet的关键技术。本文对PPP协议进行了研究，并对其在Internet远程接入技术中的应用进行了描述。
1　PPP的协议结构
1.1　物理层要求
　　PPP设计时考虑了与常用的硬件兼容，支持任何DTE/DCE接口(包括EIA RS-232-C，EIA RS-422，EIA RS-423与CCITT V.35)。运行PPP协议只需要提供全双工的电路(专用的或是电路交换的)，以承载双向的数据信息。PPP协议对传输速率没有任何限制，故能适用于多种远程接入的情形。
1.2　协议结构
　　PPP由以下三个组件组成：
　　。一种在串行链路上封装数据报的方法。
　　。一个用于建立、配置和测试数据链路连接的链路控制协议 LCP (Link Control Protocol)。
　　。一个用于建立、配置不同网络层协议的网络控制协议 NCP (Network Control Protocol)。
　　PPP协议结构如图1所示。

图1　PPP协议结构
　　(1)封装格式
　　PPP使用ISO的高级数据链路控制规程HDLC的原理、术语和帧结构，允许在同步及异步环境中运行，并提供了在同一链路上传输不同网络层协议(如IP、IPX、AppleTalk等)数据单元的机制，因此很容易连接各种各样的主机、路由器及远程接入设备。
　　标准的PPP帧格式如图2所示。

图2　PPP帧格式
　　标志序列为01111110组成(0X7e)，是帧的定界符，用以识别单个的PPP帧。
　　地址域为11111111(0Xff)，指示所有的站均可以接收该帧，使用固定值避免了分配数据链路地址的问题。
　　控制域为00000011(0X03)，这个值指示了一个无编号的帧，PPP并没有使用序号和确认保证传输的可靠性。
　　协议域占2个字节，其值指示封装在PPP帧中的信息所使用的协议。其具体值可参考RFC1661。
　　信息域包含有0个或更多的字节，为网络层的协议数据单元，缺省的最大长度为1,500个字节。
　　填充域可以填充任意数目的字节，直到信息域的最大接收单元。信息域与填充域的区别是由相应的协议自己来完成的。
　　FCS域使用16比特的循环冗余校验CRC算法计算校验和。帧校验的计算范围如图2所示，不包括任何起/止比特，为了完成透明传输而插入的字节，也不包括标志序列和FCS本身。
　　PPP使用Control Escape字符来解决控制字符及标志字段出现在信息域的情况。该字符定义为01111101(即为0X7d)，此处比特位置的编号为87654321(而不是常用的76543210)。在计算校验和FCS后，发送方检测标志序列之间的整个帧。若在信息域中出现标志序列，Control Escape字符以及其值小于0X20的字符(该字符在LCP的选项协商中指定需要隐藏)，则用两个字符来代替，前一个字符是Control Escape字符，后一个为源字符的第6个比特变反后而形成的。如0X7E变成两个字符0X7D，0X5E。在计算帧校验序列之前，接收方同样检测标志序列之间的整个帧，若发现Control Escape字符，则将该字符删除，同时将下一个字符的第6比特变反。
　　(2)LCP协议
　　LCP协议用于建立链路层的连接，这种连接建立的过程是通过交换分组来实现的，LCP定义了三类分组：
　　。链路配置分组用于建立和配置PPP链路，确定与该链路相关的参数。这组分组包括configure_req、configure_ack、configure_nak、configure_rej。
　　。链路终止分组用于终止PPP链路。这组分组包括terminate_req、terminate_ack。
　　。链路维护分组用于管理和调试PPP链路。这组分组包括code_rej、protocol_rej、echo_req、echo_rep和discard_req。
　　PPP可以协商链路层的多个选项，如最大接收单元、异步控制字符映射、认证协议、质量协议、魔号、协议域压缩、地址和控制域压缩，用以配置数据链路连接。
　　(3)NCP协议
　　PPP使用一族网络控制协议NCP配置不同的网络层。普遍考虑的NCP为IPCP(Internet Protocol Control Protocol)，用于配置IP层，使用与LCP相同的报文结构(IPCP仅定义了LCP的前七个报文)及协商机制完成选项协商的任务。
　　IPCP定义了三个配置选项，其中一个已过时。当前的协议规范主要讨论了IP压缩协议配置选项及IP地址配置选项，负责协商压缩TCP/IP头部的方法及动态分配IP地址。
2　PPP的运行机制
2.1　PPP协议的阶段流图
　　在建立、配置和测试数据链路的过程中，PPP经过了几个不同的阶段。
　　系统初始化时处于链路DEAD阶段，链路必须开始并且终止于这个阶段。此时物理连接没有建立，不能进行数据通信。

图3　PPP阶段流程图
　　当某个外部事件(如检测到载波或管理员配置)发生，低层向PPP发送UP信号，指示物理层可以使用时，PPP将进入ESTABLISH阶段。在此阶段将协商LCP的选项信息。若LCP选项协商失败，则回到链路DEAD阶段。若链路协商成功，则链路的双方都进入OPENED状态，下一步要进行的是身份认证。
　　认证协议在LCP选项协商阶段确定，在完成链路建立之后使用该协议对用户进行身份认证。若认证成功，则PPP进入网络层协议阶段；否则，PPP将采取措施终止链路。认证阶段是可选的。
　　一旦PPP完成了前面的工作，每个网络层协议必须由合适的网络控制协议NCP来配置。网络控制协议可以在任何时候被打开或关闭。当网络控制协议到达OPENED状态时，PPP将承载相应的网络层协议分组。当网络控制协议不处于OPENED状态时，收到的网络层协议分组都将被抛弃。
　　在正常情况下，在用户通信完毕之后，可由LCP完成链路的终止工作，链路回到DEAD阶段。由LCP完成链路的终止工作就足够了，并不需要使用NCP终止分组。
2.2　PPP的选项协商自动机
　　PPP协议定义了一个有限状态自动机，LCP、NCP的选项协商均按照自动机来完成。图4仅列举了几个主要的状态，自动机的全部状态及具体操作可参考RFC1661。

图4　PPP选项协商自动机
状态事件活动
Closed：链路可得到，但没有产生OPEN事件
Closing：试图终止该链路。已发送了终止请求，但没有收到终止确认
Req_Sent：试图配置链路。已发送了配置请求，但没有收到配置确认
Ack_Rcvd：发送了配置请求，并收到了配置确认，但没有发送配置确认
Ack_Sent：已发送了配置请求和配置确认，但没有收到配置确认RCR：接收到对方发送过来的配置请求
RCR+：接收到正确的配置请求
RCR-：接收到不正确的配置请求
TO+：超时计时器到期，重传计数器大于0
RCA：接收到配置确认
RCN：接收到配置否认
RTA：接收到终止确认
CLOSE：链路管理性关闭
OPEN：链路管理性打开scr：发送配置请求
sca：发送配置确认
scn：发送配置否认
str：发送终止请求
sta：发送终止确认

　　成功的链路建立过程如下。
　　当物理链路被唤醒时，自动机将进入Closed状态。本机的PPP产生OPEN事件，向对等的PPP主机发送配置请求分组，开始了PPP选项协商的工作。自动机将进入Req_Sent状态，等待对等的PPP主机发送响应。此时可能产生两种情况：第一种情况，若配置请求的发送方收到配置确认，说明本机的配置要求已被接受，自动机将进入Ack_Rcvd状态，等待对方的配置请求分组。若收到对方的配置请求分组且配置选项均可接受，则发送配置确认并进入Opened状态；第二种情况，若配置请求的发送方收到选项正确的配置请求，则发送配置确认，自动机将进入Ack_Sent状态，等待对方发送配置确认。若收到配置确认分组，自动机将进入Opened状态。此后，可以根据阶段图采取下一步措施，完成链路建立的工作。
3　PPP在INTERNET远程接入技术中的应用
3.1 远程接入模型
　　远程接入模型如图5所示，用户的PC经过MODEM与PSTN相连，位于PSTN另一端的是远程接入服务器。远程接入服务器是拨号Internet接入网络体系结构中的关键组件，负责连接异种网络，所以要完成信息之间的转换、完成不同网络之间速率的适配以及中继IP业务量的功能。

图5　远程接入模型
　　RADIUS(Remote Authentication Dial In User Service)服务器完成对拨号用户的身份验证、授权及计费的功能。远程接入服务器与RADIUS服务器之间采用的是客户/服务器的工作模式，远程接入服务器负责传递用户的信息给指定的RADIUS服务器，并接收RADIUS服务器的响应，成为RADIUS客户机。而RADIUS服务器存放所有入帐的用户数据库，并负责分配IP地址，这就保证了用户信息改变时，只有RADIUS服务器的数据库需要改变，便于用户的集中管理。DNS服务器主要完成域名地址与IP地址之间的变换，而WWW服务器则主要提供信息查询服务。
　　用户端及其对等的远程接入服务器端均加载PPP协议，用PPP协议建立数据链路层的连接。用户的PC从RADIUS服务器的地址池中动态地获得一IP地址，成为Internet上的一台临时主机，通过接入服务器可以和任何其它Internet主机通信。
3.2 PPP通信过程
　　用户拨入远程接入服务器的号码，通过交换电路网络(如PSTN)建立了一条物理链路之后，PPP将根据其状态的驱动，开始了数据链路连接建立的过程。
　　PPP首先使用LCP协商数据链路层选项。链路双方的PPP协议均使用LCP交换配置请求分组，该分组中包含有每一端都期望的配置信息及链路相关信息，如最大接收单元MRU、异步控制字符映射等选项。在此阶段，双方可以协商使用某一种认证协议如PAP(Password Authentication Protocol)或CHAP (Challenge Handshake Authentication Protocol)。LCP认为所有的请求均能满足，则发送配置确认分组。当用户PC与接入服务器的LCP均发送和接收到配置确认分组后，则认为链路已经成功地建立，于是要求用户输入用户名及口令，进入认证阶段。用户根据提示信息输入用户名和口令，将这些信息传递给接入服务器。接入服务器收到该请求后，再将该信息传送给RADIUS进程。RADIUS进程组成接入请求分组，该分组中包含有用户名、口令、用户接入的端口号等信息，然后将该分组传给RADIUS服务器。RADIUS服务器收到该分组就对用户的身份进行验证，若用户身份合法，则传回确认信息，其中附带有分配给用户的IP地址。接入服务器将确认的信息传给用户，通知用户身份合法。用户收到该分组后就开始协商网络层选项。此时用户与接入服务器的NCP协议(此处主要考虑IPCP协议)交换网络层配置请求分组，在PPP层上建立、配置网络层，该分组中带有IP地址请求信息。接入服务器的PPP处理模块接收到该信息，将从认证服务器处获得的IP地址传给用户，完成网络层的协商动作。
　　在PPP建立数据链路层的连接并配置好网络层之后，用户与接入服务器之间就可以开始数据传递的工作。在整个数据传递期间，接入服务器负责信息的转发，功能上与路由器相似。
　　用户通信完毕后要进行连接释放的工作以终止链路。链路终止可以在任何时候发生，这种终止可能来源于用户、物理事件(载波丢失、确认失败、超时)等。终止过程通过交换LCP链路终止分组来关闭数据链路层的连接，然后要求MODEM断开物理层连接。至此，整个通信过程结束。
　　PPP的通信过程如图6所示。

图6　通信过程的流程图
4　小结
　　Internet是按照TCP/IP协议族来组网的，而整个TCP/IP协议栈中并没有数据链路层的概念，只提供了一个物理网络接口与各种网络连接。在点到点的实现方式中，PPP所起的作用与OSI的数据链路层一致，完成链路的操作、维护和管理功能。PPP灵活的选项配置、多协议的封装机制、良好的选项协商机制以及丰富的认证协议，使得它在远程接入技术中得到了广泛的应用。目前，PPP正处于不断补充和完善的过程中，其发展前景仍十分光明。
曾勇军（国家数字交换系统工程技术研究中心 郑州 450002）
参考文献
1，周明天, 汪文勇编著. TCP/IP网络原理与技术. 北京：清华大学出版社, 1993
2，Simpson.W. The Point-to-Point Protocol(PPP). RFC1661, 1994
3，McGregor. G. The PPP Internet Protocol Control Protocol (IPCP). RFC1332, 1992
4，Lloyd.B, Simpson.W. PPP Authentication Protocol. RFC1334, 1992
5ｖRigney.C, Rubens.A, Simpson.W, Willens.S. Remote Authentication Dial In User Service (RADIUS). RFC2138, 1997
收稿日期：1999年6月28日
