PPP中的LCP(Link Control Protocol)

(内容整理自RFC1661,其中笔者觉得可能不精确的表达会用橙色贴出原文)

 

目录

简介

LCP包格式

1. 连接配置包(Link Configuration packets)

Configure-Request

Configure-Ack

Configure-Nak

Configure-Reject

2.连接终止包(Link Termination packets)

Terminate-Request & Terminate-Ack

3.连接维护包(Link Maintenance packets)

Code-Reject

Protocol-Reject

Echo-Request & Echo-Reply

Discard-Request

LCP配置选项

1.Maximum-Receive-Unit (MRU)

2.Authentication-Protocol

3.Quality-Protocol

4.Magic-Number

5.Protocol-Field-Compression (PFC)

6.Address-and-Control-Field-Compression (ACFC)


  • 简介

LCP(Link Control Protocol),用于PPP的链路协商,PPP连接的建立(即下图中的Establish阶段)就是从交换LCP报文开始的,LCP协商阶段所有非LCP报文都会被静默丢弃(silently discarded),LCP协商完成后,LCP就进入LCP Opened状态,而PPP开启下一个状态。

PPP状态图

LCP功能涉及自动协商封装格式选项(automatically agree upon the encapsulation format options)、数据包大小限制、检测回环链路和配置错误以及终结连接(terminate the link)。

具体LCP协商机制就是不同的报文交换,也就是LCP Packets就决定了LCP的协商过程。


  • LCP包格式

LCP包可以分为三类:

1. 连接配置包(Link Configuration packets)

用于建立和配置连接,包括

  • Configure-Request
  • Configure-Ack
  • Configure-Nak
  • Configure-Reject

Configure-Request

这个包用于请求打开连接,Options字段是可变长字段,内容是对选项默认值的修改协商,默认值不需要包括在其中。

也就是说若Options的内容为空,则发送端希望就按照默认的参数建立连接。

具体的配置选项这里就不列出了。

Code:值取1代表Configure-Request

Identifier:用于指示通信序列号,当Options字段内容发生改变或者收到一个合法的Configure-Request回复时,Identifier必须改变。当然,重传当前包不需要。

Configure-Ack

在收到Configure-Request包后,若包中的Options都是可以接受的,则必须回复一个Configure-Ack包,并且包中的Options与对应的Configure-Request包需严格匹配,Identifier也需和Request包中的一致。非法的包会直接被丢弃。

Code:值取2代表Configure-Ack

Identifier:和收到的Configure-Request包中的Identifier一致,以指示回复的是哪个Request包

Configure-Nak

在收到Configure-Request包后,若包中的Options都是可识别的,但其中的一些协商值不接受,则回复Configure-Nak。

回复的包中Options仅仅包括Configure-Request中不接受的Options,且这些Options的顺序不会改变。也就是仅仅将Configure-Request中不接受的Options中接受的配置协商剔除。非法的包会直接被丢弃。

When a particular type of Configuration Option can be listed more than once with different values, the Configure-Nak MUST include a list of all values for that option which are acceptable to the Configure-Nak sender. This includes acceptable values that were present in the Configure-Request.

Code:值取3代表Configure-Nak

Identifier:和收到的Configure-Request包中的Identifier一致,以指示回复的是哪个Request包

Configure-Reject

在收到Configure-Request包后,若包中的Options有不可识别的,或者不可协商的(Configure-Request are not recognizable or are not acceptable for negotiation (as configured by a network administrator)),则回复Configure-Reject。

Options字段仅仅包括不可接受的配置选项,接受的Options被剔除。和Nak一样,其余Options顺序也不能改变。非法的包会直接被丢弃。

Code:值取4代表Configure-Reject

Identifier:和收到的Configure-Request包中的Identifier一致,以指示回复的是哪个Request包

 

2.连接终止包(Link Termination packets)

用于终止连接,包括

  1. Terminate-Request
  2. Terminate-Ack

Terminate-Request Terminate-Ack

