📄 rfc1134.txt
字号:
Restart定时器也已启动,但是还没有收到Terminate-Ack。
当接收到Terminate-Ack,立刻进入到Closed状态。当Restart定时器超时,
将重新发送Terminate-Request,并且Restart定时器也重新启动。当Restart
定时器超时的次数达到Max-Restart后,这个动作(Action)被跳过,并且进
入到Closed状态。Max-Restart必须是一个可被配置的参数。
因为是在Closing状态外发送的Terminate-Request,所以在处理PO事件
时应特别注意。否则,LCP对端可能会以为连接仍是打开的。处理PO事
件应被延期直到有理由确信LCP对端不是打开的。特别是处理应等到状
态机制正常迁移到Closed状态,即发生了RTA事件或Max-Restart次超
时事件。
4.2防止循环
应注意到协议中为了避免出现配置选项的协商发生循环而进行了合理的努力。然
而,协议并不保证不会发生循环。和别的协商相似,当用冲突的两个方针去配置两
个PPP实体,永远达不成一致的情况是可能的。或者是配置方针可以达成一致,
但需要重要的时间。实现者应记住这一点并应该实现一个循环检测机制或是实现一
个更高级别的超时。如果用超时实现,它必须可以配置。
例如,实现中应注意Configure-Request或Terminate-Request的活锁(livelock),这
可通过一个Max-Retries计数器完成。一个Configure-Request活锁在一个主动PPP
实体发送和重发了C-R包后却没有收到回应(e.g.接收PPP实体死掉)时发生。一个
Terminate-Request活锁的情况可能是当主动PPP实体发送和重发了T-R包后却没
有收到Terminate-Ack(e.g.T-A包可能丢失而对端PPP实体可能已经停止了)。
Max-Retries指出了在合理确信有活锁情况前允许的最大包重发次数,它也必须是
可以配置的,缺省为10次。
4.3包格式
在PPP数据链路帧的信息域中封装了一个LCP包,同时在协议域指定了类型
0x21(LCP)。
下面是LCP包格式的一个总结,域是从左向右发送的。
0 1 2 3 4
Code
Identifier
Length
Data…
? Code:包含1个8位组,它标识LCP包的种类,LCP的Code域赋值如下:
? Identifier:包含1个8位组,它帮助匹配Requests和Replies。
? Length:包含2个8位组,它指出包含Code、Identifier、Length、Data域的LCP
包的长度。在Length域值范围外的8位组应被视为数据链路层附加的数据而
加以处理,并应在接收时忽视。
? Data:是由Length域决定的0或多个8位组,格式由Code域决定。
不管使用那种配置选项,所有的LCP包在发送时都是以完整、标准的形式发送,
就象没有配置选项使用一样。这就保证了在任何情况下Configure-Request都能被
识别,即使是LCP链路的一端错误地认为链路是打开的。
这个文档描述了LCP的版本1。为了简单,在LCP包中没有Version域。如果将来
有应用新版本的需要,那么数据链路层的协议域将使用扩展值以区分版本1和其
他的版本。一个正确功能版本1的LCP实现总是对未知协议(包括其它版本)回
应一个容易识别的版本1的包,这提供了一个可决定退却的机制以实现别的版本。
4.3.1 Configure-Request
? Description
一个试图打开连接的LCP实现必须发送一个LCP包,它的Code域置为
1(Configure-Request),Option域中则是对缺省链路配置选项的期望的修
改。
一个Configure-Request包格式的总结如下所示,域是从左向右发送的。
Code
Identifier
Length
Options
? Code
1
? Identifier
Identifier域在每次发送时都会改变。接收时,这个域的值应被拷贝到适当
的应答包里的Identifier域中。
? Options
Options域的长度不固定,它包含了0个或多个发送者希望协商的配置选
项。所有的配置选项协商都是同时发生的。关于配置选项的格式在下一
节作进一步的描述。
4.3.2 Configure-Ack
? Description
如果在Configure-Request收到的所有的配置选项是可识别且可接受的,
那么LCP实现应该发送一个LCP包,它的Code域置为
2(Configure-Ack),Identifier域和Options域从收到的Configure-Request包
中拷贝得来。应答的配置选项不允许重新排序或别的任何改动。
接收到Configure-Ack,Identifier域必须和最后发送的Configure-Request的
Identifier域匹配,否则认为无效。另外,Configure-Ack的配置选项必须
和最后发送的Configure-Request的配置选项匹配,否则认为无效。无效
的包应被静默丢弃。
接收到有效的Configure-Ack指明了在最后发送的Configure-Request中的
配置选项都被接受了。
一个Configure-Ack包格式的总结如下所示,域是从左向右发送的。
Code
Identifier
Length
Options
? Code
2
? Identifier
Identifier域是引起Configure-Ack的Configure-Request包的Identifier域的
拷贝。
? Options
Options域的长度不固定,它包含了0个或多个发送者肯定应答的配置选项。
所有的配置选项的肯定应答都是同时发生的。
4.3.3 Configure-Nak
? Description
如果收到的配置选项中的每个元素都是可识别的但是一些不可接受,那
么LCP实现应该发送一个LCP包,它的Code域置为3(Confgiure-Nack),
Identifier域从收到的Configure-Request包中拷贝得来,Options域中只填充
那些从Configure-Request来的不可接受的配置选项。所有可接受的配置
选项应被从Configure-Nak过滤出去,但是另外从Configure-Request来的
配置选项不应被重新排序。每个Configure-Nak中的配置选项必须修改成
可被Configure-Nak发送者接受的值。最终,一个实现可能配置成要求就
一个特定的选项进行协商。如果此选项没有被列出,那么它将被加在配
置选项列表的后面以要求远端在下一个Configure-Request包中列出这一
选项。添加的选项必须包括对Configure-Nak的发送者来说可接受的值。
当接收到一个Configure-Nak,它的Identifier域必须和最后一次发送的
Configure-Request的Identifier域匹配,否则认为是无效的包而被静默丢
弃。
收到一个有效的Configure-Nak说明了一个新的Configure-Request应被发
送,它的配置选项按照Configure-Nak进行了修改。
一个Configure-Nak包格式的总结如下所示,域是从左向右发送的。
Code
Identifier
Length
Options
? Code
3
? Identifier
Identifier域是引起Configure-Nak的Configure-Request包的Identifier域的
拷贝。
? Options
Options域的长度不固定,它包含了0个或多个发送者否定应答的配置选项。
所有的配置选项的否定应答都是同时发生的。
4.3.4Configure-Reject
? Description
如果收到的配置选项中的有一些是不可识别或是不可协商的(由网络管
理员配置),那么LCP实现应该发送一个LCP包,它的Code域置为4
(Confgiure-Reject), Identifier域从收到的Configure-Request包中拷贝得
来,Options域中只填充那些从Configure-Request来的不可识别的配置选
项。所有可识别或协商的配置选项应被从Configure-Nak过滤出去,但是
除此之外Configure-Request配置选项必须不被重新排序。
当接收到一个Configure-Reject,它的Identifier域必须和最后一次发送的
Configure-Request的Identifier域匹配,否则认为无效。另外,
Configure-Reject中的配置选项必须是最后一次发送的Configure-Request
中配置选项的一个子集,否则认为无效。无效的包应被静默丢弃。
收到一个有效的Configure- Reject说明了一个新的Configure-Request应被
发送,它的配置选项中不包含Configure-Reject里的配置选项。
一个Configure-Reject包格式的总结如下所示,域是从左向右发送的。
Code
Identifier
Length
Options
? Code
4
? Identifier
Identifier域是引起Configure-Reject的Configure-Request包的Identifier域
的拷贝。
? Options
Options域的长度不固定,它包含了0个或多个发送者拒绝的配置选项。所有
的配置选项的拒绝都是同时发生的。
4.3.5Termination-Request and Terminate-Ack
? Description
LCP包括Termination-Request 和 Terminate-Ack是为了提供一种关闭连
接的机制。
一个试图关闭连接的LCP实现应该发送一个LCP包,它的Code域置为
5(Termination-Request),Data域为任意值。Termination-Request应该持
续发送知道收到Terminate-Ack,或者物理层报告断掉,或是发送了足够多
的次数以致有理由相信远端断掉。
当接收到Termination-Request,必须发送一个LCP包,它的Code域置为6
(Terminate-Ack),Identifier域从Termination-Request拷贝得来,Data域
则为任意值。
收到一个(unelicited)Terminate-Ack指出连接已经关闭。
一个Termination-Request 和 Terminate-Ack包格式的总结如下所示,域是从左
向右发送的。
Code
Identifier
Length
Data
? Code
5 Terminate-Request
6 Terminate-Ack
? Identifier
Identifier域是引起Configure-Reject的Configure-Request包的Identifier域
的拷贝。
? Data
Data域的长度为0个或多个8比特组,被发送者用于储存一些不可解释的数
据。它可以是任意的二进制值,长度从0到已建立的对端的MRU。
4.3.6Code-Reject
? Description
收到一个未知Code的LCP包意味着通信的LCP实现之一是错误或不完
全的。这个错误必须通过发送一个LCP包来通知给未知Code包的发送者,
它的Code域置为7(Code-Reject),并把未知Code包拷贝到Rejected-Packet
域中。
当收到Code-Reject包,LCP实现应该立即迁移到关闭状态,并报告错误,
因为这种情况似乎不会自动纠正。
一个Code-Reject包格式的总结如下所示,域是从左向右发送的。
Code
Identifier
Length
Rejected-Packet
? Code
7 Code-Reject
? Identifier
Identifier域是1个8比特组,被发送者使用。
? Rejected-Packet
Rejected-Packet域包括了拒绝的LCP包的一个拷贝。它从拒绝的LCP包
的Code域开始,但不包括任何的PPP数据链路层的包头。Rejected-Packet
域应截断以顺从已建立的对端的MRU。
4.3.7 Protocol-Reject
? Description
收到一个未知数据链路层协议帧意味远端试图使用本端不支持的协议。
这通常发生在远端试图配置一个新的、但不被本端支持的协议。如果LCP
状态机制处于Open状态,那么这个错误应被报告给这个未知协议包的发
送者,这由一个LCP包来实现,它的Code域置为8(Protocol-Reject),
它的Rejected-Protocol域置为收到的Protocol域,Data域则为任意期望的
值。
一个Code-Reject包格式的总结如下所示,域是从左向右发送的。
Code
Identifier
Length
Rejected-Protocol
Rejected-Information…
? Code
8
? Identifier
Identifier域是1个8比特组,被发送者使用。
? Rejected-Protocol
Rejected-Protocol是2个8比特组,它包含被拒绝的数据链路层帧的
Protocol域。
? Rejected-Information
Rejected-Information是从拒绝的帧中拷贝而来。它从Information域开始,
不包括任何的PPP数据链路层的头或FCS。Rejected-Information域应截
断以顺从已建立的对端的MRU。
4.3.8 Echo-Request and Echo-Reply
? Description
LCP包括Echo-Request和Echo-Reply是为了提供数据链路层的环回机制,
用于链路的双向练习。这对于调试、链路质量判定、性能测试和一些别
的功能来说是很有用的。
Echo-Request包的发送者发送一个LCP包,它的Code域置为9
(Echo-Request),Data域为任意期望值,可到达但不能超过接收方建立
的MRU。
当接收到了Echo-Request,一个Code域置为10(Echo-Reply)的LCP包
必须发送出去,它的Identifier域从Echo-Request的Identifier域拷贝而来,
Data域从Echo-Request的Data域拷贝而来,如果需要的话将被阶段以避免
超过对端建立的MRU。
Echo-Request和Echo-Reply只能在LCP的Open状态下发送,如果在此
之外的状态收到Echo-Request和Echo-Reply将被丢弃,并且不采取任何
动作。
一个Echo-Request和Echo-Reply包格式的总结如下所示,域是从左向右发送
的。
Code
Identifier
Length
Magic Number
Data……
? Code
9 Echo-Request
10 Echo-Reply
? Identifier
Identifier域是1个8比特组,用于在Echo-Request和Echo-Reply之间匹
配。
? Magic Number
Magic-Number域为4个8比特组,用来帮助链路回环测试。除非对配置
选项进行了修改,Magic-Number域必须当成0来发送并被在接收时忽略。
Magic-Number进一步的使用超出讨论的范围。
? Data
Data域的长度为0个或多个8比特组,被发送者用于储存一些不可解释
的数据。它可以是任意的二进制值,长度从0到已建立的对端的MRU。
4.3.9 Discard-Request
? Description
LCP包括Discard-Request是为了提供数据链路层的接收机制,用于链路
的从本端到远端的练习。这对于调试、性能测试和一些别的功能来说是
很有用的。
Discard-Request包的发送者发送一个LCP包,它的Code域置为11,Data
域为任意期望值,可到达但不能超过接收方建立的MRU。
接收到Discard-Request必须简单地丢弃。
Discard-Request只能在LCP的Open状态下发送。
一个Discard-Request包格式的总结如下所示,域是从左向右发送的。
Code
Identifier
Length
Magic Number
Data……
? Code
11 Discard-Request
? Identifier
Identifier域是1个8比特组,用于发送Discard-Request。
? Magic Number
Magic-Number域为4个8比特组,用来帮助链路回环测试。除非对配置
选项进行了修改,Magic-Number域必须当成0来发送并被在接收时忽略。
Magic-Number进一步的使用超出讨论的范围。
? Data
Data域的长度为0个或多个8比特组,被发送者用于储存一些不可解释
的数据。它可以是任意的二进制值,长度从0到已建立的对端的MRU。
4.4配置选项
LCP的配置选项使得对点到点链路标准特性的修改可以协商完成。
协商的修改包括一些诸如最大接收单元、异步控制字符映射、链路认证方法、链路
加密方法等等。配置选项在别的文档中描述。如果一个配置选项没有包括在
Configure-Request的包中,将使用它的缺省值。
配置选项列表的结束是由LCP包的结束指定的。
除非另外说明,一个特定的配置选项不应在配置选项列表中出现一次以上。特殊的
配置选项可以超越这一规则而出现一次以上。The effect of this Configure Option
specific and is specified by each such Configuration Option.
同样除非另外说明,所有的配置选项应用时遵循半双工模式。当协商时,它们只应
用于链路的一个方向,当从Configure-Request发送者的观点看时这通常时接收的
方向。
4.4.1 4.4.1 Format
配置选项的格式总结如下,域的传送从左到右。
Type
Length
Data…
? Type
Type域是单8比特组并指出了配置选项的类型。最新的Type域值在最近
的“Assigned Numbers"RFC中说明。
? Length
Length域是单8比特组,它指出了配置选项的长度,包括Type、Length、
Data域。假如在收到的Configure-Request中的协商配置选项的长度无效,
那么应回送一个Configure-Nak消息,它包括一个有适当长度和值的所期
望的配置选项。
? Data
Data域包括0个或多个8比特组以指出配置选项的值或别的信息。Data
域的格式和长度由Type和Length决定。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -