在RFC3261中,SIP協(xié)議規定了很多的定義,這些定義有著(zhù)非常明確的具體內容,讀者必須非常清晰地了解這些定義的實(shí)際含義,方便自己學(xué)習或者和其他技術(shù)人員進(jìn)行有效溝通。另外,一些定義在使用過(guò)程中又非常靈活,相互交叉,甚至于做了進(jìn)一步的拓展和延伸。因此,很多讀者在學(xué)習SIP技術(shù)時(shí)感覺(jué)到云山霧罩,非常困惑。為了能夠非常清楚了解其技術(shù)脈絡(luò ),在學(xué)習過(guò)程中,我們必須從最基本的或者最核心的部分開(kāi)始學(xué)習。外面知道,任何技術(shù),無(wú)論多么復雜的技術(shù)架構,它一定有基本的基礎核心構成,然后才能延伸出周邊的技術(shù)和其業(yè)務(wù)場(chǎng)景。筆者希望大家在SIP學(xué)習中也同樣遵循這樣的原則。讀者最好花費一點(diǎn)時(shí)間首先掌握必要的核心的內容,然后在逐步擴展你的學(xué)習內容。根據筆者以前的學(xué)習經(jīng)驗,這里筆者列出了幾個(gè)需要首先掌握的重要知識點(diǎn),通過(guò)其基本知識點(diǎn)我們再未來(lái)再做進(jìn)一步的控制學(xué)習。這些基本的知識點(diǎn)包括關(guān)于用戶(hù)代理的定義使用,SIP呼叫中的dialog的定義,SIP核心技術(shù)架構介紹。
1、什么是SIP用戶(hù)代理-UA
在SIP協(xié)議中,有幾個(gè)非常重要的邏輯概念需要讀者有一定的了解。這幾個(gè)基本的概念涉及到了具體的呼叫發(fā)起和接收的流程和實(shí)體(呼叫參與者)。這幾個(gè)基本的概念經(jīng)常出現在各種關(guān)于SIP協(xié)議的介紹中,它們具體包括:用戶(hù)代理客戶(hù)端(User Agent Client (UAC)),用戶(hù)代理服務(wù)器端(User Agent Server (UAS))和用戶(hù)代理(UA)。
在SIP官方早期規范版本(RFC2543)中,以上三個(gè)定義和SIP當前使用的版本(RFC3261)中關(guān)于以上三個(gè)定義有了一定的區別,同時(shí)在RFC3261中增加了Back-to-Back User Agent(B2BUA-背靠背代理)的新定義,這是SIP協(xié)議一個(gè)非常大的突破。如果我們穿越回去當時(shí)的技術(shù)環(huán)境,我們也可以理解其發(fā)展路徑。因為在SIP技術(shù)興起的時(shí)候,很多技術(shù)應用還沒(méi)有完全充分地在實(shí)際場(chǎng)景中發(fā)揮,很多功能概念使用也不是非常具體。因此,協(xié)議本身沒(méi)有非常具體的關(guān)于使用中遇到的處理難題。不過(guò)大概3年短短的技術(shù)發(fā)展,SIP協(xié)議又變得非常具體化,對某些定義有了新的更新。特別是在RFC3261中增加了Back-to-Back User Agent(B2BUA-背靠背代理),個(gè)人認為是SIP技術(shù)的核心作者們一個(gè)非常聰明的設計理念。當然,B2BUA也讓很多SIP協(xié)議初學(xué)者非常困惑。如果讀者需要進(jìn)一步了解關(guān)于B2BUA的話(huà),除了參考RFC3261以外,讀者也應該查閱B2BUA的定義-RFC7091。在RFC7091中對B2BUA有著(zhù)非常明確的定義。
為了說(shuō)明前面幾個(gè)核心概念,我們不妨對這些概念做一個(gè)簡(jiǎn)單的高度抽象的說(shuō)明。我們通過(guò)高度抽象才能逐步發(fā)現其細化和具體化概念和區別。從早期SIP協(xié)議RFC2543和當前SIP版本RFC3261中我們可以看出,在目前使用的SIP規范中更加細化了UAC和UAS以及相關(guān)的core的定義。另外,其描述也發(fā)生了很多變化,例如,邏輯實(shí)體的描述的引入,而不是籠統稱(chēng)之為application。再例如,增加了B2BUA的定義,并且明確了B2BUA的4種角色(參考RFC7091,包括其中一個(gè)角色SBC)。如果讀者需要對SBC做進(jìn)一步理解的話(huà),可以參考筆者文檔:
讀者一定要非常明確和理解這些描述不同,如果閱讀中文版本的詳解時(shí),更加需要真正理解中文含義的意義,避免含糊不清地了解這些內容,似是而非的理解規范。很多時(shí)候,因為開(kāi)發(fā)人員或者維護人員對規范理解不準確,技術(shù)人員和對方廠(chǎng)家的溝通或者調試過(guò)程中就會(huì )出現互相推諉扯皮的事情。

通過(guò)以上背景說(shuō)明,我們按照相對比較官方的定義-RFC3261(盡量做到規范和準確,讀者可能感覺(jué)到非常枯燥),重點(diǎn)針對用戶(hù)代理客戶(hù)端,用戶(hù)代理服務(wù)器端和用戶(hù)代理加以簡(jiǎn)單介紹。

根據RFC3261規范定義,UA,UAC和UAS分別負責各自的任務(wù),同時(shí)在必要時(shí)做角色切換任務(wù)。UA(User Agent),通常我們說(shuō)到的UA是用戶(hù)代理,一個(gè)邏輯實(shí)體,這里通常是抽象的一個(gè)總稱(chēng)(UAC和UAS)。兩者之間的具體特點(diǎn)如下:
- UAC(user agent client) 用戶(hù)代理客戶(hù)端,它是一個(gè)邏輯實(shí)體,生成請求。如果它收到請求,它會(huì )假設自己為UAS做進(jìn)一步的UAS流程處理。
- UAS(user agent server)用戶(hù)代理服務(wù)器端,它是一個(gè)邏輯實(shí)體,它針對請求生成響應。如果它發(fā)起請求,它會(huì )假設自己為UAC做進(jìn)一步的UAC流程處理。
按照以上規范的說(shuō)明,我們就知道,UA是高于以上兩種實(shí)體,并且可以在必要時(shí)充當其任何一種角色的。進(jìn)一步講,我們稍晚將提到的B2BUA就是其角色延伸,為了同時(shí)滿(mǎn)足以上兩種用戶(hù)代理的功能要求,它必須時(shí)刻進(jìn)行角色切換產(chǎn)生請求,產(chǎn)生響應響應。
按照上面的圖例來(lái)看,兩個(gè)簡(jiǎn)單的SIP終端是否可以直接呼叫?很多基礎用戶(hù)也經(jīng)常遇到這樣的問(wèn)題。在純SIP一般的同一網(wǎng)絡(luò )環(huán)境中,兩個(gè)SIP終端可以不需要任何中間服務(wù)器,或者媒體服務(wù)器包括我們經(jīng)常討論的IPPBX,兩個(gè)SIP終端仍然可以直接通過(guò)輸入對方的IP地址實(shí)現呼叫。但是,這種操作流程對一般的企業(yè)通信業(yè)務(wù)沒(méi)有非常大的意義,一般用戶(hù)也不會(huì )這樣操作。首先,IP地址不方便記憶,IP地址有時(shí)可能發(fā)生變化,同時(shí)在物理話(huà)機直接輸入IP地址也比較麻煩。因此,這種操作在理論上可以實(shí)現,在實(shí)際業(yè)務(wù)操作中,呼叫一般都是通過(guò)中間服務(wù)器注冊,然后通過(guò)設置的號碼對對方呼叫。
2、關(guān)于SIP dialog介紹
在SIP呼叫過(guò)程中,dialog關(guān)系到整個(gè)呼叫的實(shí)現。它用來(lái)關(guān)聯(lián)雙方呼叫端的關(guān)系。另外,在呼叫過(guò)程中,還要涉及事務(wù)的關(guān)聯(lián)。筆者在以前的歷史文檔中對dialog和事務(wù)等之間的關(guān)系有非常詳細的介紹,讀者可以參考。

我們了解了其基本含義有助于我們進(jìn)行后續章節的討論。建議讀者通過(guò)以下鏈接查看其詳細說(shuō)明,這里不再重新討論:
再論SIP呼叫中的Call,Dialog和Transaction
3、SIP 系統技術(shù)架構
讀者除了了解以上介紹的一些基本的SIP核心概念以外,讀者需要了解SIP系統的技術(shù)架構。本質(zhì)上SIP協(xié)議基本涉及的是運營(yíng)的呼叫環(huán)境。所以在絕大部分的具體的環(huán)境中,一般示例都是以代理呼叫的處理流程來(lái)介紹RFC3261協(xié)議,而不是以企業(yè)用戶(hù)使用的B2BUA的IPPBX方式介紹SIP協(xié)議,所以很多讀者在實(shí)際應用環(huán)境中,覺(jué)得簡(jiǎn)單的SIP呼叫和實(shí)際應用場(chǎng)景不匹配,讀者感覺(jué)也非常困難獲得完整的學(xué)習脈絡(luò )。另外,在當前的應用環(huán)境中,企業(yè)通信系統或者SIP/IPPBX有經(jīng)常使用媒體服務(wù)器的應用,因此,很多功能支持方面就相互交叉,非常靈活,這就帶來(lái)了新的學(xué)習難度。

通過(guò)SIP系統技術(shù)架構圖例可以看出,在整個(gè)系統架構中,比較核心的模塊包括以下幾個(gè)部分:
- UA 終端,User Agent 可以是軟電話(huà),手機app,物理話(huà)機等SIP終端
- 兩個(gè)SIP代理服務(wù)器,負責發(fā)現UA,并且在它們之間創(chuàng )建會(huì )話(huà)流程
- SIP注冊服務(wù)處理UA在網(wǎng)絡(luò )中的注冊
- SIP定位服務(wù),包括已注冊的UA消息,和其定位消息。很多時(shí)候,注冊服務(wù)和定位服務(wù)可能是同一服務(wù)器
- VOIP/SIP gateway負責處理SIP網(wǎng)絡(luò )和傳統PSTN網(wǎng)絡(luò )的信令轉換
- IPPBX/傳統PBX負責處理PBX的終端
- IPPBX終端包傳統物理FXS話(huà)機,SIP話(huà)機和傳真機等
- 傳統PBX連接PSTN電信運營(yíng)商
如果讀者需要對SIP注冊和定位有興趣的話(huà),可以閱讀筆者的歷史文檔:
在以上文檔中對SIP注冊和定位處理的具體流程有非常深入的討論。
在終端的連接方面,SIP用戶(hù)是通過(guò)URI或者AOR地址進(jìn)行確認的。關(guān)于URI的定義,網(wǎng)絡(luò )上有很多的介紹,讀者可以做進(jìn)一步的了解。通過(guò)URI地址可以和各種終端進(jìn)行通信。一個(gè)URI可以綁定多個(gè)終端,可以支持APP,軟電話(huà)和物理SIP終端等形式。SIP的URI格式看起來(lái)和我們通常使用的email格式相同,其格式基本構成為user@host的形式。user可以是用戶(hù)名稱(chēng)或者電話(huà)號碼格式,host可以是域名或者IP地址格式。user可以通過(guò)DNS服務(wù)來(lái)實(shí)現語(yǔ)音,視頻,郵件等能力的支持,具體的示例如下:

4、總結
在本文章中,筆者介紹了UA以及UAS,UAC的基本定義和關(guān)于SIP協(xié)議中兩個(gè)版本中的一些區別,重點(diǎn)說(shuō)明了關(guān)于背靠背代理的定義以及其靈活性,然后筆者介紹了SIP協(xié)議中比較重要的核心概念,dialog的示例以及SIP系統技術(shù)架構的結果重要模塊。為了方便讀者能夠深入了解其中某些概念,建議讀者參考筆者的相關(guān)鏈接,結合歷史文檔來(lái)掌握其每個(gè)概念的完整性。
通過(guò)以上基本的介紹,讀者可能會(huì )對SIP技術(shù)有一個(gè)基本的脈絡(luò ),方便我們在后續的章節中更加詳細介紹SIP注冊服務(wù)器,定位服務(wù)器等內容的介紹。
參考資料:
- https://datatracker.ietf.org/doc/html/rfc7092
- https://www.ietf.org/rfc/rfc2543
- https://www.ietf.org/rfc/rfc3261.txt
- www.dinstar.cn