这两个包用于关闭连接,希望关闭的一方会发送Terminate-Request,另一方收到后会回复Terminate-Ack,若没有收到另一方的回复,Terminate-Request会持续发送。

Code:值取5代表Terminate-Request;值取6代表Terminate-Ack

Identifier:Terminate-Ack中的值应和Terminate-Request中一致

 

3.连接维护包(Link Maintenance packets)

用于管理或者测试链路(manage and debug a link),包括

  1. Code-Reject
  2. Protocol-Reject
  3. Echo-Request
  4. Echo-Reply
  5. Discard-Request

Code-Reject

当收到一个LCP包发现Code字段未知时(可能对端使用的协议版本不一致),就需要回复一个Code-Reject。

当对端收到Code-Reject,若其中指示的未知字段是协议要求的必须字段时(Upon reception of the Code-Reject of a code which is fundamental to this version of the protocol),对端通常会报告问题并关闭连接,因为这类问题通常没法自动协商解决。

Code:值取7代表Code-Reject

Identifier:每发送一个Code-Reject,Identifier都需改变

Rejected-Packet:完整包含收到LCP包中未知的部分(The Rejected-Packet field contains a copy of the LCP packet which is being rejected.)。

Protocol-Reject

当收到一个PPP包发现协议(Protocol)字段的内容未知/不支持时,就需要回复一个Protocol-Reject。

一旦接收到Protocol-Reject,必须立刻停止继续发送指定的协议相关包。

Protocol-Reject只允许在LCP Opened阶段发出/收到,在其他阶段发出/收到都会被丢弃。

Code:值取8代表Protocol-Reject

Identifier:每发送一个Protocol-Reject​​​​​​​,Identifier都需改变

Rejected-Protocol:指示驳回(rejected)的协议

Rejected-Information:包含被驳回的包的内容(去掉头和FCS)

Echo-Request & Echo-Reply

这两个包用于链路检测,在LCP Opened阶段收到Echo-Request时,必须回复一个Echo-Reply。并且在LCP Opened阶段,必须有Request和Reply这个过程。

Code:值取9代表Echo-Request;值取10代表Echo-Reply

Identifier:Echo-Reply的Identifier必须和Echo-Request一致

Magic-Number:用于链路检测,具体见单独小节

Discard-Request

也是用于链路检测,向对端发送这个包,对端收到后直接丢弃。这个包也只能在LCP Opened阶段发出。

Code:值取11代表Discard-Request


  • LCP配置选项

配置选项(Configuration Option)在连接配置包(Link Configuration packets)类型中已经提到。它允许修改PPP默认的一些配置,如果Configure-Request包不提及这些配置,意味着使用PPP默认配置。

它的具体格式如下:

Type:指示配置选项类型,包括:

0 RESERVED
1 Maximum-Receive-Unit
3 Authentication-Protocol
4 Quality-Protocol
5 Magic-Number
7 Protocol-Field-Compression
8 Address-and-Control-Field-Compression

这六种类型接下来会详细解释。

Length:配置选项的总长度(Type、Length和Data字段)

Data:具体信息

1.Maximum-Receive-Unit (MRU)

这个配置选项是必须告知对端的,它表示本端允许收到的最大包大小。默认值为1500(字节)。这个值不包括PPP中的Protocol字段,只包括Information和Padding这两个字段。

Type:值取1

Length:值取4

Maximum-Receive-Unit:指示MRU

2.Authentication-Protocol

默认情况是不需要认证的。如果需要认证,这个配置选项也不应该在很早的Configure-Request包中就发出,因为保证链路能正常通信才是最重要的,所以在协商完一些基本参数后,才能开始协商认证这种事。

Type:值取3

Length:值≥4

Authentication-Protocol:有两种认证协议

c023 Password Authentication Protocol(PAP)
c223 Challenge Handshake Authentication Protocol(CHAP)

Data:也许需要传输一些附加数据

3.Quality-Protocol

协商使用链路质量检测(link quality monitoring)的方法,默认情况下链路质量检测不开启。

