题记:
在过去的一年中一直坚持周末博客,整理工作与休闲比的点点滴滴。
新知识点、新技术的涉猎会单独成文,对于与DICOM相关的知识统一放在了DICOM医学图像处理 专栏里,事实上DICOM英文全称是Digital Imaging and Communications in Medicine,即医学数字成像和通信。这就表明DICOM标准至少应该分成图像处理和网路通信两大部分。
之前也探讨过专栏名称 的问题,总而言之因为历史原因和自身懒惰一直没有抽出精力再开一个专栏,暂且如此吧。
尽管没有又一次开专栏,可是为了方便大家分类查阅,在2015新一年里我将依照标题前缀来简单划分一下类别:与图像处理相关的,诸如压缩/解压缩、字段增删改、图像数据处理,专栏博文标题继续以原本的DICOM医学图像处理: 为前缀,而与DICOM网络传输相关的将前缀更换为更简洁的DICOM:。
背景:
之前博文中专门梳理过DICOM标准中与网络传输相关的内容(详情參见:DICOM医学图像处理:全面解析DICOM3.0标准中的通讯服务模块 、DICOM医学图像处理:DICOM网路传输 )。最近在又一次整理fo-dicom开发的PACS相关測试用例时,对fo-dicom和mDCM两个库进行了再一次比較,与此同一时候又一次翻阅了DICOM3.0标准中的部分章节,发觉之前以前忽略了当中的非常多细节。特编写此文。一来对之前该系列博文的疏忽和BUG进行补充修复。二来加深一下DICOM网络传输的了解。
PS: DICOM医学图像处理专栏中的每一篇文章成文之前,我都尽我所能查阅、翻译相关资料。编写、调试本地演示样例,以求文章的高质量。但毕竟个人时间和精力所限,博文中难免会有纰漏。建议阅读时请尽可能先浏览该主题的最新发表博文,因为那里往往会给出之前博文中的错误。另外假设发现问题欢迎留言或邮件交流。
DICOM网络传输:
DIMSE:
DICOM3.0标准的第7部分标题为“Message Exchange”。从标题能够看出第7部分着重介绍DICOM协议中的网络传输部分。官方对于该部分的介绍例如以下:
This Part of the DICOM Standard specifies the DICOM Message Service Element (DIMSE) . The DIMSE defines an Application Service Element (both the service and protocol) used by peer DICOM Application Entities for the purpose of exchanging medical images and related information.
The DIMSE provides its services by relying on the DIMSE protocol. The DIMSE protocol defines the encoding rules necessary to construct Messages. A Message is composed of a Command Set (defined in this part of the DICOM Standard) followed by a conditional Data Set (defined in PS 3.5).
依照之前DICOM医学图像处理:全面分析DICOM3.0标准中的通讯服务模块中的描写叙述,将DIMSE归类为表示层,用于指出DICOM协议中提供的各项基础服务,也就是DIMSE Protocol中规定的 服务原语 (Service Primitives)。为对等DICOM 应用实体(Application Entity)之间交流服务。
例如以下图所看到的:
这里所谓的DICOM Application Entity,从实际来看就是我们现实生活中看到的使用DICOM标准的各种软件或应用。也能够指安装此软件或应用的设备。从概念 来看,就是由DICOM3.0标准中的第3部分(Information Object Definitions)、第4部分(Service Class Specifications)、第5部分(Data Structure and Encoding)、第6部分(Data Dictionary)共同定义出的模型。
DIMSE中消息由指令(Command)和数据集(Data Set)构成,具体结构这里就不介绍了,有兴趣可翻阅DICOM3.0标准第7部分第6.3章节。这里我们主要介绍一下DIMSE协议规定的服务,为了更好地理解下文,在阅读之前请转到“知识点补充”一节。熟悉相关概念,了解彼此之间的差别。尤其是SCP(Service Class Provider)与DIMSE-Service-Provider、SCU(Service Class User)与DIMSE-Service-User。
DIMSE消息服务元素支持对等DIMSE-Service-User之间交互。当中对DIMSE-Service-User两方分别扮演invoking DIMSE-service-user和performing DIMSE-service-user角色。这与我们常提到的SCU和SCP类似。一方触发(invoking),一方响应(performing)。尽管两方扮演的角色不同。可是名称中都带有user,意思就是说两方都是DIMSE协议的使用者。这就是与传统SCU、SCPeasy混淆的地方。
具体的差别可參见“知识点补充”一节。
DIMSE提供的两种服务示意图例如以下:
DIMSE服务是在连接建立基础之上。即DIMSE层下方是DICOM Upper Layer Protocol层,关于DICOM Upper Layer协议的介绍在DICOM3.0标准中第8部分。
DICOM Upper Layer Service:
DICOM3.0标准第8部分标题为“Network Communication Support for Message Exchange”,该部分描写叙述了DICOM应用实体间用于通信(Communicaton)的通用服务(generic services)。
该类服务与OSI模型中的会话层、表示层和应用层相关,DICOM标准将其统一称之为UL Service。该服务是ACSE服务(Association Control Service Element)和OSI表示层服务的子集。
刚刚上文提到的DICOM标准第7部分中具体介绍怎样使用Upper Layer Service来完毕DICOM应用实体间的交互。
UL Service上层服务包含A-ASSOCIATE、A-RELEASE、A-ABORT、A-P-ABORT、P-DATA五种。例如以下图所看到的:
对于上图中的各种服务,DICOM3.0第8部分给出了具体定义,比如在对等DICOM实体间交互使用的各种參数。这里以A-ASSOCIATE为例简介一下,例如以下图所看到的:
上图是A-ASSOCIATE服务的整个流程,从图中能够更清晰、更直观的看出之前invoking DIMSE-service-user/performing DIMSE-service-user与SCU/SCP概念之间的差别,图中左右两側的Requestor和Acceptor(左右两側都是协议栈的上层N)相对于中间(中间是协议栈中的下层N-1)来说都是服务的使用者,即invoking DIMSE-service-user和performing DIMSE-service-user。而假设从服务实现角度来看一方是请求端(Requestor),一方是响应端(Acceptor)。也就是DICOM中最常见到的SCU和SCP。
DICOM Upper Layer Protocol for TCP/IP:
服务是建立和依托于协议之上的,DICOM标准第8部分第9章着重介绍了DICOM UL Service使用的协议。
UL Protocol建立在TCP/IP协议之上。在网络交互中DICOM上层实体(即DICOM UL entity)由系统指定的端口号来标定。
因此在通信过程中须要建立TCP连接,一个TCP链接应当仅仅支持一个且仅有一个DICOM UL Association。
DICOM Upper Layer State Machine:
与传统TCP连接建立类似,当DICOM上层实体欲建立一个链接时。会发出TRANSPORT CONNECT请求原语到TCP传输层。一旦接收到TCP传输层的连接确认语义。此时会在建立起的TCP连接上发送A-ASSOCIATE-RQ PDU。
连接建立后。在TCP连接之上传输PDUs(PDU的结构具体介绍參照DICOM3.0标准第8部分第9.3节)遵循DICOM上层协议状态机 ,即DICOM Upper Layer State Machine 。
状态机(尤其是有限状态机,Finite State Machine)是软件project领域的一种重要工具。非常多应用的模型都是状态机,比如代码的编译。在《编译原理》一书中有对状态机的介绍。比如数字电路(单片机/嵌入式开发)中,各种事务和中断之间的时序逻辑设计;乃至我们当今使用的计算机就是使用有限状态机作为计算模型的等等。
百度百科中对于有限状态机FSM。Finite State Machine的介绍例如以下:
除了建模这里介绍的反应系统之外,有限状态自己主动机在非常多不同领域中是重要的,包含电子project、 语言学、计算机科学、哲学、生物学、数学和逻辑学。有限状态机是在自己主动机理论和计算理论中研究的一类自己主动机。在计算机科学中。有限状态机被广泛用于建模应用行为、硬件电路系统设计、软件project。编译器、网络协议、和计算与语言的研究。
DICOM UL Service Protocol是建立在TCP协议之上的,TCP协议通常使用一个具有11种状态的有限状态机11种状态的有限状态机来表示,在DICOM3.0标准第8部分第9.2章节中给出的DICOM Upper Layer State Machine使用了多大13中状态(State)来描写叙述整个流程。与其相关的事件(Event)有19种,可触发的动作(Action)多达28种,整个状态转移表相当复杂。例如以下图所看到的:
DICOM3.0标准中给出的是一张二维状态转移表,查看起来比較累,不够直观。下图是我手绘的状态机转换图。因为手头没有顺手的UML建模工具仅仅能手绘,大家就将就看看吧。
上图中的圆圈代表的是DICOM Upper Layer Protocol的各种状态,带箭头的连线是个状态之间的转换,箭头连线上的数字分别代表各种触发状态改变的事件。理解了上图就应该理解了整个DICOM通讯建立的基本流程,因为时间关系在本博文中就不正确该状态图具体展开了,兴许博文中会以fo-dicom、dcmtk为实例具体介绍状态图中的各种状态。
fo-dicom实例解说:
之前专栏里介绍过fo-dicom的设计结构。这里简单的说一下当中关于DICOM网络通讯服务的基类是DicomService。至于实例解说部分。这里先做个预告。下一篇博文中再具体介绍。
知识点补充:
协议Protocol:
协议Protocol:这里的协议指的是计算机领域的网络协议(其它非相关领域。诸如贸易之类的,请大家自行脑补。我不懂)。协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。由三个要素组成,即语义、语法和时序。百度百科的描写叙述为:
(1) 语义。语义是解释控制信息每一个部分的意义。它规定了须要发出何种控制信息。以及完毕的动作与做出什么样的响应。
(2) 语法。语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。
(3) 时序。时序是对事件发生顺序的具体说明。
(也可称为“同步”)。
人们形象地把这三个要素描写叙述为:语义表示要做什么,语法表示要怎么做。时序表示做的顺序。
服务原语Service Primitive:
服务原语(Service Primitives):用户和协议实体间的接口,实际上是一段程序代码,但其具有不可切割性。
通过服务原语能实现服务用户和服务提供者间的交流。服务原语仅仅有四种类型,各自是请求(Request)、指示(Indication)、响应(Response)、确认(Confirm)。
【注】: 与协议不同的是,服务原语用于服务提供者与服务用户,而协议是用于服务用户之间的通信.协议是控制对等实体之间通信的规则,是水平的。服务是下层通过层间接口向上层提供的功能,是垂直的。协议的实现保证了能够向上一层提供服务。要实现本层协议还需使用下层提供的服务。
DICOM中各种user/provider:
- DIMSE-service-user:that part of an application entity which makes use of the DICOM Message Service Element.
- DIMSE-service-provider: an abstraction of the totality of those entities which provide DIMSE services to peer DIMSE-service-users.
- invoking DIMSE-service-user:the DIMSE-service-user that invokes a DIMSE operation or notification.
- performing DIMSE-service-user:the DIMSE-service-user that performs a DIMSE operation or notification invoked by a peer DIMSE-service-user.
- Service Class User:role of an Application Entity that uses a DICOM network service;typically, a client. Examples: imaging modality (image storage SCU, and modality worklist SCU),imaging workstation (image query/retrieve SCU)
- Service Class Provider: role of an Application Entity that provides a DICOM network service; typically, a server that performs operations requested by another Application Entity(Service Class User). Examples: Picture Archiving and Communication System (image storage SCP, and image query/retrieve SCP), Radiology Information System (modality worklist SCP).
【注】: 要区分invoking DIMSE-service-user/performing DIMSE-service-user与Service Class SCU/Service Class SCP就须要提到上文中的协议(Protocol)和服务(Service)。以OSI开放模型中的七层协议为例,invoking DIMSE-service-user/performing DIMSE-service-user的命名方式是以服务和协议角度出发。模型上层依赖于模型下层,在对等实体中全部对等实体两端的DIMSE上层(DIMSE-service-user)都是DIMSE下层(DIMSE-service-provider)服务的使用者。Service Class SCU/Service Class SCP是从现实建模角度出发。将DICOM网络通信对等实体两端分别看成服务使用者和服务提供者。
状态机State Machine:
状态机中的状态(State):状态,State,就是一个系统在其生命周期中某一时刻的执行情况。此时系统会执行一些动作,或者等待一些外部输入。
状态机中的事件(Event):事件,Event,就是在一定时间和空间上发生的对系统有意义的事情。
状态机中的动作(Action):当一个事件被状态机系统分发。即响应该事件。此刻系统会通过相关动作来完毕响应。
作者:zssure@163.com
时间:2015-03-15
版权声明:本文zssure原创文章,转载请注明出处,不得未经同意转载。