本站小編為你精心準(zhǔn)備了醫(yī)學(xué)數(shù)字與通訊協(xié)議實(shí)現(xiàn)策略參考范文,愿這些范文能點(diǎn)燃您思維的火花,激發(fā)您的寫作靈感。歡迎深入閱讀并收藏。
1DICOM上層協(xié)議(ULP)
ULP處于DICOM應(yīng)用實(shí)體的底層,從開放系統(tǒng)互聯(lián)(OSI)分層模型看,它包括了對(duì)話層、表示層、應(yīng)用層的應(yīng)用控制服務(wù)元素(ACSE)部分[1].為了體現(xiàn)ULP跨越了多個(gè)OSI分層這一事實(shí),圖1中用斜線部分表示它.ULP的作用主要包括兩方面:①提供應(yīng)用層的公共服務(wù)元素ACSE,具體包括在對(duì)等應(yīng)用實(shí)體間建立關(guān)聯(lián),正常釋放關(guān)聯(lián),異常中止關(guān)聯(lián)等功能;②為DIMSE提供網(wǎng)絡(luò)數(shù)據(jù)傳輸支持,也就是以ULP規(guī)定的協(xié)議數(shù)據(jù)包格式傳送或接收DIMSE的命令流與數(shù)據(jù)流.ULP是應(yīng)用層調(diào)用網(wǎng)絡(luò)服務(wù)的功能接口,實(shí)際中廣泛使用基于傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議(TCP/IP)的4層結(jié)構(gòu)模型,此時(shí)ULP直接調(diào)用TCP提供的網(wǎng)絡(luò)傳輸功能構(gòu)建本層服務(wù),供應(yīng)用層調(diào)用.
2ULP提供的服務(wù)
ULP提供的4種服務(wù)及對(duì)應(yīng)的服務(wù)對(duì)象.A-ASSOCIATE服務(wù)用來在對(duì)等應(yīng)用實(shí)體間建立關(guān)聯(lián),它是一個(gè)證實(shí)性服務(wù).在關(guān)聯(lián)建立階段,雙方需要交換包括應(yīng)用上下文、表示上下文、DIMSE特定的用戶信息等初始化信息,因此建立關(guān)聯(lián)也是個(gè)協(xié)商過程.一旦關(guān)聯(lián)建立,則雙方應(yīng)用實(shí)體對(duì)本次關(guān)聯(lián)中的應(yīng)用層服務(wù)項(xiàng)目的范圍及相關(guān)的參數(shù)就有了約定,這樣就保證了后繼DIMSE消息交互的順利進(jìn)行.A-RELEASE服務(wù)用來在對(duì)等的應(yīng)用實(shí)體間正常有序地結(jié)束關(guān)聯(lián),它也是一個(gè)證實(shí)性服務(wù).使用A-RELEASE結(jié)束關(guān)聯(lián)不會(huì)造成任何應(yīng)用層數(shù)據(jù)的丟失,因此是一種優(yōu)雅的中止方式.A-ABORT服務(wù)用來異常中止應(yīng)用實(shí)體關(guān)聯(lián),它是一個(gè)非證實(shí)性服務(wù).A-ABORT擁有3個(gè)服務(wù)使用者,這意味著應(yīng)用實(shí)體、DIMSE或ULP這3個(gè)層次中的任何實(shí)體一旦遇到異常情況都可利用A-ABORT強(qiáng)行中止應(yīng)用關(guān)聯(lián),本服務(wù)可能造成各層待傳數(shù)據(jù)與暫存數(shù)據(jù)的丟失.P-DATA-TF服務(wù)用來向?qū)Φ葢?yīng)用實(shí)體傳送DIMSE命令流與數(shù)據(jù)流,它是一個(gè)非證實(shí)性服務(wù).P-DATA-TF服務(wù)是應(yīng)用實(shí)體獲取網(wǎng)絡(luò)傳輸服務(wù)的邏輯接口,應(yīng)用實(shí)體的某一方一旦使用該服務(wù)把DIMSE消息流傳送出去,就可以認(rèn)為對(duì)方應(yīng)用實(shí)體能準(zhǔn)確無誤地接收到此消息.3ULP的協(xié)議數(shù)據(jù)單元(PDU)及其實(shí)現(xiàn)ULP一共提供了7個(gè)PDU來實(shí)現(xiàn)上述4種服務(wù).DICOM的所有通信最終就是依靠上述7個(gè)PDU來完成的[4].PDU承擔(dān)實(shí)現(xiàn)ULP的任務(wù),而PDU本身必須依賴下層網(wǎng)絡(luò)提供的服務(wù)接口.雖然DICOM標(biāo)準(zhǔn)提供了基于OSI與TCP/IP兩種可能的實(shí)現(xiàn)方式,實(shí)際中,一般都采用基于TCP/IP的4層模式,因此首先必須充分了解TCP/IP提供的網(wǎng)絡(luò)服務(wù)和獲取這些服務(wù)的調(diào)用接口.在此基礎(chǔ)上,本文給出了有代表性的PDU實(shí)現(xiàn)實(shí)例.
3.1TCP/IP協(xié)議及套接字接口
TCP/IP是應(yīng)用最廣泛的傳輸層/網(wǎng)絡(luò)層協(xié)議,也是事實(shí)上的工業(yè)標(biāo)準(zhǔn)[5].TCP是一種面向連接的可靠協(xié)議.在復(fù)雜的互聯(lián)網(wǎng)上,它完全屏蔽了任意兩個(gè)端點(diǎn)間進(jìn)行通信的細(xì)節(jié),提供了端對(duì)端有序、無差錯(cuò)流式的數(shù)據(jù)傳輸功能.獲取TCP服務(wù)的編程接口是套接字.套接字鎖定了網(wǎng)絡(luò)層地址(IP地址)與傳輸層地址(端口號(hào)),它是對(duì)一個(gè)通信端點(diǎn)的抽象[6].ULP所有的PDU數(shù)據(jù)交互最終需要借套接字來實(shí)現(xiàn).
3.2PDU實(shí)現(xiàn)實(shí)例
ULP中使用最頻繁的PDU是P-DATA-TF,所有的DIMSE消息都是通過它進(jìn)行傳送和接收,P-DATA-TFPDU的最大長(zhǎng)度必須符合應(yīng)用關(guān)聯(lián)建立時(shí)雙方的協(xié)商結(jié)果.如圖3所示,每一個(gè)PDU封裝了若干個(gè)表示數(shù)據(jù)值(PDV),每一個(gè)PDV由一個(gè)字節(jié)的表示上下文ID、一個(gè)字節(jié)的消息控制頭與一個(gè)DIMSE命令或數(shù)據(jù)片段組成.表示上下文ID在關(guān)聯(lián)建立協(xié)商時(shí)確認(rèn),因此只在某次特定的應(yīng)用關(guān)聯(lián)內(nèi)有效,它指示本PDV所載DIMSE消息所屬的服務(wù)類.控制頭用來指示本PDV是命令還是數(shù)據(jù),以及是否是本類型PDV(命令或數(shù)據(jù))中的最后一個(gè).一個(gè)DIMSE消息包可能被分為若干片段,每個(gè)P-DATA-TFPDU可以攜帶一個(gè)或若干個(gè)片段(受PDU最大長(zhǎng)度值限制).表示上下文ID與消息控制頭保證了對(duì)方ULP實(shí)體能準(zhǔn)確無誤地重組DIMSE消息包.
4ULP的實(shí)現(xiàn)
ULP借助于ULP的PDU來實(shí)現(xiàn),而PDU依靠套接字來完成實(shí)際的網(wǎng)絡(luò)數(shù)據(jù)傳輸,這只是靜態(tài)的描述.在一定的上下文環(huán)境下,ULP實(shí)現(xiàn)還包括對(duì)PDU的解釋以及在解釋基礎(chǔ)上PDU之間的交互,所有的服務(wù)功能通過解釋與交互體現(xiàn)出來.ULP負(fù)責(zé)把PDU中的連續(xù)字節(jié)流解釋成為有意義的協(xié)議控制信息,并分離出DIMSE流(如果存在的話).以處理應(yīng)用關(guān)聯(lián)請(qǐng)求為例,該服務(wù)涉及的PDU中沒有DIMSE負(fù)載,實(shí)際上只有P-DATA-TFPDU中才包含ULP不能解釋的DIMSE流,因此需要向DIMSE層遞交.顯然,A-RELEASE與A-ABORT的實(shí)現(xiàn)要比A-ASSOCIATE簡(jiǎn)單,因?yàn)樗鼈儽緦拥目刂菩畔⒑苌?且不需要向鄰接上層遞交數(shù)據(jù).如圖4所示,一旦請(qǐng)求DICOM服務(wù)的客戶端完成TCP連接,它立即發(fā)送A-ASSOCIATE-RQPDU,該P(yáng)DU是一個(gè)有序的數(shù)據(jù)流塊,按照ULP規(guī)定存放著各種協(xié)商數(shù)據(jù),服務(wù)器端從該P(yáng)DU數(shù)據(jù)流中取出相關(guān)內(nèi)容獲得語義解釋,就可決定是否接受本次關(guān)聯(lián)請(qǐng)求以及本次關(guān)聯(lián)中的服務(wù)內(nèi)容.表示上下文表征應(yīng)用層協(xié)議中定義的抽象語法和能滿足抽象語法的傳輸語法之間的聯(lián)系,每個(gè)抽象語法和能對(duì)它進(jìn)行編碼的傳輸語法組合起來就構(gòu)成一個(gè)表示上下文.用戶信息包括最大PDU長(zhǎng)度、實(shí)現(xiàn)類UID、實(shí)現(xiàn)版本名稱等.
5ULP實(shí)現(xiàn)的優(yōu)化
一個(gè)優(yōu)秀的協(xié)議實(shí)現(xiàn),必須考慮執(zhí)行效率.一個(gè)良好的設(shè)計(jì)除了做到快速分配存儲(chǔ)空間外,尤其要避免分組在各個(gè)協(xié)議軟件之間移動(dòng)時(shí)的數(shù)據(jù)復(fù)制[7].對(duì)于DICOM協(xié)議這種以醫(yī)學(xué)圖像為主要傳輸對(duì)象.數(shù)據(jù)流量特別大的應(yīng)用協(xié)議,協(xié)議實(shí)現(xiàn)效率在很大程度上取決于數(shù)據(jù)在不同層移動(dòng)時(shí)的復(fù)制頻度,避免數(shù)據(jù)移動(dòng)時(shí)的復(fù)制操作是ULP實(shí)現(xiàn)優(yōu)化總的著眼點(diǎn).DICOM應(yīng)用層數(shù)據(jù)的移動(dòng)過程如圖5所示,從打包過程看,應(yīng)用層數(shù)據(jù)至少移動(dòng)了4次,即應(yīng)用層-PDV-PDU-TCP內(nèi)部緩存-TCP數(shù)據(jù)包.如果每次移動(dòng)都伴隨數(shù)據(jù)復(fù)制,雖然流程清晰但是實(shí)現(xiàn)效率一定較低.注意到底層TCP支持的是面向無邊界的數(shù)據(jù)流,我們可以把數(shù)據(jù)在形式上打包封裝發(fā)送的過程等效為封裝頭信息與封裝體信息的次序發(fā)送,因此并不需要形成真正在內(nèi)存中連續(xù)存放的PDV或PDU數(shù)據(jù)包.為了避免ULPPDU數(shù)據(jù)到TCP內(nèi)部緩存的復(fù)制,可以使用套接字接口新支持的重疊I/O機(jī)制,它把調(diào)用者提供的數(shù)據(jù)緩存區(qū)的內(nèi)容直接填充到TCP數(shù)據(jù)包而繞過TCP內(nèi)部緩存.同樣在接收時(shí),可以把TCP數(shù)據(jù)包中的數(shù)據(jù)直接復(fù)制到調(diào)用者提供的緩存區(qū).可見,在滿足ULP封裝規(guī)范要求的前提下,DIMSE消息數(shù)據(jù)可以做到直接傳入TCP數(shù)據(jù)包,這樣大大提高了數(shù)據(jù)發(fā)送效率.拆包過程是去掉各種封裝頭提取DIMSE消息數(shù)據(jù)的過程.封裝頭中存放著足夠的控制信息,用來指導(dǎo)后繼動(dòng)作(比如命令集是否接收完,數(shù)據(jù)集是否接收完,還剩多少數(shù)據(jù)尚待接收等等),可以使用一個(gè)包括首地址指針與數(shù)據(jù)長(zhǎng)度的結(jié)構(gòu)來描述一個(gè)數(shù)據(jù)片段,那么整個(gè)DIMSE消息數(shù)據(jù)就是一個(gè)上述結(jié)構(gòu)的指針鏈表.這種存儲(chǔ)塊鏈表避免了接收時(shí)的數(shù)據(jù)復(fù)制,如果應(yīng)用層需要,把它轉(zhuǎn)化或部分轉(zhuǎn)化為平面空間存儲(chǔ)也很容易.在上述打包與拆包的實(shí)現(xiàn)過程中,為了避免數(shù)據(jù)復(fù)制,代價(jià)是需要多次調(diào)用底層的套接字接口.盡管這種調(diào)用開銷與大量的數(shù)據(jù)復(fù)制開銷相比是值得的,但還是有辦法克服這個(gè)不足:利用套接字提供的分散與聚集I/O機(jī)制,使若干個(gè)孤立存儲(chǔ)區(qū)的內(nèi)容可以通過一次套接字調(diào)用發(fā)送或接收,避免了多次調(diào)用孤立存儲(chǔ)區(qū)的開銷.例如,某病人進(jìn)行X射線放射熒光成像(RF),一般一次生成7~8個(gè)RF圖像,每個(gè)圖像約為2MB大小,共計(jì)14~16MB,現(xiàn)在使用DICOM3•0中的C-STORE服務(wù)類把圖像數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送到某個(gè)歸檔服務(wù)器,表3給出了兩種實(shí)現(xiàn)方式的比較.
6結(jié)論
按照本文對(duì)DICOM3•0ULP設(shè)計(jì)與實(shí)現(xiàn)的理解,已經(jīng)開發(fā)出完整的ULP實(shí)現(xiàn)模塊,并與美國(guó)Picker公司D-MaxDigitalSystem提供的DI-COM3•0接口順利進(jìn)行了通信,實(shí)現(xiàn)了它的一致性聲明中包含的所有應(yīng)用層服務(wù),從而證明了本文所述ULP設(shè)計(jì)與實(shí)現(xiàn)方案的可行性與有效性.