
事務(wù)的概念非常難以理解,網(wǎng)上有很多這方面的資料,讀者可以查閱。
Transaction occurs between a client and a server and comprises all messages from the first request sent from the client to the server up to a final (non-1xx) response sent from the server to the client. If the request is INVITE and the final response is a non-2xx, the transaction also includes an ACK to the response. The ACK for a 2xx response to an INVITE request is a separate transaction.
這里的示例僅對(duì)事務(wù)加以簡(jiǎn)單說(shuō)明(RINGING 是 1xx 響應(yīng),OK是 2xx 響應(yīng),所以是兩個(gè)事務(wù)),非rfc3261官方資料。
在事務(wù)層上面的是事務(wù)用戶(TU)。每個(gè)SIP實(shí)體,除了無(wú)狀態(tài)代理都是一個(gè)事務(wù)用戶。當(dāng)一個(gè)TU希望發(fā)送一個(gè)請(qǐng)求時(shí),它會(huì)創(chuàng)建一個(gè)用戶事務(wù)實(shí)例,然后把這個(gè)實(shí)例傳遞給這個(gè)請(qǐng)求,并且攜帶目的地IP地址,端口和傳輸請(qǐng)求。一個(gè)創(chuàng)建了用戶事務(wù)的TU也可以取消這個(gè)用戶事務(wù)。當(dāng)用戶取消了一個(gè)事務(wù)時(shí),它會(huì)請(qǐng)求服務(wù)器停止進(jìn)一步的處理,變換到退出的狀態(tài),這個(gè)狀態(tài)是這個(gè)事務(wù)初始化前的退出狀態(tài),并且生成對(duì)這個(gè)事務(wù)生成錯(cuò)誤響應(yīng)消息。這個(gè)處理過(guò)程是通過(guò)一個(gè)CANCEL 請(qǐng)求來(lái)處理,它構(gòu)成了屬于自己的事務(wù),但是僅針對(duì)這個(gè)被取消的事務(wù)(Section 9)。
事務(wù)的處理包括了多種不同的狀態(tài),主要包括以下六種(非官方資料)狀態(tài):

- SIP 要素也就是用戶代理用戶測(cè),服務(wù)器,無(wú)狀態(tài)代理,有狀態(tài)代理和注冊(cè)。SIP要素包含了一個(gè)核心模塊,這個(gè)核心模塊來(lái)對(duì)各自其要素進(jìn)行區(qū)別處理。在核心要素模塊中,除了無(wú)狀態(tài)代理以外,其他的要素都是事務(wù)用戶。這里,UAC和UAS的核心處理流程越來(lái)于method。關(guān)于methods支持了多種規(guī)則和定義(Section 8)。對(duì)于UAS來(lái)說(shuō),這些規(guī)則控制請(qǐng)求的結(jié)構(gòu);對(duì)于UAS來(lái)說(shuō),這些規(guī)則控制請(qǐng)求的流程和生成響應(yīng)消息。因?yàn)椋?cè)在SIP協(xié)議中扮演著一個(gè)非常重要的角色,一個(gè)處理注冊(cè)的UAS會(huì)設(shè)定一個(gè)特別的名稱注冊(cè)。在Section 10中描述了UAC和UAS核心的對(duì)REGISTER method的處理方式。Section 11描述了UAC和UAS核心對(duì)OPTIONS method的處理方式,它決定UA的支持能力。
- 某些其他的請(qǐng)求是在dialog中發(fā)送。一個(gè)dialog是一個(gè)介于用戶代理之間的peer-to-peer SIP關(guān)系,這種關(guān)系存在于一定時(shí)間內(nèi)。這個(gè)dialog支持介于用戶代理之間的消息的順序傳遞和正確的請(qǐng)求路由。在這個(gè)細(xì)節(jié)規(guī)定中,INVITE method 是唯一的方法來(lái)創(chuàng)建dialog。當(dāng)一個(gè)UAC在dialog中發(fā)送一個(gè)請(qǐng)求時(shí),它會(huì)遵守一般的UAC規(guī)則,這些規(guī)則在Section 8會(huì)加以討論,它也會(huì)遵守 mid-dialog 請(qǐng)求時(shí)的規(guī)則。Section 12討論在dialog和表述它們的結(jié)構(gòu)和維護(hù)流程。
- 在SIP協(xié)議中,最重要的method是INVITE method,它用來(lái)創(chuàng)建參與方之間的會(huì)話。一個(gè)會(huì)話是參與方的匯總和它們之間通信的的媒體流交互。Section 13討論了如何實(shí)現(xiàn)會(huì)話發(fā)起,這些導(dǎo)致了一個(gè)或者多個(gè)SIP dialog生成。Section 14討論了如何在一個(gè)dialog中通過(guò)INVITE用法來(lái)修改會(huì)話屬性。最后,在section 15中討論如何結(jié)束一個(gè)會(huì)話。
- 章節(jié)8,10,11,12,13,14,和15的流程完整討論了UAcore(Section 9描述了取消流程,這個(gè)取消流程支持都支持UA core 和 proxy core)。Section 16討論代理的要素,這些要素支持了介于兩個(gè)用戶代理之間的信息路由。
參考資料:
https://www.rfc-editor.org/rfc/pdfrfc/rfc3262.txt.pdf
關(guān)注微信公眾號(hào):asterisk-cn,獲得有價(jià)值的Asterisk行業(yè)分享
Asterisk freepbx 中文官方論壇:http://bbs.freepbx.cn/forum.php
Asterisk freepbx技術(shù)文檔: www.freepbx.org.cn
融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com
Asterisk/FreePBX中國(guó)合作伙伴,官方qq技術(shù)分享群(3000千人):589995817