最近在研究DICOM工具,在网络链接的部分有点含糊,所以就啃了官方文档,以下为个人总结,文章就按照官方文档顺序介绍,其中有些不太重要的本文就忽略了。
-
DIMSE
1)首先,什么是DIMSE,官网上给出了答案:DICOM Message Service Element。其实就是客户端和服务端系统的总称;
2)DIMSE分为两个角色:
a.invoking DIMSE Service User;
b.performing DIMSE Service User; -
服务端和客户端的交互过程:
主要有4个过程:
a.request primitive
b.indication primitive
c.response primitive
d.confirmation primitive
-
交互模式:
有两种,同步和异步,这个一般的通讯都有的特性 -
交互协议(part8主讲):
主要有以下3个协议
a.A-ASSOCIATE,建立链接
b.A-RELEASE, 释放链接
c.A-ABORED, 中断连接 -
DIMSE中Services的两种instance:
a.DIMSE-N:those services applicable to Normalized SOP Instances
b.DIMSE-C:those services applicable to Composite SOP Instances
以下为具体提供的服务及对应的instance:
-
DIMSE-C(本文主要关注的部分):
C-STORE, C-FIND, C-GET, C-MOVE, C-ECHO这五种通讯协议都是在进行A-ASSOCIATE建立后,并且根据服务端返回是否支持的基础上,如果服务端不支持其中的一种协议,你发送了也会被拒绝。下面举个C-STORE的协议例子,如下:
没法送一次协议(如C-STORE)就会得到服务端的一次回复,C-STORE每次处理一个dcm文件,其中C-STORE,C-FIND, C-ECHO这三个命令的发送参数和返回参数基本都差不多,这里主要想说 C-GET, C-MOVE,这俩有几个附加参数,是接收图片数据,及丢失数量等,虽然只是可选参数,但是其实挺有用的,因为在PACS和DICOM节点上传输数据的图片量除了这里,其他协议都没有说明,协议如下:
-
应用:
我的问题是要知道两个dicom节点之间的通信协议,其实到这里如果你只用find,get等几个常用命令就掌握这些就可以了,本来还想截图抓包的,但是觉得貌似直接用DCMTK -d功能所有交互协议都打印出来了,所以就没有做这个工作。如果感兴趣,用DCMTK开一个SCP,然后开一个SCU用store穿一个dcm文件就能看见A-ASSOCIATE建立连接后,使用C-STORE协议传送数据,然后就A-RELEASE释放了链接。一步一步很清晰。
补充: