3. 医疗通信协议与可靠性机制
医疗设备通信的可靠性,首先取决于协议本身在“传输语义”上的设计。HL7 v2、DICOM、IEEE 11073、MQTT、CoAP 这五类协议并非同一层面的竞争者:HL7 v2 面向临床业务消息交换,DICOM 面向医学影像对象与操作,IEEE 11073 面向床旁设备的实时生理数据建模,MQTT 与 CoAP 则是通用物联网传输协议,常被用作医疗网关的上行承载。理解它们的可靠性差异,必须从“确认、重传、序号、超时、心跳”这五个机制维度切入。
一、五类协议的可靠性机制对比
HL7 v2 采用消息级确认:接收方返回 ACK(AA 接受、AE 错误、AR 拒绝),发送方依据 ACK 决定是否重发。其 MSH-10 消息控制 ID 充当去重键,MSA-2 回显该 ID,使发送方能将 ACK 与请求配对。但 HL7 v2 本身不定义重传定时器,超时与重试通常由接口引擎(如 Mirth Connect)配置。
DICOM 的可靠性建立在关联(Association)之上。上层用 A-ASSOCIATE 建立连接,数据以 PDU 传输,每个 P-DATA-TF 携带 PDV,其消息控制头含 Message ID 与 PDU 长度。DICOM 的确认是“操作级”的:C-STORE 请求由 C-STORE-RSP 响应,状态码 0x0000 表示成功,0xA7xx 表示资源不足,0x0122 表示 SOP 类不支持。影像传输更依赖 TCP 的有序可靠交付,而非应用层重传。
IEEE 11073(以 11073-20601 为例)定义了 MDS/NU 对象模型与状态机。它使用 invoke-id 与 message-id 配对请求与响应,通过“确认类型”字段区分可靠与不可靠传输。连接建立后进入“关联”状态,超时未收到响应则回到“未关联”,需重新协商。其可靠性核心是“状态机 + 序号 + 超时”的组合。
MQTT 提供 QoS 0/1/2 三档。QoS 1 为“至少一次”,PUBLISH 带 Packet Identifier,接收方回 PUBACK;QoS 2 为“恰好一次”,经 PUBREC/PUBREL/PUBCOMP 四次握手。MQTT 还定义 Keep Alive 心跳:客户端在空闲时发送 PINGREQ,服务端回 PINGRESP,超过 1.5 倍 Keep Alive 未收到则判定断线。
CoAP 运行于 UDP,用 CON(可确认)与 NON(不可确认)区分可靠性。CON 消息带 Message ID,接收方回 ACK;若超时未收到 ACK,发送方按指数退避重传,默认 ACK_TIMEOUT 2 秒、MAX_RETRANSMIT 4 次。CoAP 还支持 Observe 机制,用于设备状态变化的持续推送。
二、确认与重传:从“发出去”到“确实收到”
确认机制解决的是“对方是否收到并处理”的问题。以 HL7 v2 为例,发送方构造 ORU^R01 消息,MSH-10 设为 MSG000123,接收方处理后返回 ACK,MSA-1=AA、MSA-2=MSG000123。若发送方在 30 秒内未收到 ACK,接口引擎可重发同一 MSH-10 的消息;接收方依据 MSA-2 识别重复,避免同一检验结果被二次入库。这就是“序号 + 去重”的典型配合。
MQTT 的 QoS 1 重传更直接:发送方发出 PUBLISH(Packet ID=42),若未收到 PUBACK,则在重传时置 DUP=1 并复用 Packet ID=42。接收方看到 DUP=1 且 Packet ID 已处理过,可丢弃重复消息。QoS 2 则通过 PUBREC/PUBREL/PUBCOMP 四步握手,确保“恰好一次”,代价是延迟与开销更高。对于输液泵的“启停指令”,QoS 2 更合适;对于体温的周期上报,QoS 0 或 1 已足够。
三、序号与超时:可靠性的时间维度
序号解决“顺序与重复”,超时解决“等待多久算失败”。CoAP 的默认参数是很好的教学样本:ACK_TIMEOUT=2 秒,ACK_RANDOM_FACTOR=1.5,MAX_RETRANSMIT=4。首次重传等待 2~3 秒,第二次约 4~6 秒,第三次约 8~12 秒,第四次约 16~24 秒,总耗时上限约 45 秒。若四次重传后仍无 ACK,则判定传输失败。这个“指数退避”策略避免了网络拥塞时的同步风暴。
IEEE 11073 的超时与状态机绑定:设备进入“关联”状态后,若在协商的响应超时内未收到对端响应,则回到“未关联”状态并重新发起关联。这种设计使床旁监护仪在网关重启后能自动恢复数据流,而不需要人工干预。
四、心跳与保活:发现“假连接”
TCP 连接可能因中间设备静默断开而处于“假连接”状态。MQTT 的 Keep Alive 是显式心跳:客户端设置 Keep Alive=60 秒,则在 60 秒空闲后发送 PINGREQ,服务端回 PINGRESP;若服务端在 1.5×60=90 秒内未收到任何报文,则断开该客户端并触发遗嘱消息(Will)。DICOM 则依赖 TCP Keepalive 与关联空闲超时,通常将空闲超时设为 300 秒,超时后主动释放关联。
五、协议选型对可靠性的影响
选型不是“越可靠越好”,而是“与业务风险匹配”。可参考以下判断:
- 影像传输:选 DICOM,依赖 TCP 有序交付与 C-STORE-RSP 状态码,重点配置关联超时与 PDU 大小。
- 检验结果回传:选 HL7 v2,重点配置 ACK 超时、重试次数与 MSH-10 去重。
- 床旁设备实时数据:选 IEEE 11073,重点配置关联超时与状态机恢复。
- 设备上行到云平台:选 MQTT,按数据重要性选 QoS,并设置 Keep Alive 与遗嘱消息。
- 低功耗传感器:选 CoAP,用 CON 保证关键指令,用 NON 承载周期数据,并设置 Observe 续订。
综上,医疗通信可靠性是“协议机制 + 参数配置 + 业务语义”三者的共同结果。确认决定是否重传,序号决定是否去重,超时决定何时放弃,心跳决定何时发现断连。把这四个机制与具体协议对应清楚,才能在网关、接口引擎与设备端做出一致且可验证的可靠性配置。