- 1. 一、为什么长Verbindung会断
- 2. 二、三层保活机制:TCP KeepAlive、MQTT Keep Alive、应用层心跳
- 3. 2.1 TCP Vereinbarung层的 KeepAlive —— 最底层,最不灵活
- 4. 2.2 MQTT Vereinbarung的 Keep Alive —— 标准化的应用层保活
- 5. 2.3 应用层Custom definiert心跳 —— 最灵活,也最需要设计
- 6. 三、TCP KeepAlive vs 应用层心跳:什么时候用哪个
- 7. 四、Registrierung包:让Der Server知道「我是谁」
- 8. 4.1 Registrierung包的本质
- 9. 4.2 Registrierung包的两种Senden Sie时机
- 10. 4.3 Registrierung包的Daten内容设计
- 11. 4.4 Cloud-PlattformDie AusrüstungRegistrierung与 DTU Registrierung包的关系
- 12. 五、vollständigParameter推荐与实战配置
- 13. 5.1 心跳Parameter推荐值
- 14. 5.2 Linux Der Server侧 TCP KeepAlive Parameter推荐
- 15. 5.3 DTU 实际配置Beispiel
- 16. 六、心跳与Registrierung的Häufig坑
- 17. 6.1 NAT 超时和心跳周期不匹配
- 18. 6.2 Registrierung包没有在Verbindung建立后立即Senden Sie
- 19. 6.3 双向心跳只做了一方
- 20. 6.4 TCP KeepAlive 的跨平台schlecht异
- 21. 6.5 Registrierung包内容没有做Prüfungen
- 22. 七、排查清单
Quelle:Modbus Chinesisches Netzwerk(modbus.cn) —— Inländisch führend.ModbusKommunikationsprotokoll Technologie Gemeinschaft
本文:物联网传输模块的心跳包与Registrierung包:机制、设计与排障 · Der Autor:Technisches Team von Modbus · 发布于 2026-07-01
摘要:4G DTU、Seriöser Server、边缘网关等物联网传输模块中,心跳包和Registrierung包是维持Verbindung稳定和Ausrüstung身份识别的核心机制。本文从 TCP KeepAlive、MQTT Keep Alive、应用层Custom definiert心跳三个层面Das System讲解心跳机制;从 DTU Registrierung包zuCloud-PlattformAusrüstung身份认证梳理Registrierung机制,附ParameterBerechnung公式、Beispiel Code和排障步骤。关键词:心跳包、Registrierung包、4G DTU、Keep Alive、MQTT 心跳、TCP 保活、AusrüstungRegistrierung。
一块 4G DTU 插上 SIM 卡,配好Serienparameter,连上Der Server——Daten通了,你觉得搞定了。过了一晚上,Die二天来发现Ausrüstung离线了,但信Nr.灯还亮着。重启一下好了。再过几天又离线了。
这就是长Verbindung保活的典型问题。在物联网Szene里,AusrüstungUnterteilung布在全国各地,有些在偏远山区,有些在地下室。Kommunikation链路从Ausrüstung的Die Serie出发,经过 DTU 的 4G 模组,穿越运营商的 NAT 网关,再通过公网zu达你的云Der Server。这条链路上每一个环节都可能把你的Verbindung杀掉,但不会通知你。
这篇Artikel把心跳包和Registrierung包从原理zu实战Alles讲清楚——不只是概念,更给出你可以在项目中直接用的Parameter、代码和排障方法。
一、为什么长Verbindung会断
在讲心跳之前,先搞清楚长Verbindung是怎么断的——因为不同原因对应不同的保活策略。
运营商 NAT 超时。4G DTU 用的是移动网络私有 IP(10.x.x.x / 100.x.x.x),经过运营商的 NAT 网关才能访问公网。NAT 网关为了节省资源,会给空闲Verbindung设一个超时Zeit。国内三大运营商的典型值:
- 中国移动:5 Unterteilung钟
- 中国联通:大概 2-3 Unterteilung钟
- 中国电信:大概 3-5 Unterteilung钟
不同地区、不同套餐卡的 NAT 超时Zeit不完全一样,但基本都在 2-5 Unterteilung钟之间。超过这个Zeit没有Daten包经过,NAT 网关上这条映射记录就被Beseitigung了。之后Der Server想向 DTU 发包时,NAT 网关已经不认识这个包了,直接丢弃——Ausrüstung看起来还是在线(4G 附着正常),但Daten通道已经死了。
防火墙 / 中间Ausrüstung。Unternehmen网络的出口防火墙通常也会对空闲 TCP Verbindung做清理。一台Arbeitskontrolle机通过 WiFi 接入了Unternehmen内网,和云端Der Server保持一个 Modbus TCP Verbindung。如果半小时没Kommunikation,中间那台深信服 / 华为防火墙会把这条Verbindung的Status标记为过期并释放。Der Server以为Ausrüstung还连着,Ausrüstung以为Der Server还在——这就是「Verbindung假死」。
Ausrüstung异常掉线。现场Ausrüstung断电、4G 信Nr.丢失、交换机重启——这些情况下 TCP Verbindung的对端不会收zu FIN 包。四层没有断开信Nr.,应用层就无从感知。如果不靠心跳检测,Der Server会一直认为Ausrüstung在线,调度任务照常下发,Alles超时。
TCP 半开Verbindung。TCP Verbindung的一端已经Schließen(比如Der Server重启了),另一端不知道,还在 keep-alive Status。这是标准的「半开Verbindung」Szene。
二、三层保活机制:TCP KeepAlive、MQTT Keep Alive、应用层心跳
保活有三种层次,对应不同的Szene和粒度。
2.1 TCP Vereinbarung层的 KeepAlive —— 最底层,最不灵活
TCP Vereinbarung栈自带 KeepAlive 机制。Öffnen.后,如果Verbindung在指定Zeit内没有Daten传输,OperationenDas System内核会自动Senden Sie探测包(空 ACK)去对端,等对端回复。对端如果还活着,回复一个 ACK;如果死了,多次探测无果后SchließenVerbindung。
Linux 内核的三个关键Parameter:
net.ipv4.tcp_keepalive_time = 7200 # 首次探测前的空闲Zeit(秒),默认 2 小时
net.ipv4.tcp_keepalive_intvl = 75 # 探测间隔(秒),默认 75 秒
net.ipv4.tcp_keepalive_probes = 9 # 探测次数,默认 9 次
也就是说,默认配置下,一条 TCP Verbindung要断掉 2 小时 11 Unterteilung 15 秒(7200 + 75 × 9)之后,OperationenDas System才会通知应用层「这条Verbindung死了」。这个Zeit对物联网Szene完全不能用——等你发现Ausrüstung离线了,Ausrüstung的电池都换了两轮了。
可以在代码中为单个 socket 设置更短的Parameter(Linux ≥ 2.6.37 支持):
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
# 以下三个Parameter需要 Linux 2.6.37+ 且 socket 为 IPPROTO_TCP
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 60) # 60 秒空闲后开始探测
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 10) # 每 10 秒探测一次
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 3) # 3 次无Antwort判定断开
这样配置后,Verbindung断开的发现Zeit = 60 + 10 × 3 = 90 秒。
但 TCP KeepAlive 有两个致命缺陷。
Die一,它只能检测端zu端的 TCP Verbindung是否存活,无法检测端zu端之间的中间Ausrüstung(NAT 网关、防火墙)是否清理了Verbindung。探测包只在两个端点的 TCP 栈之间流动,经过 NAT 网关时可能不会Erfrischen NAT 映射条目——也就是说,TCP 层认为Verbindung正常,但 NAT 已经把通道关了。
Die二,2 小时默认值太长,改了Parameter也只对gegenwärtig socket 生效,换台机器又回zu默认配置。而且Parameter修改需要 root 权限,EingebettetAusrüstung(DTU、Seriöser Server)的内核可能不支持动态修改。
所以 TCP KeepAlive 在物联网Szene里只能做辅Assistenten.段,不能替代应用层心跳。
2.2 MQTT Vereinbarung的 Keep Alive —— 标准化的应用层保活
MQTT Vereinbarung在 CONNECT Meldung中定义了一个 16 位的 Keep Alive Feld,单位是秒。这个机制比 TCP KeepAlive 更贴近应用层需求:
- 客户端在 Keep Alive Zeit内必须至少Senden Sie一个控制Meldung(可以是 PUBLISH、SUBSCRIBE、PINGREQ 等任何一种)。
- 如果服务端(Broker)在 1.5 × Keep Alive Zeit内没有收zu来自客户端的任何Daten包,则认为客户端已断开,Schließen TCP Verbindung并执行遗嘱消息(Last Will)。
- 同理,如果客户端在 Keep Alive Zeit内没有收zu来自 Broker 的任何Daten包,也应该主动重连。
MQTT 5.0 更进一步,允许 Broker 在 CONNACK Meldung中返回 Server Keep Alive 值——如果 Broker 不接受客户端建议的 Keep Alive,它可以用自己的值覆盖,客户端必须遵守 Broker 返回的值。
关键ZahlenwertAuswahl:MQTT 的 Keep Alive 不能设太大也不能太小。太大了,Ausrüstung离线很久 Broker 才发现;太小了,心跳包频繁消耗 SIM 卡流Quantität。实际项目中,MQTT 的 Keep Alive 一般设在 60-120 秒之间。如果Ausrüstung是电池供电(NB-IoT Szene),可以放宽zu 300-600 秒。
和 TCP KeepAlive 的区别:MQTT 的 Keep Alive 是Anwendungsschichtprotokoll行为,PINGREQ Meldung封装在 TCP 包里Senden Sie。NAT 网关看zu有 TCP 包经过,会Erfrischen映射条目。这就是为什么 MQTT 的 Keep Alive 能解决 NAT 超时问题,而 TCP KeepAlive 不一定能。
2.3 应用层Custom definiert心跳 —— 最灵活,也最需要设计
如果你Die Ausrüstung不用 MQTT,走的是裸 TCP/UDP 透传(Modbus TCP、Custom definiertBinärsystemVereinbarung等),你就需要自己设计应用层心跳。这就是 4G DTU 和Seriöser Server里最Häufig的心跳包概念。
设计原则:
- 心跳包要尽Quantität小。 流Quantität是钱。最简心跳包可以是一个Bytes——比如
0x48(ASCII 的 ‘H’),或者固定Charaktere串 “Q”。 - 心跳间隔要kleiner als NAT 超时Zeit。 国内运营商 NAT 超时最短的是 2 Unterteilung钟,所以心跳间隔一般设 60 秒或更短。保守建议 30-60 秒。
- Der Server应该回复心跳。 单向心跳只能让Der Server知道Ausrüstung活着,但Ausrüstung不知道Der Server是否活着。双向心跳(Ausrüstung发,Der Server回)让两端都能检测对端Status。
- 连续 N 次心跳失败后触发重连。 不是丢一个心跳就断——偶尔的丢包在网络层面正常。通常设为连续 3 次心跳无回应后触发重连流程。
AIRIOT 平台的心跳Beispiel:Ausrüstung定时Senden SieCharaktere “Q”,平台收zu后立即回复 “A”。Ausrüstung通过是否收zu “A” 来判断Verbindung是否正常——这个设计简单Wirksam,4G DTU 上实现成本极低。
心跳间隔的Berechnung公式:
心跳间隔 < NAT超时Zeit × 安全Koeffizienten
安全Koeffizienten = 0.6 ~ 0.8
如果运营商 NAT 超时是 5 Unterteilung钟(300 秒),取安全Koeffizienten 0.6,心跳间隔 ≤ 180 秒。再考虑zu偶尔的网络抖动,实际项目中设 60~90 秒更稳妥。
三、TCP KeepAlive vs 应用层心跳:什么时候用哪个
这个问题没有标准答案,取决于你的Szene。
| 维度 | TCP KeepAlive | 应用层心跳 |
|---|---|---|
| 实现成本 | 一行代码Öffnen.,零Vereinbarung开销 | 需要定义心跳帧和超时逻辑 |
| 穿透 NAT | 不一定,探测包是空 ACK | 一定能,Erfrischen NAT 映射 |
| 灵活性 | 只能检测 TCP 连通性 | 可携带Status信息、Zeit戳、Ausrüstung电Quantität等 |
| 跨Vereinbarung通用 | 仅 TCP | TCP / UDP 均可 |
| 流Quantität开销 | 极小(空 ACK,40 Bytes左右) | 取决于Custom Vereinbarung(通常几十Bytes) |
| 默认配置 | 2 小时起,不可接受 | 完全可控 |
建议的组合策略:在生产项目中,同时Öffnen. TCP KeepAlive(作为底层兜底)和应用层心跳(作为主力检测)。TCP KeepAlive Parameter设短一点(60 秒空闲 + 10 秒间隔 + 3 次探测),应用层心跳设 30-60 秒。即使应用层心跳因为 bug 没发出去,TCP KeepAlive 在 90 秒后也会发现Verbindung断开。
如果你Die Ausrüstung必须走 UDP(比如某些 DTU 的Registrierung模式),那 TCP KeepAlive 完全没用——只能用应用层心跳。
四、Registrierung包:让Der Server知道「我是谁」
心跳解决的是「我还活着」的问题,Registrierung包解决的是「我是谁」的问题。
4.1 Registrierung包的本质
在 DTU 和Seriöser Server中,Registrierung包是Ausrüstung在建立 TCP Verbindung后Senden Sie的Die一包Daten,用于向Der Server声明自己的身份。Der Server根据Registrierung包的内容,将gegenwärtig TCP Verbindung与预先RegistrierungDie Ausrüstung记录进行关联。
一个典型的 DTU Registrierung流程:
- DTU 上电、拨Nr.、附着 4G 网络
- DTU 通过 TCP VerbindungzuDer Server的指定端口
- Verbindung建立成功后,DTU 立即Senden SieRegistrierung包(可以是一串Custom definiertCharaktere,也可以是 IMEI/ICCID)
- Der ServerAnalyseRegistrierung包,识别Ausrüstung身份,更新Ausrüstung在线Status
- Registrierungabgeschlossen.,开始正常的双向Daten透传
4.2 Registrierung包的两种Senden Sie时机
有些 DTU 支持两种Registrierung包Senden Sie方式:
Verbindung时Senden Sie一次:只在 TCP-Verbindung hergestellt时Senden Sie。此后正常的Daten透传不再包含Registrierung信息。这适用于Der Server按Verbindung管理Ausrüstung身份的Szene——一个 TCP Verbindung对应一台Ausrüstung,Verbindung建立后身份就确定了。
每包Daten前附加:把Registrierung包附加在每次透传Daten的前面。适用于多Ein Gerät通过同一个Seriöser Server或网关接入的Szene——Der Server需要通过每包Daten中的Registrierung信息来判断Daten来源Ausrüstung。缺点是增加了每包Daten的开销。
以有人 DTU 为例,使用Registrierung包的配置方式:
- 勾选「aktiviert.Registrierung包」
- AuswahlSenden Sie方式:「Verbindung时Senden Sie一次」或「向Der ServerSenden Sie的每个Daten包前都加上」
- Custom definiertRegistrierung包内容(如
01表示 1 Ausrüstung Nr.,02表示 2 Ausrüstung Nr.) - Der ServerEmpfangzu的Datenformate为:
Registrierung包 + 透传Daten
4.3 Registrierung包的Daten内容设计
Registrierung包的内容取决于你的后端架构。Häufig的做法:
使用 IMEI 作为Ausrüstung唯一标识。IMEI(国际移动Ausrüstung识别码)是 15 位数字,全球唯一,烧在 4G 模组里改不了。DTU 启动时Lesen模组的 IMEI,作为Registrierung包发给Der Server。优点是天然唯一、不需要人为Unterteilung配;缺点是 IMEI Länge 15 Bytes,如果需要极致省流Quantität,可以考虑用平台侧预Unterteilung配的短 ID(2-4 Byte)。
使用平台预Unterteilung配的SequenzNr.。在Cloud-Plattform上RegistrierungAusrüstung时,平台生成一个唯一SequenzNr.(可以是自增 ID,也可以是 UUID 的短哈希)。通过配置Werkzeuge写入 DTU,DTU Verbindung时Senden Sie这个SequenzNr.。优点是SequenzNr.可控制(比如按区域Codierung),且Länge短;缺点是需要一个配置下发流程。
使用 ICCID。SIM 卡的 ICCID 也是 20 位数字,唯一。但一般不推荐——因为 SIM 卡可能更换,而Ausrüstung不应该因为换卡而变成「另一台Ausrüstung」。
4.4 Cloud-PlattformDie AusrüstungRegistrierung与 DTU Registrierung包的关系
在华为云 IoTDA 或阿里云 IoT 这类标准物联网平台中,AusrüstungRegistrierung是一个独立的流程:
- 先在平台上创建产品(定义Ausrüstung的Daten模型)
- 然后RegistrierungAusrüstung(平台生成 Device ID 和 Device Secret)
- 将这些凭据写入Ausrüstung的固件或配置文件
- Ausrüstung启动时,凭 Device ID 和 Secret 向平台发起认证Verbindung(通常通过 MQTT 的 Username/Password Feld或者 X.509 证书)
在这个流程里,DTU 的「Registrierung包」其实是对应平台Die Ausrüstung认证信息。比如 AIRIOT 平台要求Ausrüstung建立 TCP Verbindung后Die一ZeitSenden SieSequenzNr.,本质上就是一个简化版Die Ausrüstung认证Vereinbarung。
如果你的后端Der Server是自己开发的,那RegistrierungVereinbarung完全由你设计。核心要求就两个:Ausrüstung身份唯一、Der Server能验明正身。最简方案——4G DTU 用 IMEI Registrierung + 固定密钥 HMAC 签名,足以满足大多数非金融级安全要求的工业Szene。
五、vollständigParameter推荐与实战配置
5.1 心跳Parameter推荐值
| Szene | 心跳间隔 | 心跳超时(连续失败) | 说明 |
|---|---|---|---|
| 4G DTU 透传(TCP) | 30-60 秒 | 3 次(90-180 秒) | 应对 NAT 超时,兼顾流Quantität |
| 4G DTU 透传(UDP) | 15-30 秒 | 5 次(75-150 秒) | UDP 无Verbindung,心跳更频繁 |
| MQTT(WiFi/Ethernet) | 60-120 秒 | 1.5×KeepAlive | 遵循 MQTT Vereinbarung规范 |
| NB-IoT / 电池供电 | 300-600 秒 | 2 次(600-1200 秒) | 省电优先,接受较长离线发现Zeit |
| 局域网 Modbus TCP 网关 | 120-300 秒 | 3 次 | 有线网络稳定,可放宽 |
| WiFi Seriöser Server | 30-60 秒 | 3 次 | WiFi 掉线概率高于有线 |
5.2 Linux Der Server侧 TCP KeepAlive Parameter推荐
在 /etc/sysctl.conf 中:
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 3
然后 sysctl -p 应用。加上应用层心跳(如 60 秒间隔),两层保活互相兜底。
5.3 DTU 实际配置Beispiel
以下是一个典型的 4G DTU 配置方案(以有人 USR-G780 为例):
心跳包:aktiviert.
心跳周期:60 秒
心跳内容:Q(Custom definiertCharaktere串)
Registrierung包:aktiviert.
Registrierung包Senden Sie方式:Verbindung时Senden Sie一次
Registrierung包内容:IMEI(使用Ausrüstung IMEI 作为唯一标识)
VerbindungTypus:TCP Client
Der ServerAdresse:your-server.com
Der Server端口:8001
断线重连:aktiviert.,间隔 10 秒,最多重连 30 次
Der Server侧对应逻辑:
- 收zu TCP VerbindungBitte → 接受Verbindung
- 等待 5 秒内收zuRegistrierung包 → 提取 IMEI,查Daten库匹配Ausrüstung列表 → 更新Ausrüstung在线Status为 Online
- 5 秒内没收zuRegistrierung包 → 判定为非法Verbindung,Schließen socket
- Registrierung成功后,启动心跳定时器,期待每 60 秒收zu “Q” → 回复 “A”
- 连续 3 个心跳周期(180 秒)没收zu “Q” → 判定Ausrüstung离线,触发重连 / 告警
六、心跳与Registrierung的Häufig坑
6.1 NAT 超时和心跳周期不匹配
最Häufig的问题:心跳周期设了 5 Unterteilung钟,运营商 NAT 超时是 2 Unterteilung钟。Ergebnis是每一次心跳间隔,NAT 已经断了,心跳包发不出去,Ausrüstung永远处于「连上→2 Unterteilung钟后断开→心跳超时重连→连上→2 Unterteilung钟后断开」的Unendlicher Kreislauf。
诊断方法:在Der Server侧看同一Ein Gerät的Verbindung建立Zeit和断开Zeit,如果断开Zeit – 建立Zeit几乎每次都是一个festen Wert(比如 120 秒),基本就是 NAT 超时问题。
解决:心跳周期 < 120 秒。
6.2 Registrierung包没有在Verbindung建立后立即Senden Sie
DTU 建立 TCP Verbindung后,如果先Senden Sie的是透传Daten而不是Registrierung包,Der Server无法识别这个Daten来自哪台Ausrüstung——尤其是当多Ein Gerät共享一个Der Server端口时,收zu的Die一包Daten如果不是Registrierung包,Der Server只能丢弃或SchließenVerbindung。
必须Garantie:Registrierung包在 socket connect 成功后以最快速度发出。
6.3 双向心跳只做了一方
Ausrüstung发心跳、Der Server不回复——Der Server知道Ausrüstung活着,但Ausrüstung不知道Der Server是不是还活着。如果Der Server因为程序 bug 或网络问题不再回复心跳,Ausrüstung可能还在继续等着,直zu业务DatenSenden Sie超时才意识zu出事了。
双向心跳让Ausrüstung侧也能主动发现Der Server异常并触发重连。对于Unterteilung布在全国各地、无人值守的 DTU Ausrüstung,这一条很重要。
6.4 TCP KeepAlive 的跨平台schlecht异
Windows、Linux、FreeRTOS、LwIP 对 TCP KeepAlive 的默认值和可配置Parameter都不一样。Linux 默认 7200 秒,Windows 默认 7200000 毫秒(2 小时),LwIP(Eingebettet TCP Vereinbarung栈)默认也很大。千万不要依赖默认值。
6.5 Registrierung包内容没有做Prüfungen
如果Registrierung包是明文传输(例如直接发了 IMEI),在网络链路上可能被抓包篡改。对于安全性要求高的Szene,Registrierung包至少应该包含一个摘要或签名。最简单的做法:Ausrüstung用预置的对称密钥对 IMEI + Zeit戳做 HMAC,Der Server验证 HMAC 通过后才接受Registrierung。
七、排查清单
当 DTU 频繁离线时,按这个顺序排查:
| 步骤 | 检查项 | 方法 | 预期 |
|---|---|---|---|
| 1 | 心跳是否真的在发 | 抓Der Server侧日志/抓包 | 按设定的心跳周期稳定收zu |
| 2 | 心跳间隔 vs NAT 超时 | 对比心跳周期和运营商 NAT 超时 | 心跳周期 < NAT 超时 × 0.6 |
| 3 | Der Server是否回复心跳 | Ausrüstung侧抓日志 | 发出 “Q” 后收zu “A” |
| 4 | 断线后是否自动重连 | 拔掉 SIM 卡再插回 | DTU 自动重新建连 + Senden SieRegistrierung包 |
| 5 | Registrierung包是否Die一ZeitSenden Sie | 抓Der Server TCP-Verbindung hergestellt后的前几个包 | Die一个Daten包就是Registrierung包 |
| 6 | Der Server侧 TCP KeepAlive Parameter | `sysctl net.ipv4.tcp_keepalive_time` | ≤ 120 秒 |
| 7 | 运营商信Nr.强度 | DTU AT 指令 `AT+CSQ` | ≥ 15(低于 10 不稳定) |
| 8 | SIM 卡流Quantitätzu期 / 欠费 | 运营商后台查询 | 流Quantität充足、无欠费暂停 |
心跳和Registrierung包说起来概念很简单——定时发个包、表明自己是谁。但真正做起来,细节都在ParameterAuswahl和对故障模式的预判上。这篇Artikel给的那些数字(30 秒、60 秒、120 秒)不是随便写的——是根据国内三大运营商的 NAT 超时、4G 模组的功耗约束、Der Server资源开销三者的平衡点。你自己的项目如果Szene不一样,自己在测试环境里抓包验证。
有问题再聊。
Antwort veröffentlichen