
事務(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.
這里的示例僅對事務(wù)加以簡(jiǎn)單說(shuō)明(RINGING 是 1xx 響應,OK是 2xx 響應,所以是兩個(gè)事務(wù)),非rfc3261官方資料。
在事務(wù)層上面的是事務(wù)用戶(hù)(TU)。每個(gè)SIP實(shí)體,除了無(wú)狀態(tài)代理都是一個(gè)事務(wù)用戶(hù)。當一個(gè)TU希望發(fā)送一個(gè)請求時(shí),它會(huì )創(chuàng )建一個(gè)用戶(hù)事務(wù)實(shí)例,然后把這個(gè)實(shí)例傳遞給這個(gè)請求,并且攜帶目的地IP地址,端口和傳輸請求。一個(gè)創(chuàng )建了用戶(hù)事務(wù)的TU也可以取消這個(gè)用戶(hù)事務(wù)。當用戶(hù)取消了一個(gè)事務(wù)時(shí),它會(huì )請求服務(wù)器停止進(jìn)一步的處理,變換到退出的狀態(tài),這個(gè)狀態(tài)是這個(gè)事務(wù)初始化前的退出狀態(tài),并且生成對這個(gè)事務(wù)生成錯誤響應消息。這個(gè)處理過(guò)程是通過(guò)一個(gè)CANCEL 請求來(lái)處理,它構成了屬于自己的事務(wù),但是僅針對這個(gè)被取消的事務(wù)(Section 9)。
事務(wù)的處理包括了多種不同的狀態(tài),主要包括以下六種(非官方資料)狀態(tài):

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