续(1)
8.4 PPP通信流程及协议
PPP协议由5部分组成:链路控制协议(LCP)、PAP和CHAP认证、多通道绑定(MP)、网络控制协议(NCP)、用户配置。详细内容可参阅RFC1661(PPP协议)、RFC1990(PPP多链协议)、RFC1332(IPCP协议)、RFC1334(PAP协议)、RFC1994(CHAP协议)、RFC1662(在类HHDLC帧中的PPP协议)。
(1)PPP连接示意
图23显示了典型的PPP两个路由器背靠背连接方式。
图23 PPP路由器背靠背连接示意(略)
(2)PPP通信流程
PPP通信流程见图24。
PPP在建立链路之前要进行一系列的协商过程。PPP建链的各阶段如图25所示。
PPP建链的具体过程如下:
①LCP协商,协商内容包括:MRU(最大接收单元)、魔术字(magic number)、认证方式、异步字符映射等选项以及多链捆绑(MP)一些选项的协商,如多链最大可重建接收单元(MRRU)、多链短顺序号报头格式(SSNHF)、端点描述符(Discriminator)等。
发端 对端
| |
| LCP协商 |
|←---------------→|
| 验 证 |
|←---------------→|
| 网络阶段协商(NCP) |
|←---------------→|
| 建立链路 |
|←---------------→|
| 拆链 |
|←---------------→|
| |
| |
图24 PPP通信流程
------ UP ----------- OPENED --------------
|Dead|---→|Establish|-------→|Authenticate|-------
------ ----------- -------------- |
↑ | | |
| FAIL | FAIL | |
|←------------ ------------ |
| | SUCCESS/NONE|
| | |
| DOWN ----------- | CLOSING --------- |
---------|Terminate|←---←-----------|Network|←--
----------- ---------
图25 PPP建链各阶段图
②LCP协商过后就到了Establish阶段,开始PAP或CHAP认证。PAP为两次握手认证,口令为明文。PAP认证过程如下:发送用户名同口令到认证方,认证方查看是否有此用户,口令是否正确,然后发送相应的响应。CHAP为3次握手认证,口令为密文(密钥)CHAP认证由认证方发送一些随机产生的报文,交给被认证,被认证方用自己的口令字用MD5算法进行加密,传回密文,认证方用自己保存的口令字及随机报文用MD5算法加密,比较两者的密文,根据比较结果返回响应的响应。
③认证成功即进行Network阶段协商(NCP),包括IPCP、IPXCP、BCP的协商(如IP地址的协商等)。任何阶段的协商失败都将导致链路的拆除。
IPCP协商内容为:
·IP address(old)
·VJ compression
·IP address
·Pirmary DNS Address
·Secondary DNS Address
·Primary NetBIOs Address
·Secondary NetBIOs Address
IPXCP协商内容为:
·IPX Network Number
·IPX Node Number
·IPX Compression Protocol
·IPX Routing Protocol
·IPX Router Name
·IPX Configuration Complete
④协商成功,则链路建立成功,可以开始传输网络层数据报文。
·PPP 协商是靠状态机来实现的,状态机有如下的10个状态:
·Initial 初始化状态,此时底层协议还没有激活(active)
·Starting 底层协议已经激活,但没有up或遭遇对端拒绝
·Closed 链路关闭
·Stopped 协议终止
·Closing 协议正在关闭(认证没有通过)
·Stopping 协议正在终止
·Reqsent 已发配置请求
·Ackrcvd 已收到对方确认
·Acksent 已发确认
·Opened 协议协商成功
·Disabled 禁用此协议
8.5 RADIUS协议和通信流程
8.5.1 RADIUS协议
Radius通信协议是远程拨号接入的用户接入认证协议。Radius信息包被封装为UDP数据包,Radius的UDP数据包的目标端口地址是1812,Radius计费的UDP数据包的目标端口地址是1813。具体内容参照RFC2138(RADIUS)和RFC2139(RADIUS计费)。
Radius包的类型由包的第一个字节——代码域的值决定。
(1)接入请求(Access-Request)
当代码域的值为1时,该包是接入请求包。
接入请求包由客户端发向Radius服务器,传递的信息用于用户身份的认证。当从一个有效的客户端得到一个接入请求包时,服务器要作出相应的响应。接入请求包中必须包括属性User-Name(用户名)和User-Password(用户密码)。建议含入属性NAS-IP-Address(NAS的IP地址)或者NAS-Identifier(NAS的标识号),以及属性NAS-Port(NAS的端口号)或者NAS-Port-Type(NAS的端口类型)。包中还可以包含其它的一些属性,但服务器并不要求。其中用户密码是经过MD5算法加密过的。接入请求包中代码域的值是1,标识域是一个唯一的数,与此对应的响应包的标识域的值同这个值一样,包的认证域是一个16位的随机数,不同的标识号对应于不同的随机数。