ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

DLMS/COSEM 蓝皮书解读(三十二):PPP setup(class_id = 44)—— 拨号链路上的 LCP/IPCP 协商与 PAP/CHAP/EAP 认证配置

DLMS/COSEM 蓝皮书解读(三十二):PPP setup(class_id = 44)—— 拨号链路上的 LCP/IPCP 协商与 PAP/CHAP/EAP 认证配置 DLMS/COSEM 蓝皮书解读三十二PPP setupclass_id 44—— 拨号链路上的 LCP/IPCP 协商与 PAP/CHAP/EAP 认证配置系列说明本系列基于 DLMS UA《Blue Book蓝皮书第 16 版 · 第 2 部分》一个接口类一篇。第 31 篇讲了MAC address setupclass_id 43它给出链路层身份EUI-48。本篇的PPP setupclass_id 44回答在一条串行/拨号链路上怎么用 PPP 协议协商出 IP——LCP、IPCP、认证三件事。上篇回顾第 31 篇MAC address setup存的是链路层地址PPP 拨号场景里这个地址之上还要跑 LCP链路控制、IPCPIP 控制、PAP/CHAP/EAP认证。本篇把这三组协商参数全部建模到一个 COSEM 对象里。0. 为什么需要这个类 —— 猫 → 串口 → PPP 拨号 → 拿到 IP这条链路怎么建模很多电表不是直接插网线的而是猫modem→ 串口 → PPP 拨号 → 拿到 IP。PPPPoint-to-Point Protocol在这条链路上要完成两件事LCPLink Control Protocol跟对端协商链路参数最大包长、是否压缩、是否认证、回拨……。IPCPIP Control Protocol协商网络层参数本端/对端 IP、IP 压缩……。PPP setup就是把这一堆协商选项的配置值建模成一个 COSEM 对象。蓝皮书对版本有个说明蓝皮书原文NOTE开头“Compared to earlier editions, this specification provides improvements in presenting the attributes. As this does not constitute technical changes, the version of the IC remains 0.”即本版只是把属性写得更清楚没有技术改动版本仍是 0。蓝皮书原文Overview“There shall be an instance of this IC for each network interface of a physical device.”每接口一个实例老规矩。1. 类蓝图1.1 属性表version 0#属性名读写数据类型Short name说明1logical_namestaticoctet-stringx对象实例名OBIS2PHY_referencestaticoctet-stringx 0x08指向底层物理层对象3LCP_optionsstaticLCP_options_typex 0x10LCP 协商选项数组4IPCP_optionsstaticIPCP_options_typex 0x18IPCP 协商选项数组5PPP_authenticationstaticPPP_auth_typex 0x20认证参数没有方法Specific methods 栏为空。三个选项属性全是static——PPP 是链路建立前就定好的不是运行时变的。2. 属性逐条拆解2.1PHY_reference蓝皮书原文“References another object by its logical_name. The object referenced contains information about the specific physical layer interface, supporting the PPP layer.”指向承载 PPP 的物理层对象比如Modem configuration27、IEC HDLC setup23、或对应串口对象。它和IPv4 setup的DL_reference是同一类下层引用思路。2.2LCP_options链路层协商LCP_options_type :: array LCP_options_type_element LCP_options_type_element :: structure { LCP_Option_Type: unsigned, LCP_Option_Length: unsigned, LCP_Option_Data: CHOICE { structure [2] -- for Callback-data boolean [3] -- for ProtF-Compr and AdCtr-Compr double-long-unsigned[6] -- for ACCM and Mag-Num unsigned [17] -- for FCS-Alternatives long-unsigned [18] -- for MRU and Auth-Prot } }蓝皮书原文NOTE 1“In all cases, as specified in IETF STD 51 / RFC 1661, the LCP_Option_Length field includes the total length of all three fields: LCP_Option_Type, LCP_Option_Length and LCP_Option_Data.”支持的LCP_Option_Type原文逐条Type名称说明 / 取值1MRUMaximum-Receive-Unit本端可收最大包默认 1500 字节2ACCMAsync-Control-Character-Map异步链路控制字符透明化协商3Authentication-Protocol认证协议见下5Magic-Number检测环路/异常7PFCProtocol-Field-Compression协议字段压缩8ACFCAddress-and-Control-Field-Compression地址/控制字段压缩9FCS-Alternatives备选 FCS 格式。bit1Null FCS, bit2CCITT 16-bit FCS, bit4CCITT 32-bit FCS13Callback回拨callback_data结构见下Authentication-ProtocolType 3可选值重点蓝皮书原文“By default, authentication is not required. The value indicates the authentication protocol used on the given PPP link. Possible values are: 0x0000 – No authentication protocol is used, 0xc023 – The PAP protocol is used, 0xc223 – The CHAP protocol is used, 0xc227 – The EAP protocol is used.”CallbackType 13结构蓝皮书原文callback_data“callback-active: boolean (default: false), callback_data_length: unsigned, callback_operation: unsigned, callback_message: octet-string”callback_operation取值(0) 由用户认证决定位置, (1) 拨号串, (2) 位置标识, (3) E.164 号码, (4) X.500 可分辨名, (5) 未分配, (6) CBCP 协商时确定。2.3IPCP_options网络层协商IPCP_options_type :: array IPCP_options_type_element IPCP_options_type_element :: structure { IPCP_Option_Type: unsigned, IPCP_Option_Length: unsigned, IPCP_Option_Data: CHOICE { array [1] -- for Pref-Peer-IP (each IP addr double-long-unsigned) boolean [3] -- for GAO and USIP double-long-unsigned [6] -- for Pref-Local-IP long-unsigned [18] -- for IP-Comp-Prot } }支持的IPCP_Option_TypeType名称说明 / 取值2IP-Comp-ProtIP 压缩协议0x0000 不压缩默认, 0x002d Van Jacobson Compressed TCP/IP, 0x0003 ROHC, 0x0061 IP Header Compression3Pref-Local-IPPreferred-Local-IP-Address本端期望 IPNOTE 2RFC 里此选项名为 “IP-Address”20Pref-Peer-IPPreferred-Peer-IP-Addresses对端 IP 列表配合 GAO/USIP 使用21GAOGrant-Access-Only-to-Pref-Peer-on-List是否只接受列表内对端 IP默认 FALSE22USIPUse-Static-IP-Pool是否给对端分配列表内 IP蓝皮书原文NOTE 3重要“Option types 20, 21 and 22 have been specified for the purposes of DLMS/COSEM; they are not specified in [RFC 1332].”即Type 20/21/22 是 DLMS/COSEM 自己扩展的不是标准 IPCP专门用来做白名单接入控制。当GAO TRUE设备只接受对端 IP 在 Pref-Peer 列表里的连接当USIP TRUE服务端尝试把列表里某个 IP 分给对端。2.4PPP_authentication认证参数PPP_auth_type :: CHOICE { null-data [0] -- used when no authentication is required structure [2] -- PAP_login or CHAP_algorithm or EAP_params }三种认证结构PAP_login{ user-name: octet-string, PAP-password: octet-string }CHAP_algorithm{ user-name: octet-string, algorithm_id: unsigned }algorithm_id取值0x05 CHAP with MD5默认, 0x06 SHA-1, 0x80 MS-CHAP, 0x81 MS-CHAP-2。蓝皮书原文NOTE 1“When CHAP is used, a ‘secret’ is also required to verify the ‘challenge’ sent by the client. This ‘secret’ is not accessible in the PPP setup object.”——CHAP 的 secret 不在这个对象里要去别处通常安全存储/密钥对象取。EAP_params{ md5_challenge (Type 4): boolean, one_time_password (OTP, Type 5): boolean, generic_token_card (GTC, Type 6): boolean }3. 方法无Specific methods 栏为空。PPP 协商完全靠五个属性配置驱动。4. 实战举例示例 1GPRS 模块 PPP 拨号PAP 认证典型配置属性值示例PHY_reference指向 Modem configuration 实例27LCP_options[{Type1, MRU1500}, {Type3, Auth-Prot0xc023}]IPCP_options[{Type3, Pref-Local-IP动态}]PPP_authenticationstructure: PAP_login{user-namecard, PAP-password1234}以上为工程示意、非蓝皮书原文实际 APN/账号/密码依运营商与对象列表。示例 2带白名单的静态 IP 池GAO USIPIPCP_options包含{Type20, Pref-Peer-IP [192.168.100.10, 192.168.100.11]}{Type21, GAO TRUE}只接受列表内对端{Type22, USIP TRUE}给对端分配列表内 IP于是只有 IP 在列表里的主站能拨进来且会被分到固定 IP。依据 NOTE 3 Type 20/21/22 语义。示例 3LCP 选项 Type3Auth-ProtCHAP的 A-XDR 骨架structure (tag [2]0x02): unsigned (tag [17]0x11) 0x03 // LCP_Option_Type 3 unsigned (tag [17]0x11) 0x04 // LCP_Option_Length 4 long-unsigned (tag [18]0x12) 0xC223 // Auth-Prot CHAPA-XDR 字节为工程示意非蓝皮书原文。示例 4CHAP 认证结构PPP_auth_type structure [2]: structure: CHAP_algorithm{ octet-string meter01 // user-name unsigned 0x05 // algorithm_id MD5 }工程示意提醒 secret 不在本对象见 NOTE 1。示例 5关闭认证null-dataPPP_auth_type null-data [0]用于可信专线/测试环境生产不建议。示例 6SN 短名读取base namexLCP_optionsx0x10IPCP_optionsx0x18PPP_authenticationx0x20。工程示意。示例 7FCS-AlternativesType9按位组合若想用 CCITT 32-bit FCSLCP_Option_Data的 FCS 字段 bit4 0x04逻辑或值。bit1Null(bit11? 原文写 bit 1 Null FCS, bit 2 CCITT 16-bit, bit 4 CCITT 32-bit——注意这是按位标志bit 编号 1/2/4 即值 1/2/4。工程示意。示例 8Callback 回拨LCP_options含{Type13, callback_data {callback_activeTRUE, callback_data_length11, callback_operation3 (E.164), callback_message138xxxx}}—— 拨入后让对端按指定号码回拨增强安全。工程示意。示例 9PPP 协商时序LCP → IPCP → 认证 → 建链以下为工程示意、非蓝皮书原文展示三阶段协商如何对应到本类属性。[设备] -- LCP Configure-Request --- [对端] 读 LCP_options(本类) [设备] -- LCP Configure-Ack ------ [对端] 协商 MRU/压缩/Auth-Prot [设备] -- 认证(CHAP/PAP) ---------- [对端] 读 PPP_authentication [设备] -- 认证成功 ----------------- [对端] [设备] -- IPCP Configure-Request --- [对端] 读 IPCP_options(Pref-Local-IP) [设备] -- IPCP: 分配对端 IP ------- [对端] Pref-Peer-IP / USIP 生效 [设备] 链路 UP可传 IP 数据 注意LCP 的 Auth-Prot(默认不认证)、IPCP 的 GAO/USIP 白名单都是本类属性在协商阶段被引用。示例 10与Modem configuration(27) 配合部署清单步骤对象动作1Modem configuration(27)设comm_speed、AT 初始化串拨*99#触发 GPRS2本PPP setup(44)PHY_reference指向 27设 LCP/IPCP/认证3IPv4 setup(42)DL_reference指向本 44或 TCP-UDP setupuse_DHCP_flag视运营商4应用层Push setup(40)/SMTP setup(46) 复用上述 IP 链路部署清单为工程示意非蓝皮书原文。5. 工程上容易踩的坑版本仍是 0本版只是写法改进没有新字段别去找 v1。CHAP 的 secret 不在这个对象PPP_authentication只存algorithm_iduser-name真正校验用的 secret 在别处密钥/安全对象排查CHAP 失败别只盯 44 对象。Type 20/21/22 是 DLMS 私扩展标准 PPP/IPCP 工具不一定认部分通用协议栈要特殊处理GAO/USIP 默认 FALSE不配就是任意对端可连。Auth-Prot 默认不设 不认证LCP_options里没有 Type3或PPP_authentication null-data链路就不认证——生产环境务必显式配 PAP/CHAP。PHY_reference指错物理层PPP 跑在哪条串口/猫上必须指对底层对象否则拨号起不来。MRU 默认 1500链路 MTU 受限如某些 PLC/串口时要显式调小否则大包被丢弃。Pref-Local-IPType3在 RFC 里叫 “IP-Address”对接标准 IPCP 实现时注意名字差异NOTE 2但 Type 号一致。三个选项属性都是 staticPPP 是建链前定好的运行时 SET 通常无效要在出厂/配置阶段设好。EAP 的三种 flagmd5_challenge/one_time_password/generic_token_card是并列 boolean要按需开别全 TRUE 导致协商失败。6. 小结 下期预告PPP setupclass_id 44用五个属性把拨号建链配齐LCP 协商链路参数MRU/ACCM/认证/Magic/FCS/回拨、IPCP 协商 IP本端/对端/压缩 DLMS 私扩展的 GAO/USIP 白名单、PPP_authentication管 PAP/CHAP/EAP。版本仍是 0无方法三个选项属性均 static。下一篇第 33 篇GPRS modem setupclass_id 45—— GPRS Modem 的 APN、PIN 与 QoS 配置。本篇把拨号链路上的 LCP/IPCP/认证配好了下一篇在 PPP 之上再配一层蜂窝 Modem 参数——接入点 APN、SIM 解锁 PIN、以及 default/requested 两层分组 QoS正好接上第 26 篇Auto connectmode 100–103 的常连接场景。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进