:TCP-UDP setup(class_id = 41)—— 包装层(Wrapper)的端口与连接参数,IP 通信的“地基“)
DLMS/COSEM 蓝皮书解读二十九TCP-UDP setupclass_id 41—— 包装层Wrapper的端口与连接参数IP 通信的地基系列说明本系列基于 DLMS UA《Blue Book蓝皮书第 16 版 · 第 2 部分》一个接口类一篇。第 28 篇讲了Push setupclass_id 40它决定数据推到哪、用 TCP 还是 UDP。本篇的TCP-UDP setupclass_id 41就是为这个选择铺地基端口号、MSS、最大并发连接、空闲超时——都是 TCP/UDP 子层本身的参数。上篇回顾第 28 篇Push setup的send_destination_and_method.transport_service选了 TCP(0) 或 UDP(1)。选完之后这条 TCP/UDP 连接监听哪个端口、能扛几个并发、多久没动静就断就由本篇的TCP-UDP setup定义。它是 IEC 62056-47Wrapper包装层在对象模型里的落点。0. 为什么需要这个类 —— 一个物理设备上的多个逻辑设备怎么共用一条连接在 TCP-UDP/IP 通信 profile 下一台物理设备无论装几个 COSEM server AP / client AP上的所有 AA 都跑在同一条 TCP 或 UDP 连接上。连接之上每个 AP 再靠Wrapper PortWPort区分——WPort 与 AP 的绑定通过SAP Assignment对象完成。蓝皮书原文TCP-UDP setup, Overview“Within a physical device, each AP — client AP or server logical device — is bound to a Wrapper Port (WPort). The binding is done with the help of the SAP Assignment object.”于是就冒出一组连接级参数必须有个地方配服务器在哪个端口监听 DLMS/COSEM 应用不是 80/443是 IANA 专门给 DLMS 登记的端口一条 TCP 连接的最大段大小MSS多少同时能有几个并发连接客户端多久没发帧这条连接就该被服务器 abort这些就是TCP-UDP setup的全部职责。注意它本身没有方法——纯配置类。蓝皮书原文“When a COSEM physical device supports various data link layers — for example Ethernet and PPP — an instance of the TCP-UDP setup object is necessary for each of them.”——一种数据链路层一个实例以太网一套、PPP 一套各配各的。1. 类蓝图TCP-UDP setup 0…n class_id 41, version 0属性静态/动态数据类型MinMaxDefShort namelogical_namestaticoctet-stringxTCP-UDP_portstaticlong-unsignedx 0x08IP_referencestaticoctet-stringx 0x10MSSstaticlong-unsigned4065535576x 0x18nb_of_sim_connstaticunsigned1x 0x20inactivity_time_outstaticlong-unsigned180x 0x28方法无Specific methods 栏为空。只有 version 0。2. 属性逐条解读2.1 logical_name标识本TCP-UDP setup实例6 字节 OBIS例0-0:25.0.0.255示例非蓝皮书原文以设备对象列表为准。2.2 TCP-UDP_port物理设备监听 DLMS/COSEM 应用的TCP/UDP 端口号。蓝皮书原文TCP-UDP_port“Holds the TCP-UDP port number on which the physical device is listening for the DLMS/COSEM application. Alternatively, holds the UDP port number of the CoAP endpoint of the DLMS/COSEM CoAP transport layer of a physical device.”——对 CoAP 场景这个端口就是 CoAP 端点UDP端口。蓝皮书原文注册端口“For DLMS/COSEM, the following port numbers have been registered by the IANA… dlms/cosem 4059/TCP DLMS/COSEM; dlms/cosem 4059/UDP DLMS/COSEM”也就是说IANA 给 DLMS/COSEM 登记的就是 4059TCP 和 UDP 各一个。但属性本身不强制——设备也可能用别的端口尤其厂商私有部署以对象列表为准。2.3 IP_reference引用一个 IP setup 对象按 logical_name被引用的对象里装着支撑本 TCP-UDP 层的 IP 层地址配置。蓝皮书原文IP_reference“References an IP setup object by its logical name. The referenced object contains information about the IP Address settings of the IP layer supporting the TCP-UDP layer.”——在 class_id 顺序里紧跟本篇的就是IPv4 setup42/IPv6 setup48。本属性指向它们形成IP 层 ← TCP-UDP 层的依赖链。此为指向关系说明具体 IP 属性见后续篇目不在本类规格内。2.4 MSSMaximum Segment SizeTCP 的最大接收段大小选项。蓝皮书原文MSS“this option shall only be sent in the initial connection request (i.e. in segments with the SYN control bit sent); if this option is not present, conventionally MSS is considered as its default value, 576; MSS is not negotiable; its value is indicated by this attribute.”要点三条只在 SYN 握手段里发后续不再发不配则按约定默认576不可协商——就是本属性写的值对端照单全收。Min40Max65535Def576。2.5 nb_of_sim_connTCP-UDP 传输层能支持的最大并发连接数。蓝皮书原文nb_of_sim_conn“The maximum number of simultaneous connections the COSEM TCP-UDP based transport layer is able to support.”Min1至少 1 个。2.6 inactivity_time_out空闲超时秒超过这么久没从 COSEM 客户端收到帧这条不活跃的 TCP 连接就被 abort。蓝皮书原文inactivity_time_out“Defines the time, expressed in seconds over which, if no frame is received from the COSEM client, the inactive TCP connection shall be aborted. When this value is set to 0, this means that the inactivity_time_out is not operational. In other words, a TCP connection, once established, in normal conditions — no power failure, etc. — will never be aborted by the COSEM server.”Def180 秒。设 0 永不因空闲 abort连接建好后只要不掉电就一直保持。蓝皮书原文实现说明“all actions related to the management of the inactivity time-out function… are managed inside the TCP-UDP layer implementation.”——计时不活跃、超时 abort 这些动作都在 TCP-UDP 层实现内部完成对上层透明。3. 方法本类无方法Specific methods 栏为空。配置即生效不需要额外 ACTION。4. 【实战举例】以下示例中的端口、OBIS、拓扑为帮助理解而构造非蓝皮书原文实际以设备对象列表与工程部署为准。示例 1一台以太网电表的标准 Wrapper 配置TCP-UDP setup (class_id 41) logical_name 00 00 19 00 00 FF -- 示例 OBIS TCP-UDP_port 4059 -- IANA 登记端口 IP_reference 00 00 19 01 00 FF -- 指向某 IPv4 setup (42) 实例 MSS 576 -- 默认 nb_of_sim_conn 3 -- 最多 3 个并发连接多个主站/第三方 inactivity_time_out 180 -- 3 分钟空闲断开主站用dlms/cosem 4059/TCP连上来Wrapper 按 WPort 把 AA 路由到对应逻辑设备SAP Assignment决定。示例 2永远在线的长连接专变终端inactivity_time_out 0→ 连接建好后除非掉电/链路断服务器不主动 abort。适合主站要随时能查、又不想频繁重连的专变场景。示例 3以太网 PPP 双链路各一个实例按蓝皮书要求每种数据链路层一个实例实例 A以太网TCP-UDP_port4059, IP_reference → IPv4 setup(42, 以太网口) 实例 BPPP经 ModemTCP-UDP_port4059, IP_reference → IPv4 setup(42, PPP口)两个实例逻辑名不同分别被不同SAP Assignment绑定到不同 WPort。示例 4与 Push setup 的闭环第 28 篇Push setup.transport_service 0 (TCP)时数据从本类的TCP-UDP_port发出nb_of_sim_conn决定了同时能有几个主站/采集器在被推。若推送目标多、并发高要相应调大nb_of_sim_conn。示例 5CoAP 端点对应 Push setup v3 的 9/10当用 CoAP 传输TCP-UDP setup也可承载 CoAP 的 UDP 子层TCP-UDP_port即 CoAP 端点 UDP 端口如 5683 缺省Push setup的port_reference通过CoAP setup object[:UDP port]指回这里。示例 6Wrapper 帧头长什么样工程背景非本类规格DLMS/COSEM 在 TCP/UDP 之上套一层WrapperIEC 62056-47。每帧前面是固定头示意字节非蓝皮书本类原文属传输层常识[ ver/len0x00 0x01 ][ 源 WPort: 2 字节 ][ 目的 WPort: 2 字节 ][ A-XDR 编码的 xDLMS APDU … ]头里是源/目的 WPort正是本类 SAP Assignment协作的产物之后才是真正的 xDLMS APDUA-XDR 编码。理解参数落到帧的哪一块排错时才分得清是网络问题还是应用问题。示例 7一条 TCP 连接承载多个 AAWPort 区分蓝皮书强调所有 AA 共用单条 TCP/UDP 连接。示意一条连接上的流主站 ──TCP(4059)── 电表 帧 A: 源WPort客端SAP1, 目的WPort管理LD(1) → AARQ 建 AA1 帧 B: 源WPort客端SAP1, 目的WPort计量LD(2) → GET 电量 帧 C: 源WPort客端SAP2, 目的WPort计量LD(2) → 另一主站的 AA2三个 AA 在同一 TCP 连接里靠 WPort 区分路由。nb_of_sim_conn限制的正是这种并发 AA 数量。示例 8部署/排错清单先确认IPv4 setup/IPv6 setup已建好且IP_reference指向它确认TCP-UDP_port是 4059 还是厂商私有主站建链端口要一致nb_of_sim_conn≥ 实际并发主站数跨小 MTU 链路把MSS调小避免分片长连接场景inactivity_time_out 0否则按业务容忍度设默认 180s多链路以太网/PPP各建一个TCP-UDP setup实例分别被SAP Assignment绑定到不同 WPort。4b. 几种传输 profile 对照工程背景非本类规格profile本类角色典型端口连接模型对应篇目TCP-UDP/IP (IEC 62056-47)TCP/UDP 子层参数4059多 AA 共用单连接本篇 IPv4 setup(42)HDLC (IEC 62056-46)不经由本类—点对点/多点IEC HDLC setup(23)CoAP承载于 UDP 子层5683(缺省)多 UDP 连接Push setupv3(40)PLC/RF不经由本类—介质相关后续 PLC 类——TCP-UDP setup只在基于 IP 的 TCP/UDP/CoAP这条线上生效HDLC、PLC、M-Bus 等走各自的 setup 类。示例 9TCP 还是 UDP对 Push 可靠性的影响工程背景Push setup的transport_service选 0(TCP) 还是 1(UDP)直接受本类参数影响TCP面向连接、可靠、有inactivity_time_out/重传适合重要数据必须送达如日冻结、账单但建连/保活开销大。UDP无连接、无重传、快适合丢了就丢了的高频小报文如实时遥测、告警但需Push setup的push_operation_method/重试来补可靠性。选 UDP 时本类的nb_of_sim_conn约束退化为并发 UDP 端点数因为 UDP 本身无连接状态——这一点常被忽略。对象依赖链文本图工程背景一台 IP 电表的通信对象是这样自底向上串起来的非本类规格属整体建模常识[ 物理链路: 以太网/PPP/PLC ] │ IPv4 setup (42) / IPv6 setup (48) ← IP 层地址/掩码/网关/DNS │ (被 IP_reference 引用) TCP-UDP setup (41) ← 本篇 ← 端口/MSS/并发/空闲超时 │ (WPort 由 SAP Assignment 绑定) SAP Assignment (17) ← WPort → 逻辑设备/AP │ Association LN/SN (15/12) ← 决定安全上下文(Security setup) │ Push setup (40) / Data protection (30) ← 用上面这条通道推/护数据理解这条链配置顺序应是先 IP → 再 TCP-UDP → 再 SAP Assignment → 最后上层业务类。本类是中间承上启下的一节。5. 工程上容易踩的坑端口号别想当然用 80/443DLMS/COSEM 的 IANA 登记端口是4059TCPUDP。主站/采集器建链前先确认设备TCP-UDP_port是不是 4059还是厂商私有端口。MSS 不可协商写多少对端就用多少且只在 SYN 发。跨小 MTU 链路如某些 PLC/PPP若 MSS 太大易分片丢包建议按链路调到合适值而非留默认 576 盲用。inactivity_time_out 0是永不断不是关闭超时别误以为 0 表示启用超时为 0 秒那会一建连就断。0 不Operational连接常驻。并发数nb_of_sim_conn最小 1多主站/第三方同时连的场景要算清峰值设小了会被拒连。IP_reference必须指向存在的 IP setup 实例指错或指向不存在的对象整个 TCP-UDP 层没 IP 支撑连不上。先建IPv4 setup/IPv6 setup再建本实例。多链路多实例以太网、PPP、PLC 各一套TCP-UDP setup别只建一个就以为全覆盖。本类无方法不要尝试对它 ACTION/SET 方法——只有属性可配。想重配置直接 SET 属性。空闲超时在层内实现计时不活跃、abort 连接都是 TCP-UDP 层内部行为调试连接无故断开先查inactivity_time_out和底层是否真有帧在流动。与 SAP Assignment 配合WPort→AP 的绑定在SAP Assignment第 14 篇本类只定连接参数两者一起才构成完整寻址。6. 小结 下期预告本篇要点TCP-UDP setup41是 IEC 62056-47Wrapper包装层的参数类定义端口、MSS、并发数、空闲超时无方法。IANA 为 DLMS/COSEM 登记端口4059TCP/UDPCoAP 场景此端口即 CoAP UDP 端点。IP_reference指向IPv4 setup(42)/IPv6 setup(48)形成 IP 层←TCP-UDP 层依赖一种数据链路层一个实例。MSS 默认 576、只在 SYN 发、不可协商inactivity_time_out默认 180s置 0 表示永不因空闲 abort。多个 AP 通过 WPort 共用一条 TCP/UDP 连接WPort 由SAP Assignment绑定。下一篇第 30 篇IPv4 setupclass_id 42—— 本篇IP_reference指向的就是它。IP 地址、子网掩码、网关、DNS 这些IP 层怎么上网的参数下一篇一次讲清把 TCP-UDP/IP 这条通信链从下到上打通。参考资料DLMS UA《Blue Book Ed.16 Part 2 – COSEM interface classes》TCP-UDP setup (class_id 41, version 0) 章节。文中属性、数据类型、Min/Max/Def、Short name 偏移、方法与引文均与原文一致示例中的端口、OBIS、拓扑、MSS/并发取值为帮助理解而构造实际以设备对象列表与工程部署为准。TCP-UDP/IP、CoAP、Wrapper 等背景说明属工程常识未杜撰本类规格字段。