DICOM:DIMSE 超时如何在大实例上工作?

DICOM: How DIMSE Timeout work on big instances?

我的理解是两次连续的DIMSE通信(请求或响应)之间的超时是DIMSE超时。

因此,在MWL操作中,MWL SCU(建立连接和关联)发送MWL CFind请求。 SCP 应在 DIMSE 超时到期之前发送第一个响应。同样,每个下一个响应都应在 DIMSE 超时到期之前由 SCP 发送。

类似地,对于CStore操作,CStore SCU发送请求并且SCP应该在DIMSE超时到期之前响应。对于在该关联上发送的每个实例,都应该发生这种情况。

我的理解正确吗?

如果是,那么这对于需要很长时间(超过设置的 DIMSE 超时)才能完全传输的大型实例如何工作?

例如,CStore SCU 正在推送一个需要 1000 毫秒才能完全传输的实例(可以说是大尺寸多帧)。 SCP 和 SCU 上的 DIMSE 超时设置为 500 毫秒。这里的预期结果是什么? SCP或SCU会遇到DIMSE超时吗?

我认为这是因为操作仍在进行中,系统知道这一点并且没有超时,DIMSE 消息(正在进行中)仍在发送。 DIMSE 超时适用于系统在配置时间内未获得 DIMSE 响应的情况,例如机器从网络中消失。

此外,我相信大多数系统将使用非阻塞模式,因此不会在传输过程中超时。比如你发送了100张图片,98张后系统20小时没有收到新的图片,除非发送取消操作信号系统仍然会等待最后两张图片。

一个大对象的 DIMSE C-STORE 消息被拆分成多个 P-DATA 数据包(PDU,那些是通过网络发送的 TCP 数据包)。所以实际上,有两个超时适用:

  • DIMSE 超时。此超时发生在两个后续 DIMSE 消息之间
  • PDU 超时。这发生在两个后续 PDU 之间。

例如对于 C-STORE 服务:

  • 如果请求完全发送后(即所有帧传输完毕)SCP没有及时发送C-STORE响应 -> DIMSE超时
  • 如果在SCP发送对前一个对象的响应后SCU没有及时发送下一个C-STORE请求的第一个PDU -> DIMSE超时
  • 如果 SCU 发送的 2 个后续片段 (PDU) 之间的时间跨度超过 SCP 的预期 -> PDU 超时