Type:值取4

Length:值≥4

Quality-Protocol:仅有一种协议,取值c025 Link Quality Report

Data:也许需要传输一些附加数据

4.Magic-Number

这个配置选项提供了一种方法用于检测回环或者其他的链路异常(This Configuration Option provides a method to detect looped-back links and other Data Link Layer anomalies)

默认情况下不协商,Magic-Number取0。

需要协商时,会随机生成一个数,尽量保证这个数唯一,所以通常会将机器序列号、MAC地址等数作为种子来生成这个随机数。

当收到的Configure-Request含有Magic-Number配置选项时,将这个Magic-Number和最后一个发出去的Configure-Request包中的Magic-Number比较,如果数字相同,则链路很有可能出现环路。为了进一步确认,必须再发一个Configure-Nak包,含有重新生成的Magic-Number,以确定是否有环路,在未确认前,Configure-Request包停止发送。所以如果存在环路,会陷入一直发送Configure-Nak包的死循环。

Echo-Request、Echo-Reply和Discard-Request包都有Magic-Number字段,如果Magic-Number已经产生,那么这些包发送时就必须将此填入。

Type:值取5

Length:值取6

Magic-Number:Magic-Number

5.Protocol-Field-Compression (PFC)

提供了PPP协议字段的压缩协商。

PPP包中的协议字段(Protocol)默认长度为2字节,通过协商可以减少到1字节。

具体方案参考最近标准。

Type:值取7

Length:值取2

6.Address-and-Control-Field-Compression (ACFC)

提供了数据链路层地址和控制字段的压缩协商。

这两个字段通常是固定的常数值,所以可以通过协商来压缩。

具体方案参考最近标准。

Type:值取8

Length:值取2

### 多层神经网络模型的基本构建与训练 多层神经网络(Multilayer Perceptron, MLP)是一种常见的前馈人工神经网络结构,通常由输入层、隐藏层和输出层组成。其基本使用方法涉及以下几个方面: #### 1. 数据准备 在构建神经网络之前,需要准备好用于训练的数据集。这些数据应分为特征矩阵 \(X\) 和目标向量 \(Y\)。对于回归问题,\(Y\) 是连续值;而对于分类问题,则可能是离散标签。 为了提高模型性能,建议对数据进行预处理,例如标准化或归一化[^1]: ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) ``` #### 2. 构建神经网络架构 可以利用 MATLAB 工具箱中的 NeuroSolutions 集成模块来设计自定义的神经网络,并将其导入到 MATLAB 中进一步开发。如果是在 Python 或其他编程环境中实现 BP 网络,则可以通过如下代码完成基础框架搭建[^3]: ```python import numpy as np from keras.models import Sequential from keras.layers import Dense model = Sequential([ Dense(64, activation='relu', input_shape=(input_dim,)), # 输入层 -> 第一层隐藏层 Dense(32, activation='relu'), # 第二层隐藏层 Dense(output_dim, activation='linear') # 输出层 (线性激活函数适用于回归任务) ]) ``` 此处 `input_dim` 表示输入维度大小,而 `output_dim` 则取决于具体应用场景下的预测变量数量。 #### 3. 定义损失函数与优化器 选择合适的损失函数以及梯度下降法变种作为优化策略至关重要。针对回归类别的题目推荐均方误差(MSE),同时 Adam Optimizer 被广泛应用于实际项目当中因为它的高效性和稳定性[^2]: ```python model.compile(optimizer='adam', loss='mean_squared_error') ``` #### 4. 训练过程控制 设定好批次大小(batch size) 及迭代次数(epoch number), 开始执行 fit 方法让机器自动寻找最佳参数组合直至满足停止准则为止: ```python history = model.fit(X_train_scaled, Y_train, epochs=50, batch_size=32, validation_split=0.2) ``` 上述代码片段展示了如何基于 Keras 库快速建立并运行一个多层感知机实例。当然,在真实世界里还需要考虑更多细节比如正则项加入防止过拟合现象发生等问题。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值