2.3.5 使用LCP建立链路
LCP操作包括链路建立、链路维护和链路终止。
1.LCP操作
LCP使用3种LCP帧来完成每个LCP阶段的工作。
链路建立帧(Configure-Request、Configure-Ack、Configure-Nak和Configure-Reject)用于建立和配置链路。
链路维护帧(Code-Reject、Protocol-Reject、Echo-Request、Echo-Reply和Discard-Request)用于管理和调试链路。
链路终止帧(Terminate-Request和Terminate-Ack)用于终止链路。
图2.28说明了LCP链路建立过程。LCP操作的第一阶段是建立链路,要交换网络层分组,必须先完成该阶段。在链路建立过程中,LCP打开连接并协商配置参数。
图2.28 建立链路 |
链路建立过程的第一步是发起设备向响应方发送Configure-Request帧。Configure-Request帧包含需要给链路设置的各种配置选项。换句话说,发起方向响应方发送一个"愿望清单(wish list)"。
发起方的愿望清单包含描述它希望如何建立链路的选项,其中包括协议和身份验证参数。响应方处理愿望清单,如果该清单可接受,则用Configure-Ack消息进行响应。收到Configure-Ack消息后,链路建立过程便转入身份验证阶段。
如果选项不可接受或无法识别,响应方将发送Configure-Nak或Configure-Reject消息。收到Configure-Ack后,链路操作将交给NCP。如果响应方向请求方发送Configure-Nak或Configure-Reject消息,将不会建立链路。如果协商失败,发起方需要使用新选项重新启动该过程。
在链路维护期间,LCP可使用消息来提供反馈和测试链路。
Code-Reject和Protocol-Reject:如果无法识别的LCP编码(LCP帧类型)或错误的协议标识符导致帧无效,可使用这两种帧来提供反馈。例如,如果从对等体那里收到无法解释的分组,响应方将发送Code-Reject分组。
Echo-Request、Echo-Reply和Discard-Request:这些帧可用于测试链路。
在网络层完成数据传输后,LCP将终止链路。在图2.28中,注意到NCP只终止网络层和NCP链路。链路始终处于打开状态,直到LCP终止它。如果LCP在NCP之前终止链路,NCP会话也将被终止。
PPP可随时终止链路。导致终止的原因包括载波丢失、身份验证失败、链路质量故障、空闲定时器超时或管理性关闭链路。LCP通过交换Terminate分组来关闭链路。发起关闭操作的设备发送Terminate-Request消息,而对方使用Terminate-Ack进行响应。终止请求表明发送该请求的设备想关闭链路。关闭链路时,PPP将通知网络层协议让其能够采取相应的措施。
图2.29是LCP链路协商过程的逻辑示意图。
图2.29 LCP链路协商过程 |
2.LCP分组
每个LCP分组都是一条LCP消息,由编码字段、标识符字段、长度字段和数据字段组成。编码字段指出了LCP分组的类型,标识符字段用于匹配请求和应答,长度字段指出了LCP分组的长度,而数据字段包含LCP分组的具体数据。
图2.30说明了LCP分组中的字段。
LCP分组包含如下信息:
编码:长1字节,指出了LCP分组的类型。
标识符:长1字节,用于匹配请求和应答。
长度:长2字节,指出了LCP分组的总长(包括所有字段)。
数据:长度由"长度"字段指出,可能为0或多个字节。"编码"字段决定了该字段的格式。
图2.30 LCP分组中的字段 |
每个LCP分组在交换配置信息方面都有特定功能,这取决于LCP分组的类型。LCP分组的编码字段指出了分组类型,如表2.4所示。
表2.4 编码字段的取值
编码字段的取值 | LCP分组类型 | 描 述 |
1 | Configure-Request | 在打开或重置PPP连接时发送该消息。Configure-Request包含一系列用于修改默认选项值的LCP选项 |
2 | Configure-Ack | 最近收到的Configure-Request中所有LCP选项值都可识别和接受时发送该消息。PPP对等体发送和收到Configure-Acks时,LCP协商便完成了 |
3 | Configure-Nak | 当所有LCP选项都可识别,但有些选项的值不可接受时发送该消息。Configure-Nak包含其值不可接受的选项及其可接受的值 |
4 | Configure-Reject | 当LCP选项无法识别或不能接受时发送该消息。Configure-Reject包括无法识别或无法接受的选项。 |
5 | Terminate-Request | 在关闭PPP连接时可选地发送该消息 |
6 | Terminate-Ack | 响应Terminate-Request时发送该消息 |
7 | Code-Reject | 在LCP编码未知时发送该消息。Code-Reject消息包含其编码未知的LCP分组 |
8 | Protocol-Reject | 当PPP帧包含未知协议ID时发送该消息。Protocol-Reject消息包含有问题的LCP分组。PPP对等体通常发送Protocol-Reject来指出它没有启用PPP NCP对应的LAN协议 |
9 | Echo-Request | 发送该消息以测试PPP连接(可选) |
10 | Echo-Reply | 用于响应Echo-Request。PPP Echo-Request和Echo-Reply与ICMP回应请求和回应应答消息毫无关系 |
11 | Discard-Request | 用于测试出站方向的链路(可选) |