📄 ppp协议规范.htm
字号:
timer仍旧运行。
<LI>Ack-Sent(Ack-发送):在Ack-发送状态,Configure-Request和Configure-Ack都被发送了。但没有接收到Configure-Ack。因为还没有接收到Configure-Ack,所以Restart
timer仍旧运行。
<LI>Opened(开启):在开启状态,发送了一个Configure-Ack,也接收了一个Configure-Ack。Restarttimer不运行。当进入该状态时,执行应该通知上层,现在Up。相反,当离开该装态时,执行应该通知上层,现在Down。
</LI></UL>
<P>4-3 事件</P>
<P>自动机里的状态转换和动作是由事件引起的。
<UL>
<LI>Up:当低层指出已准备好携带packets时,发生此事件。典型的,该事件被调制解调器处理或呼叫过程,或被一些其他的连接于物理媒体的PPP用于通知LCP,链路正进入链路建立阶段。它也能被LCP用于通知每个NCP,链路进入网络层协议阶段。即,来自LCP的动作This-Layer-Up触发了NCP中的Up事件。
<LI>Down:当低层指出不再准备携带packets时,发生此事件。典型的,该事件被调制解调器处理或呼叫过程,或被一些其他的连接于物理媒体的
<BR>PPP用于通知LCP,链路正进入链路死亡阶段。它也能被LCP用于通知每个NCP,链路离开网络层协议阶段。即,来自LCP的动作This-Layer-Down触发了NCP中的Down事件。
<LI>Open:该事件指出链路的通信量是可以管理的:即,网络管理者(人或程序)指出链路允许被Opened。当这一事件发生,且链路不处于Opened状态时,自动机则试图给peer发送配置packets。如果自动机不能开始配置(下层是Down,或者前一个Close事件还没有结束),那么
<BR>链路的建立将被自动的推迟。当收到一个Terminate-Request,或者其他导致链路不可用的事件发生时,自动机将进入一个状态,在那里链路准备re-open。无需额外的管理干涉。
</LI></UL>
<P>执行选项:</P>
<P>经验表明:当用户想就链路进行重新谈判时,他们将额外的执行一条Open命令。这表明新的值将被协商。既然这不是Open事件的含义,那就暗示着在Opened,
Closing,
Stopping或Stopped状态,当执行一条Open用户命令时,执行发行一个Down事件,紧接着一个Up事件。一定要注意不能有从另一个源发生的Down事件的干涉。紧接着Up事件的Down事件将引起一次有秩序的链路的再协商(通过先前进到Starting状态,再进入到Request-Sent状态)。该再协商没有负面影响。</P>
<P>Close:该事件意味着链路没有通信量。即,网络管理者(人或程序)指示链路不允许被开放。当该事件发生且链路不处于Closed状态时,自动机试图终止连接。拒绝重新配置链路的尝试,直到一个新的Open事件发生。</P>
<P>执行记录:</P>
<P>当认证失败,链路应该被终止,以防止受到重复性的攻击和为其他用户服务。这可以通过模仿一个Close事件给LCP,然后紧跟着一个Open事件来完成,既然链路在管理上是可被访问的。一定要注意不能有从另一个源发生的Down事件的干涉。紧接着Up事件的Down事件将引起一次有秩序的链路的再协商(通过先前进到Closing状态,再进入到Stopping状态),This-Layer-Finished动作能断开链路的连接。在Stopped或Starting状态,自动机等待下一次连接尝试。</P>
<P>Timeout (TO+,TO-):该事件表明Restart timer期满。Restart
timer用于记录对Configure-Request和Terminate-Request packets的响应的时间。TO+事件表明Restart
counter持续大于零,它触发了相应的Configure-Request或Terminate-Request
packet的发送。TO-事件表明Restart counter持续不大于零,不再需要发送packets。</P>
<P>Receive-Configure-Request (RCR+,RCR-):当收到一个来自peer的Configure-Request
packet时,该事件发生。Configure-Request
packet表明希望开创一个连接并且可以指定配置选项。RCR+事件表明Configure-Request是可接受的,并且触发相应的Configure-Ack的传输。RCR-事件表明Configure-Request是不可接受的,并且触发相应的Configure-Nak或Configure-Reject的传输。</P>
<P>执行记录:</P>
<P>这些事件可以发生在已经处于Opened状态的连接上。该执行必须准备立即再协商配置选项。</P>
<P>Receive-Configure-Ack (RCA):当收到一个来自peer的有效Configure-Ack
packet时,该事件发生。Configure-Ack packet是对Configure-Request
packet的肯定应答。序列之外的或者无效的packet被静静的丢弃。</P>
<P>执行记录:</P>
<P>既然在到达Ack-Rcvd或Opened状态之前,正确的packet已经被收到了,那就绝不可能有另一个这样的packet的到来。像说明的一样,所有无效的Ack/Nak/Rej
packets将被静静的丢弃,并不影响自动机的(状态)转换。然而,格式正确的packet不可能通过coincidentally-timed
cross-connection(同步交换连接)到达(目的地)的。它更可能是执行出错的结果。至少,这种情况应该被记录下来。</P>
<P>Receive-Configure-Nak/Rej
(RCN):当收到一个来自peer的有效Configure-Nak或Configure-Reject
packet时,该事件发生。Configure-Nak或Configure-Reject packet是对Configure-Request
packet的否定应答。序列之外的或者无效的packet被静静的丢弃。</P>
<P>执行记录:</P>
<P>尽管Configure-Nak和Configure-Reject在自动机中引起相同的状态转换,但这些packets对发送于Configure-Request
packet中的配置选项有着截然不同的影响。</P>
<P>Receive-Terminate-Request (RTR):当收到一个Terminate-Request
packet时,该事件发生。Terminate-Request packet表明希望peer去关闭连接。</P>
<P>执行记录:该事件于Close事件不同,它需要考虑局域网管理者的Open命令。执行必须准备接收新的没有网络管理者干涉的Configure-Request。</P>
<P>Receive-Terminate-Ack (RTA):</P>
<P>当收到一个来自peer的Terminate-Ack packet时,该事件发生。Terminate-Ack
packet通常是对Terminate-Request packet的响应。Terminate-Ack
packet也可以表明peer正处于Closed或Stopped状态,适应于链路配置的再同步。</P>
<P>Receive-Unknown-Code (RUC):</P>
<P>当收到一个来自peer的un-interpretable(不能说明的)packet时,该事件发生。发送一个Code-Reject
packet作为响应。</P>
<P>Receive-Code-Reject, Receive-Protocol-Reject
(RXJ+,RXJ-):当收到一个来自peer的Code-Reject或Protocol-Reject
packet时,该事件发生。当拒绝值可接受时(例如一个扩充编码的Code-Reject,或一个NCP的Protocol-Reject,这些在一般操作的范围内),RXJ+事件出现。执行必须停止发送损坏了的packet类型。当拒绝值是灾难性的时候(例如一个Configure-Request的Code-Reject,或一个LCP的Protocol-Reject),RXJ-
事件出现。该事件传达了一个不可校正的错误(导致连接终止)。</P>
<P>Receive-Echo-Request, Receive-Echo-Reply,
Receive-Discard-Request(RXR):当收到一个来自peer的Echo-Request,Echo-Reply或Discard-Request
packet时,该事件发生。Echo-Reply packet是对Echo-Request
packet的响应。Echo-Reply或Discard-Request packet没有响应。</P>
<P>4-4 动作</P>
<P>自动机中的动作有事件引起。典型的,动作表明了packets的传输,和/或Restarttimer的启动和停止。
<UL>
<LI>Illegal-Event (-):不合法的事件 </LI></UL>
<P>该动作指出一个在正常执行的自动机中不可能出现的事件。执行有一个内在的错误,应该把它报告并记录下来。没有转换被执行,执行不应该reset or
freeze(重新安排或冻结)。
<UL>
<LI>This-Layer-Up(tlu) </LI></UL>
<P>动作给自动进入打开阶段的上边的层做指示。典型的,该动作被LCP用于对一个NCP发送向上的事件信号,或者链路质量协议,或者可以被一个NCP用于显示该链路可用于它的网络层往来。
<UL>
<LI>This-Layer-Down(tld) </LI></UL>
<P>该动作给自动留下打开的阶段的上边的层做指示。典型地,该动作被LCP用于向一个NCP发送向下的事件,证实协议,或者可以被一个NCP用于显示该链路对它的网络层传输不再可用。
<UL>
<LI>This-Layer-Started了(tls) </LI></UL>
<P>该动作对自动进入开始状态的更低的层做指示,并且需要更低的层用于该链路。当更低的层可用的时候,更低的层应该用一个向上的事件响应。该动作的结果是高度的依赖动作的执行的。
<UL>
<LI>This-Layer-Finished(tlf) </LI></UL>
<P>该动作给自动进入最初,关闭了或者停止的阶段的更低的层做指示,并且,在链路上不再需要更低的层。当更低的层终止的时候,更低的层应该用一个向下的事件应答。典型地,该动作可以被LCP用于前进到链路死掉的状态,或者可以被一个NCP用于给当没有其他的NCPs打开时链路可以被终止的LCP做指示。该动作的结果是高度的依赖动作的执行的。
<UL>
<LI>Initialize-Restart-Count(irc) </LI></UL>
<P>该动作对Restart计数器设置适当的值(Max-Terminate 或
Max-Configure)。每次传输,包括第一次传输,计数器自减。执行记录:附加的设置Restart计数器,当使用了重定时返回时,该执行必须设置超时周期到初始值。
<UL>
<LI>Zero-Restart-Count(zrc) </LI></UL>
<P>该动作对Restart计数器清零。执行记录:该动作允许FSA在进行到要求的最终状态之前暂停,允许用peer进行传输。附加的清零Restart计数器,该执行必须设置超时周期到初始值。
<UL>
<LI>Send-Configure-Request(scr) </LI></UL>
<P>一个Configure-Request的包被传送。这表明要用指定的一套特殊的配置选项打开一个连接。为了防止包丢失,Restart计时器在Configure-Request包被传送的时候打开。每次一个Configure-Request被发送的时候,Restart计数器自减。
<UL>
<LI>Send-Configure-Ack(sca) </LI></UL>
<P>一个Configure-Ack包被传送。这确认接收了一个带有一套可接受的配置选项的Configure-Request包。
<UL>
<LI>Send-Configure-Nak(scn) </LI></UL>
<P>一个Configure-Nak或Configure-Reject包被稳妥的传送。否定的响应表明一个Configure-Request包带有一套不可接受的配置选项。Configure-Nak包被用于拒绝一个配置选项值,并提议一个新的,可接受的值。Configure-Reject包被用于拒绝全部的关于一个配置选项的协商,典型的因为不被认可或不被满足。在关于LCP包格式的章节对Configure-Nak的使用比Configure-Reject有更充分的描述。
<UL>
<LI>Send-Terminate-Request(str) </LI></UL>
<P>一个Terminate-Request包被传送。这表示想要关上连接的愿望。当Terminate-Request包被传送时Restart计时器被开启,来防止包丢失。每次一个Terminate-Request被发送的时候,Restart计数器自减。
<UL>
<LI>Send-Terminate-Ack (sta) </LI></UL>
<P>一个Terminate-Ack包被传送。这确认Terminate-Request的包的接收,或者以别的方式对于自动同步起作用。
<UL>
<LI>Send-Code-Reject(scj) </LI></UL>
<P>一个Code-Reject包被传送。这表示未知的种类的包的接收。
<UL>
<LI>Send-Echo-Reply (ser) </LI></UL>
<P>一个Echo-Reply包被传送。这确认一个Echo-Request包的接收。</P>
<P>4-5 环躲避(循环避免)</P>
<P>协议做避开协商成环状的配置选项的适当尝试。不过,协议不保证环将不发生。和任何协商一样,有可能来设置2个PPP由不收敛的矛盾的方法来执行。同样,也有可能配置收敛的,重要的时间这样去做的方法。设备应该考虑这些,并且应该满足环侦测机制或更高水平的超时。</P>
<P>4-6 计数器和定时器</P>
<P>重启动定时器</P>
<P>有一个特殊的定时器被自动使用。重启动定时器被用于计算Configure-Request和Terminate-Request包的传输时间。重启动定时器的满期产生一个超时事件,并且通信Configure-Request或Terminate-Request包重新传送。重启动定时器必须是可配置的,但是应该缺省为三(3)秒。</P>
<P>执行记录:重新开始计时器应该根据链路的速度。缺省值被指定为低的速度(2,400~9,600
bps),高交换的等待时间链路(典型电话线)。更高的速度链路或和低交换等待时间的链路应该相对应有更快的再次传输时间。代替恒定值,重新开始计时器可以从最初的小的值开始增加到配置的最终值。每一个小于最终值的连续值应该至少是前一个值的两倍。初始值应该对包的大小来说足够大,用于以线路速率传输两倍的round
trip时间,并且至少附加100毫秒来允许peer来处理响应之前的包。一些电路又加了200毫秒的附加迟延。以14,400
bps运作的调制解调器的round trip时间范围中精确到160到600毫秒以上。</P>
<P>Max-Terminate</P>
<P>必须有一个Terminate-Requests的restart计数器。Max-Terminate显示Terminate-Request包发送,但是认为peer不会应答的,没有收到Terminate-Ack的包的个数。Max-Terminate必须是可配置的,但是应该缺省为二(2)秒传输。</P>
<P>Max-Configure</P>
<P>推荐为Configure-Requests采用一个类似的计数器。Max-Configure显示Configure-Request包发送,在peer不会应答前的,没有接收到一个有效的Configure-Ack,Configure-Nak
或 Configure-Reject的包的个数。Max-Configure必须是可配置的,但是应该缺省为十(10)次传输。</P>
<P>Max-Failure</P>
<P>推荐为Configure-Nak采用一个相关的计数器。Max-Failure显示Configure-Nak包发送,在假定配置不收敛之前发Configure-Ack的Configure-Nak包的个数。任何更进一步的用于peer请求的选项被转换到Configure-Reject包,并且不在附加局部要求选项。Max-Failure必须是可配置的,但是应该缺省为五(5)次传输。</P>
<P>5 LCP包格式</P>
<P>LCP包有3类:
<OL>
<LI>链路配置包,用于建立和配置链路(Configure-Request,Configure-Ack,Configure-Nak,和Configure-Reject)。
<LI>链路结束包被用于结束一个链路(Terminate-Request 和 Terminate-Ack)
<LI>链路维修包被用于管理和调试一个链路(Code-Reject, Protocol-Reject, Echo-Request,
Echo-Reply, 和 Discard-Request)。 </LI></OL>
<P>为了简单,LCP包里没有版本域。一个正确的运作的LCP的执行将总是对带有简单地可以识别的LCP包的未知协议和代码进行响应。这样倘若一个确定性的可靠的机制用于其他版本的执行。不管哪个配置选项被允许,所有的LCP链路配置,链路终止和代码-拒绝包(代码1到7)总被发送,就像没有配置选项被协商一样。特别是,每个配置选项都指定缺省值。这就保证了这样的LCP包总是可以识别的,甚至当1个链路的结束错误的相信该链路是开着的。</P>
<P>确切的说1个LCP包被封装在PPP信息域中,该PPP协议域表示类型为十六进制c021(链路控制协议)。链环控制协议包格式的摘要如下。域被从左往右传送。</P>
<P align=center><IMG height=117 alt="PPP-3.bmp (6146 bytes)"
src="PPP协议规范.files/ppp-3.gif" width=387></P>
<UL>
<LI>代码 </LI></UL>
<P>代码域是一个八位字节,确定LCP包的种类。当收到一个带有未知域的包时,一个Code-Reject包被传送。LCP代码域的Up-to-date值在最近的"指定号码"RFC[2]中被指定。该文档涉及以下的值:</P>
<P> 1 Configure-Request <BR> 2 Configure-Ack <BR> 3 Configure-Nak
<BR> 4 Configure-Reject <BR> 5 Terminate-Request <BR> 6 Terminate-Ack
<BR> 7 Code-Reject <BR> 8 Protocol-Reject <BR> 9 Echo-Request <BR> 10
Echo-Reply <BR> 11 Discard-Request
<UL>
<LI>标识符 </LI></UL>
<P>标识符域是一个八位字节,对匹配请求和回复中有帮助。当带有无效标识符域的包被接收时候,该包将不影响自动机制,被静静的丢弃。
<UL>
<LI>长度 </LI></UL>
<P>长度域是二个八位字节,指出LCP包的长度,包括代码,标识符,长度和数据域。该长度必须不超过链路的MRU。长度域以外的字节被当作填料而忽略处理。当收到带有无效标识符该包将不影响自动机制,被静静的丢弃。
<UL>
<LI>数据 </LI></UL>
<P>数据域是零或多个八位字节,由长度域声明。数据域的格式由代码域决定。</P>
<P>5-1. Configure-Request</P>
<P>描述</P>
<P>一个执行想要打开一个连接必须传送一个Configure-Request。选项域被填充任何想要的对链路默认的改变。配置选项应该不被包括到默认值中。Configure-Request的接收上,必须传送适当的答复。下面给出Configure-Request包的格式的摘要。域从左到右传输。</P>
<P align=center><IMG height=115 alt="PPP-4.bmp (6042 bytes)"
src="PPP协议规范.files/ppp-4.gif" width=389></P>
<P>代码</P>
<P>1 为Configure-Request</P>
<P>标识符</P>
<P>只要选项域改变的内容改变,并且只要收到先前请求的有效响应,标识符域必须被变。对重发来说,标识符可以保持不变。</P>
<P>选项</P>
<P>选项域是长度的变量,并包含零个或多个发送方需要协商的配置选项的列表。全部配置选项总是被同时协商。在下一章中对配置选项的格式有更详细的描写。</P>
<P>5-2. Configure-Ack</P>
<P>描述</P>
<P>如果Configure-Request中收到的每一个配置选项和全部的值都是能接受的,那么该执行必须传送一个Configure-Ack。该确认配置选项必须不被任何途径的重命令或更改。Configure-Ack的接收中,标识符域必须匹配最后传送的Configure-Request。另外,Configure-Ack中
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -