• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
    您當前的位置是:  首頁(yè) > 資訊 > 文章精選 >
     首頁(yè) > 資訊 > 文章精選 >

    深入理解SIP服務(wù)器的注冊和定位服務(wù)流程

    2019-03-19 09:12:59   作者:james.zhu   來(lái)源:CTI論壇   評論:0  點(diǎn)擊:


      我們在實(shí)際環(huán)境中看到很多關(guān)于SIP終端之間的呼叫示例。筆者在很多文章中也使用了兩個(gè)SIP終端之間的點(diǎn)對點(diǎn)呼叫作為參考示例。大家知道,兩個(gè)SIP終端的呼叫則要求雙方必須滿(mǎn)足幾個(gè)條件:雙方必須知道對方的IP地址和端口,雙方的編碼必須是相同的。
      這種使用場(chǎng)景是最簡(jiǎn)單的場(chǎng)景,不會(huì )使用在實(shí)際的復雜業(yè)務(wù)場(chǎng)景中。因為,在實(shí)際的業(yè)務(wù)場(chǎng)景中,可能多種SIP終端部署在完全不同的場(chǎng)景,其位置和其他屬性支持能力也可能不同。因此,如何實(shí)現雙方的呼叫看似是一個(gè)非常簡(jiǎn)單的問(wèn)題,但是如果讀者想真正了解其相關(guān)的概念和背后處理機制的話(huà),可能需要比較深入的研究學(xué)習。這些涉及的領(lǐng)域和概念包括SIP服務(wù)器的必要性,AOR和Contact的概念和相互關(guān)系,SIP的注冊服務(wù)處理流程,SIP的定位服務(wù)的處理流程,注冊超時(shí)處理機制,SIP注冊請求中的主要參數使用方式,關(guān)于SIP第三方注冊,AOR和Contacts的添加方式,多個(gè)Contacts呼叫對SIP定位服務(wù)的影響。現在,我們針對這些內容逐一加以討論。
      在討論下面的所有內容之前,筆者首先說(shuō)明一個(gè)和哲學(xué)相關(guān)的話(huà)題。筆者一直非常感嘆這個(gè)原理的博大精深。事實(shí)上,在我們討論的SIP協(xié)議和各種控制機制中,我們都有意無(wú)意地在應用這個(gè)哲學(xué)原理,那就是奧卡姆剃刀原理(和老子的某些思想非常相似,熟悉老子的朋友可以閱讀老子這方面的經(jīng)典)。今天,我們在后續的討論中,讀者可能可以感受到的每個(gè)流程設計的必要性和極簡(jiǎn)原則。否則,處理機制就會(huì )給其他的流程帶來(lái)負載和成本開(kāi)銷(xiāo),例如,我們后續可能涉及到ACK發(fā)送和100 Trying的討論。
      這個(gè)原理稱(chēng)為“如無(wú)必要,勿增實(shí)體”,即“簡(jiǎn)單有效原理”。正如他在《箴言書(shū)注》2卷15題說(shuō)“切勿浪費較多東西去做,用較少的東西,同樣可以做好的事情。”
      1、為什么需要SIP服務(wù)器
      在前面的介紹中,筆者介紹了SIP的簡(jiǎn)單的點(diǎn)對點(diǎn)呼叫流程,點(diǎn)對點(diǎn)呼叫必須獲悉雙方的IP地址和必須具有相同的表面。用戶(hù)需要手動(dòng)輸入對端的IP地址來(lái)執行呼叫。因此,點(diǎn)對點(diǎn)的呼叫方式不可能應用在復雜的IP通信領(lǐng)域中。另外,IP通信和傳統的PSTN的呼叫業(yè)務(wù)相比,PSTN交換機更多是以呼叫業(yè)務(wù)本身為中心的處理能力,而SIP服務(wù)器則側重于IP網(wǎng)絡(luò )的應用和服務(wù)能力支撐。所以為了滿(mǎn)足復雜環(huán)境的要求,實(shí)現多種融合通信/IP業(yè)務(wù)的需求,必須有一個(gè)SIP服務(wù)器來(lái)幫助處理終端的要求,監控終端的狀態(tài),實(shí)現SIP會(huì )話(huà)管理,并且SIP服務(wù)器端需要支持多種復雜的功能需求。根據RFC3261的規范和其拓展協(xié)議支持來(lái)看,SIP服務(wù)器需要支持示例中的說(shuō)描述的所有功能。
      這里說(shuō)明一下,比較規范的說(shuō)法,我們通常所說(shuō)的SIP服務(wù)器,應該包括了以上所有功能。一般情況下,我們說(shuō)的SIP服務(wù)器可能包括注冊,定位,IPPBX等應用服務(wù)。幾個(gè)服務(wù)可能完全封裝成了一臺服務(wù)器也可能是通過(guò)幾臺服務(wù)器獨立實(shí)現。很多廠(chǎng)家的SIP服務(wù)器是否支持以上所有功能,完全取決于廠(chǎng)家產(chǎn)品本身的支持能力。在實(shí)際的應用環(huán)境中,我們可能通常說(shuō)的也僅是一個(gè)IPPBX或者簡(jiǎn)單的應用服務(wù)。如果我們從一個(gè)非常龐大的網(wǎng)絡(luò )應用環(huán)境中看的話(huà),整個(gè)IP網(wǎng)絡(luò )支持了多種不同的SIP服務(wù)器應用,并且分布在不同的地方。網(wǎng)絡(luò )拓撲實(shí)現方式包括了,最底層模擬終端部署,SIP 電話(huà)分別通過(guò)電路交換和SIP中繼對接到SBC的訪(fǎng)問(wèn)控制層,然后和SIP 服務(wù)器對接,實(shí)現SIP 會(huì )話(huà)的管理。SIP服務(wù)器然后再和具體的SIP應用服務(wù)器對接互通,最后通過(guò)SIP服務(wù)器路由到最終終端。當然,以上說(shuō)明是說(shuō)明一個(gè)垂直執行的流程,很多情況下,終端之間也可能直接通過(guò)本地其他的SIP服務(wù)器直接橫向互通。這完全取決于業(yè)務(wù)處理層面的需求邏輯。
      以上是一個(gè)完整的連接圖例。在企業(yè)通信網(wǎng)絡(luò )中,一般的終端都部署在內網(wǎng)呼叫中。
      在會(huì )話(huà)管理中,SIP服務(wù)器就起到了非常重要的作用,例如,我們接下來(lái)要介紹的SIP注冊服務(wù)和定位服務(wù)。現在,我們介紹和終端關(guān)系最緊密的概念AOR和Contact。
      2、AOR和Contact地址概念
      在我們討論注冊服務(wù)和定位服務(wù)之前,我們首先介紹一下讀者和SIP用戶(hù)經(jīng)常迷惑的兩個(gè)概念-AOR和Contact。我們通常所說(shuō)的SIP地址中包括了AOR和Contact兩種類(lèi)型的地址。AOR的全稱(chēng)是Address-of-Record。在RFC3261中,AOR是這樣定義的:
      Address-of-Record: An address-of-record (AOR) is a SIP or SIPS URI
      that points to a domain with a location service that can map
      the URI to another URI where the user might be available.
      Typically, the location service is populated through
      registrations.  An AOR is frequently thought of as the "public
      address" of the user.
      Contact 是這樣定義的:
      簡(jiǎn)單來(lái)說(shuō),兩種地址的格式也是完全不同的。AOR地址格式為SIP:user@domain(例如,SIP:james@hiastar.com), 而Contact地址格式為Contact: james 。大家可能注意到了,這個(gè)Contact是一個(gè)具體的IP地址,一些情況下也可能是一個(gè)FQDN地址。
      下面,讓我們詳細說(shuō)明一下兩種地址的不同。首先,如果討論AOR地址的話(huà),我們可以使用我們互聯(lián)網(wǎng)的域名和IP地址的關(guān)系來(lái)說(shuō)明。大家知道,一般用戶(hù)訪(fǎng)問(wèn)網(wǎng)站使用的是公司的域名,而不是公司網(wǎng)站的IP地址。域名需要通過(guò)解析以后,才能獲得相應的IP地址。因此,AOR簡(jiǎn)單來(lái)說(shuō),就是一個(gè)帶域名的用戶(hù)帳戶(hù),相當于一個(gè)用戶(hù)的公網(wǎng)地址,它具有唯一性,而Contact的具體的聯(lián)系方式是這個(gè)終端的IP地址。但是,讀者,一定要明白,SIP終端的IP地址可能是臨時(shí)性的,終端也可能是完全移動(dòng)的,而且支持了不同的物理形式,這里就需要SIP服務(wù)器做定位處理,和其AOR記錄地址匹配。實(shí)際上,用戶(hù)需要首先呼叫AOR地址,而不是Contact地址。讀者需要記住AOR和Contact的區別:
    1. AOR 地址是表示我是誰(shuí),表示用戶(hù)本身的身份,帶域名的地址。
    2. Contact地址表示的是我在哪里,表示SIP終端用戶(hù)的具體的物理IP地址和端口。
    3. 雙方可以通過(guò)已獲悉的Contact地址直接進(jìn)行呼叫(點(diǎn)對點(diǎn)方式)。
    4. AOR地址必須可以解析為Contact地址。
    5. Contact地址必須是可路由的地址,對端可發(fā)后續請求到此地址,例如我們下面要講的ACK。
      一個(gè)AOR地址可以對應多個(gè)Contact地址(一個(gè)SIP終端可以支持多種形式的物理終端)。
      當然,為了讓用戶(hù)自己獲悉地方的地址和呼叫,首先,雙方SIP終端必須注冊到SIP服務(wù)器,SIP終端呼叫對方之前,需要先通過(guò)SIP注冊服務(wù)器進(jìn)行狀態(tài)檢查,然后才能進(jìn)行呼叫,路由管理和會(huì )話(huà)處理。接下來(lái),我們介紹如何實(shí)現SIP注冊服務(wù)。
      3、SIP中的注冊服務(wù)處理過(guò)程
      按照上面的介紹,為了實(shí)現雙方的呼叫,雙方的SIP終端首先需要注冊到一個(gè)SIP注冊服務(wù)器來(lái)完成注冊服務(wù)(Registrar)。注冊服務(wù)本身是一個(gè)流程中的角色,動(dòng)作和功能,其概念比較抽象。在實(shí)際的工作流程中,它需要借助注冊(Registry, 具體的數據庫等存儲服務(wù)對象)服務(wù)器來(lái)完成。關(guān)于英文中對注冊的定義,讀者需要自己掌握,筆者這里不再累述。
      在Registry的模塊中,通過(guò)數據庫來(lái)存儲AOR地址,Contact地址,Q 值和超時(shí)設置。關(guān)于Q值的作用和超時(shí)設置的機制,我們會(huì )在下面的章節中做詳細介紹。這里,筆者僅說(shuō)明AOR和Contact地址。
      以上示例介紹了一個(gè)簡(jiǎn)單的注冊服務(wù)的流程。現在,讓我們看看注冊服務(wù)是如何實(shí)現的。SIP終端用戶(hù)首先對SIP進(jìn)行注冊服務(wù),同時(shí)對注冊服務(wù)器發(fā)送AOR地址和Contact地址。注冊服務(wù)器判斷其域名是否是本SIP服務(wù)器支持的域名,如果是支持的域名,則會(huì )存儲其AOR地址和Contact的具體的物理地址,并且此地址在一定超時(shí)設置內有效。這樣,SIP注冊服務(wù)器就獲悉了SIP終端的AOR地址和Contact地址,它就會(huì )知道,如果其他SIP 終端呼叫時(shí),SIP注冊服務(wù)器知道如何路由這個(gè)呼叫,而且可以根據AOR地址解析到具體的SIP物理地址。
      如果多臺SIP終端對注冊服務(wù)器注冊的話(huà),注冊服務(wù)器會(huì )存儲所有的AOR地址和其相應的Contact地址到注冊數據庫中保存。
      4、SIP的定位服務(wù)處理流程
      我們上面提到了注冊流程,事實(shí)上,如果用戶(hù)雙方需要執行呼叫流程的話(huà),呼叫流程還需要另外一半服務(wù)來(lái)協(xié)助完成呼叫。另外一半流程就是SIP服務(wù)中的定位服務(wù)(Location)。SIP中的定位服務(wù)和注冊服務(wù)一樣,它的功能概念仍然具有一定的抽象性。簡(jiǎn)單來(lái)說(shuō),它扮演一個(gè)服務(wù)角色,執行具體的流程,還執行某些功能。定位服務(wù)器可以獨立存在,也可以和注冊服務(wù)一起工作,存在于SIP服務(wù)器中。在一般比較小型的企業(yè)應用環(huán)境中,一般的定位服務(wù)和注冊服務(wù)都部署在同一服務(wù)器。以下是一個(gè)簡(jiǎn)單的定位服務(wù)的示例圖:
      現在,讓我們看看SIP服務(wù)中的定位服務(wù)是如何工作的。如果雙方進(jìn)行呼叫的話(huà),為了實(shí)現呼叫,呼叫方首先是執行一個(gè)定位服務(wù),然后,定位服務(wù)器對被呼叫方進(jìn)行查詢(xún),查詢(xún)被呼叫方是否注冊等狀態(tài),AOR地址等過(guò)程,最后才能實(shí)現真正的呼叫。這里,為了簡(jiǎn)單說(shuō)明定位服務(wù)的功能流程,筆者這里介紹的僅是一個(gè)簡(jiǎn)單的定位服務(wù)的處理流程,沒(méi)有涉及其他的服務(wù)支持,比如重轉發(fā)服務(wù)等。
      根據以上圖例介紹,這里的定位服務(wù)處理流程中,我們的定位服務(wù),代理服務(wù)器和注冊服務(wù)器都部署在同一服務(wù)器中。具體的定位服務(wù)大概經(jīng)過(guò)以下幾個(gè)步驟:
    1. 第一步,呼叫方通過(guò)AOR 地址呼叫對端,首先需要對SIP服務(wù)器的定位服務(wù)器/注冊服務(wù)器發(fā)起一個(gè)INVITE消息。
    2. 定位/注冊服務(wù)器收到INVITE消息后,檢查AOR地址,是否是本服務(wù)器所屬的AOR地址domain(work.com)和用戶(hù)名稱(chēng)。這里,實(shí)際上就是定位服務(wù)的作用。
    3. 如果是本定位服務(wù)器支持的地址,則執行注冊表查詢(xún),完整查詢(xún)AOR地址和用戶(hù)Contact匹配。在復雜場(chǎng)景中,可以執行重定位服務(wù),這里不再討論。注冊查詢(xún)成功。
    4. 然后注冊服務(wù)查詢(xún)對應的Contact地址確認,在注冊表中有一個(gè)可用的注冊狀態(tài)正常的Contact地址。
    5. 提取Contact地址,定位服務(wù)把正式呼叫的任務(wù)轉給代理服務(wù)器來(lái)完成。代理服務(wù)器對被呼叫方發(fā)起INVITE時(shí),修改這個(gè)URL地址,替換成被呼叫方的Contact地址,對被呼叫方的具體物理地址和端口進(jìn)行INVITE請求。
      經(jīng)過(guò)以上五個(gè)步驟,一個(gè)完整的定位服務(wù)就完成了。當然,筆者沒(méi)有涉及具體的定位服務(wù),注冊服務(wù)和代理之間的服務(wù)協(xié)商機制。每個(gè)廠(chǎng)家和業(yè)務(wù)需求的處理方式可能有所不同,如果用戶(hù)需要做進(jìn)一步的分析,可以查詢(xún)廠(chǎng)家的技術(shù)文檔。接下來(lái),問(wèn)題來(lái)了,如果查詢(xún)時(shí),發(fā)現沒(méi)有可用的Contacts怎么辦?這就需要借助超時(shí)設置來(lái)監控終端注冊狀態(tài)。
      5、注冊超時(shí)處理機制
      大家可能在剛才的的注冊服務(wù)中發(fā)現,注冊服務(wù)器需要對Contact的狀態(tài)進(jìn)行查詢(xún),確認其狀態(tài)可用,表示其是在正常的注冊狀態(tài)。注冊狀態(tài)控制的主要參數就是Expires。這個(gè)參數控制著(zhù)終端注冊的狀態(tài)情況。這里,我們對超時(shí)設置的幾個(gè)要素和大家做一個(gè)介紹。
      大家知道,一般默認的注冊超時(shí)設置是3600秒。用戶(hù)終端注冊時(shí)攜帶了這個(gè)設置,這表示此用戶(hù)在3600秒鐘內的狀態(tài)是存活的。但是,這里讀者一定要注意,即使用戶(hù)設置的是3600秒,如果終端不能在超時(shí)范圍內不停對注冊服務(wù)器發(fā)送超時(shí)刷新的消息,注冊服務(wù)器可能會(huì )認為此終端已經(jīng)不再注冊狀態(tài)。因為,在某個(gè)時(shí)間段,可能其他SIP終端需要對此終端進(jìn)行呼叫,如果不能不停刷新定時(shí)器超時(shí)設置,注冊服務(wù)器可能不能得到準確的狀態(tài)信息,這樣可能導致呼叫失敗。因此,終端會(huì )不斷對注冊服務(wù)器進(jìn)行消息發(fā)送,保持這個(gè)存活狀態(tài)。例如,現在,SIP終端開(kāi)始對注冊服務(wù)器進(jìn)行注冊,一個(gè)小時(shí)后,超時(shí)后,注冊信息從注冊服務(wù)器移除。注冊時(shí),默認超時(shí)設置為3600秒:
      一小時(shí)超時(shí)后,注冊服務(wù)器刪除注冊記錄:
      在開(kāi)始時(shí),筆者已經(jīng)提到,在正常情況下,任意分機,任意時(shí)間段電話(huà)之間的互相呼叫是非常正常的需求。如果在某一時(shí)間段內,某些分機沒(méi)有處于正常的注冊狀態(tài),雙方發(fā)起的呼叫就會(huì )失敗。終端如何讓注冊服務(wù)器端能夠準確獲悉SIP終端的目前的注冊狀態(tài)呢?系統只能讓SIP終端自己在默認傳輸時(shí)間內不斷對注冊服務(wù)器發(fā)起重新注冊的消息。這也是我們通常所說(shuō)的注冊周期的概念。終端需要在一個(gè)特定的周期內不斷按照設定的間隔周期重新注冊,以便對注冊服務(wù)器保持一個(gè)存活狀態(tài)。當然,這個(gè)周期的設置取決于終端設置,以及服務(wù)器端的設置,因為,周期長(cháng)短會(huì )影響服務(wù)器端的執行性能,會(huì )直接影響服務(wù)器的執行狀態(tài)。另外,讀者需要注意,每重新注冊一次,QSeg值會(huì )增加一次。
      如果終端想退出注冊和關(guān)機的話(huà),那么,終端退出注冊是怎么處理的?一些讀者可能簡(jiǎn)單認為,退出注冊是不是直接對注冊服務(wù)器發(fā)送了一個(gè)BYE消息?這是一種錯誤的想當然的想法。實(shí)際上,當SIP終端退出注冊時(shí),它仍然對SIP服務(wù)器發(fā)送一個(gè)注冊請求,只是這次的請求攜帶了一個(gè)超時(shí)設置為零的設置,而不是3600。 以下是一個(gè)注冊和退出注冊的消息示例:
      用戶(hù)可能點(diǎn)擊終端界面的退出注冊或者關(guān)機,終端會(huì )直接對注冊服務(wù)器發(fā)送一個(gè)注冊消息,但是攜帶Expires=0, 通知注冊服務(wù)器刪除注冊記錄信息。注冊服務(wù)器收到的定時(shí)器超時(shí)設置的參數設置后,刪除所有相關(guān)記錄。
      6、SIP注冊請求主要參數用法
      到本章節為止,估計很多讀者可能對注冊請求頭的一些字段非常迷惑。很多技術(shù)文檔也是完全根據標準的技術(shù)術(shù)語(yǔ)來(lái)解釋這些注冊請求中頭的用法,所以很多用戶(hù)對某些參數的理解始終沒(méi)有完全領(lǐng)會(huì )。我們嘗試使用英文書(shū)信的格式來(lái)解釋請求的各種消息參數和使用說(shuō)明,這種方式應該是比較貼切的表達方式,用戶(hù)可以非常清楚地理解SIP注冊時(shí)主要的幾個(gè)頭的概念和其相應的關(guān)系。
      如果我們把SIP注冊邀請信對應到SIP注冊請求中的參數中,筆者就會(huì )完全理解每個(gè)參數的真正含義和概念。再次提醒,這里的注冊中的To 和From很多情況下是同一用戶(hù),但是也可能是其他用戶(hù)。
      以上圖例可以完整解釋為這樣一個(gè)流程。首先,終端用戶(hù)提供帶域名的賬號發(fā)起注冊請求。注冊服務(wù)需要通過(guò)注冊服務(wù)器進(jìn)行注冊,然后通知注冊服務(wù)器,這里有一個(gè)用戶(hù)(To tag的),如果有和這個(gè)用戶(hù)相關(guān)的呼入,請注冊服務(wù)器路由映射到具體的Contact 地址。這里,一般來(lái)說(shuō),這個(gè)Contact地址是具體的一個(gè)物理終端或軟電話(huà)終端帶了5060端口。終端同時(shí)提醒注冊服務(wù),保持超時(shí)設置為3600秒。最后,落款是來(lái)自于From tag 地址的注冊請求。另外,終端通知注冊服務(wù)器,如果有返回確認消息的話(huà)(例如 200 OK),請返回到這個(gè)上面的Via地址。
      7、SIP注冊-第三方注冊
      前面我們介紹的場(chǎng)景是注冊方自己注冊自己所屬的參數和相關(guān)信息(一般稱(chēng)之為first-party registration)。但是,在某些情況下,可能用戶(hù)SIP終端可以通過(guò)其他第三方用戶(hù)(third-party registration)對其進(jìn)行注冊。注冊時(shí),一些頭標簽參數發(fā)生變化。為了回答這個(gè)問(wèn)題,大家可以看看以下這個(gè)圖例:
      比較復雜的第三方注冊中帶了GRUU來(lái)做地址查詢(xún):
      上面的示例中,大家是否注意到 To header和From header的用戶(hù)名稱(chēng)是不一樣的。實(shí)際上,這種情況也是允許的,這就是通常所說(shuō)的第三方注冊方式(rfc3261)。
      這里,用戶(hù)必須了解To tag的作用和From的作用。To tag是表示的真正的用戶(hù)注冊的地址,而from tag則表示是正在請求注冊的地址。簡(jiǎn)單來(lái)說(shuō),to tag表示的是第一用戶(hù)的地址,而from tag表示的是正在要求注冊的第三方用戶(hù)的地址,可能和To tag用戶(hù)是完全不同的另外一個(gè)用戶(hù)。因此,讀者一定要對第三方注冊有一個(gè)正確的理解。以下是筆者對SIP第三方注冊關(guān)于To和From tag使用的幾個(gè)區別要點(diǎn):
      To和Contact 頭是已經(jīng)注冊的用戶(hù)的消息內容,其地址來(lái)自于已注冊的用戶(hù)。
      From和Via頭是正在要求注冊的第三方的消息地址,來(lái)自于第三方用戶(hù),不是已注冊用戶(hù)本身的地址。
      8、多個(gè)Contact地址添加方式
      很多情況下,企業(yè)辦公環(huán)境中,員工可能使用多個(gè)分機來(lái)接聽(tīng)公司內部電話(huà),以便更好地適應企業(yè)通信移動(dòng)性的要求。一個(gè)分機電話(huà)可能支持桌面軟電話(huà),可能是一個(gè)SIP物理座機電話(huà),也可能是一個(gè)手機app。所以,其分機的網(wǎng)絡(luò )也可能隨著(zhù)用戶(hù)的移動(dòng)也經(jīng)常發(fā)生變化。有時(shí),員工可能在辦公室,有時(shí)可能在咖啡館見(jiàn)客戶(hù),有時(shí)可能在其他的地方。因此,員工分機的幾個(gè)IP地址需要和其AOR地址進(jìn)行綁定。一個(gè)AOR地址可以支持多個(gè)不同的IP地址。
      從上面的圖例中,我們可以看到,如果外部呼叫呼入到這個(gè)AOR地址后,注冊服務(wù)器配合代理服務(wù)器就呼叫所有的Contact地址。讀者需要注意,這里沒(méi)有配置Q值,實(shí)際上,呼入以后,服務(wù)器端會(huì )通過(guò)不同的Q值的優(yōu)先級進(jìn)行呼叫處理。這里,我們忽略了Q值,在后續的講座中,我們會(huì )介紹呼入以后,根據Q值優(yōu)先級進(jìn)行多個(gè)Contact地址查詢(xún)的處理機制。用戶(hù)也可以參考筆者以前的文章了解整個(gè)機制的處理流程。
      可能讀者已經(jīng)注意到了,既然一個(gè)AOR可以支持多個(gè)Contact地址,那這些Contact地址是如何加入到Contact列表中的呢? 事實(shí)上,在SIP協(xié)議中,關(guān)于Contact地址的添加,SIP協(xié)議支持了三種添加Contacts的方式:
      用戶(hù)手動(dòng)自己添加,用戶(hù)可以輸入多個(gè)Contact地址來(lái)綁定AOR。用戶(hù)自己手動(dòng)注冊每個(gè)終端設備到注冊服務(wù)器。當然,手動(dòng)添加的方式當然需要耗費人工資源。
    • 一臺SIP終端注冊時(shí)通過(guò)多個(gè)Contacts添加多個(gè)頭值,相對簡(jiǎn)單方便。

    • 一臺SIP終端注冊時(shí)通過(guò)單Contacts以分號分開(kāi),添加多個(gè)SIP IP地址。
      這里提醒讀者,在以上的示例中,我們僅說(shuō)明一個(gè)簡(jiǎn)單的添加場(chǎng)景。但是,如果涉及了一些IPPBX的時(shí)候,特別是面對大型IPPBX的解決方案時(shí),完全靠IPPBX本身的注冊定位機制來(lái)處理注冊和定位服務(wù)可能顯得有一點(diǎn)吃力。用戶(hù)可能涉及了定位服務(wù)器和DNS的問(wèn)題。關(guān)于這方面的內容,讀者可以查閱RFC3263和RFC5947來(lái)做進(jìn)一步了解。
      9、Contacts呼叫對SIP定位服務(wù)的影響
      大家已經(jīng)注意到了,一個(gè)AOR 地址可以支持多個(gè)Contacts地址,但是支持了多個(gè)Contacts地址的話(huà),定位處理的機制會(huì )直接影響到呼叫的流程。我們可以想象一下,其他用戶(hù)如果呼叫這個(gè)用戶(hù)時(shí),有幾個(gè)疑問(wèn)需要大家考慮:
    • 這些地址是如何被定位和管理?
    • 如何保證呼叫被路由到一個(gè)正確的地址?
    • 如何能夠保證其他的SIP終端都能完成可靠性處理,并且完全拆線(xiàn)?
      事實(shí)上,以上疑問(wèn)都是通過(guò)注冊和定位服務(wù)來(lái)處理的。其實(shí),在處理多個(gè)Contacts呼叫時(shí),定位服務(wù)通過(guò)兩種不同的模式來(lái)處理呼叫:并行呼叫處理(parallel forking)和按序依次呼叫處理模式(Sequential forking)。筆者在以前的討論中討論過(guò)關(guān)于呼叫查詢(xún)的問(wèn)題,并且介紹了每個(gè)請求處理的具體流程,讀者可以查閱具體流程。今天,我們從另外一個(gè)角度再次對定位服務(wù)的處理機制進(jìn)行討論。
      首先,我們介紹一下什么是按序依次呼叫處理模式(Sequential forking)。按序呼叫處理的流程是,呼叫方對另外一方進(jìn)行呼叫,因為被呼叫方帶有多個(gè)Contacts地址,因此,首先,呼叫方需要對定位服務(wù)進(jìn)行查詢(xún),定位服務(wù)器按照Q值優(yōu)先級順序進(jìn)行查詢(xún),Q(0.1-1.0之間)值高的具有高優(yōu)先級。定位服務(wù)器首先對其contact地址進(jìn)行呼叫。如果Q值最高的沒(méi)有接聽(tīng),則繼續對次級的Q值進(jìn)行查詢(xún)呼叫,依此類(lèi)推。直到找到一個(gè)接聽(tīng)呼叫的終端SIP。以下示例是一個(gè)帶Q值的Contact格式:
      這個(gè)Q值在用戶(hù)注冊時(shí)就已經(jīng)設定,再次說(shuō)明,Q值最高的具有最高的被呼叫優(yōu)先級,另外,讀者一定要注意,Q值總是小數。
      根據Q值的說(shuō)明,以下示例是一個(gè)按續呼叫的處理流程。定位服務(wù)器根據Q值依次呼叫和處理拆線(xiàn)。
      這里,筆者需要具體說(shuō)明,如果通過(guò)Q值查詢(xún)以后,對其Contact進(jìn)行了呼叫,呼叫因為各種原因導致呼叫失敗(例如,486 忙狀態(tài)),則定位服務(wù)器進(jìn)行對其終端返回其他響應消息,直到ACK處理完成。然后,接下來(lái),繼續根據Q值再次進(jìn)行查詢(xún),找到對應的Contact地址,然后對其Contact地址進(jìn)行INVITE呼叫請求。如果找到一個(gè)接聽(tīng)呼叫的終端,則此終端對定位服務(wù)器返回200 OK,然后定位服務(wù)器對呼叫方返回200 OK。最后,呼叫方和被呼叫方通過(guò)保存的route set 獲悉Contact地址后,雙方直接互相發(fā)送ACK消息(不經(jīng)過(guò)定位服務(wù)器)。
      另外一種呼叫模式是并行呼叫處理(parallel forking)呼叫處理的機制,它的處理機制則相對比較簡(jiǎn)單。如果呼叫方對定位服務(wù)器發(fā)起一個(gè)INVITE呼叫以后,定位服務(wù)器會(huì )對所有Contacts地址同時(shí)發(fā)起INVITE呼叫。
      最快接聽(tīng)的終端對定位服務(wù)器返回200 OK,然后,定位服務(wù)器對呼叫方返回200 OK和雙方直接發(fā)送ACK,而不經(jīng)過(guò)定位服務(wù)器,雙方呼叫正式確認。接下來(lái),定位服務(wù)器則同時(shí)對其他沒(méi)有接聽(tīng)呼叫的終端發(fā)送Cancel消息。這里需要特別注意,根據Cancel的消息處理流程,定位服務(wù)器會(huì )同時(shí)對其他終端發(fā)送Cancel消息,200 OK,487,和ACK。
      根據Cancel的流程處理機制(對應了奧卡姆剃刀原理-如無(wú)必要,勿增實(shí)體),每個(gè)沒(méi)有接聽(tīng)的終端會(huì )繼續對定位服務(wù)器返回200 OK,緊接著(zhù),每個(gè)沒(méi)有接聽(tīng)呼叫的終端繼續對定位服務(wù)器發(fā)送487 請求結束的消息,最后,定位服務(wù)器收到這些終端發(fā)送到487 以后,再次同時(shí)對這些Contacts分別發(fā)送最終ACK消息。至此,定位服務(wù)器對整個(gè)失敗呼叫的拆線(xiàn)流程結束。
      在實(shí)際生產(chǎn)環(huán)境中,很多終端可能沒(méi)有設置Q值或者終端設置為等值,所以,最終的按序處理呼叫可能出現其他的接聽(tīng)錯誤,這里需要配合定位服務(wù)器的設置進(jìn)行檢查。因此,筆者提醒讀者,如果遇到類(lèi)似問(wèn)題時(shí),檢查終端設置和Q值設置。另外,并行呼叫接聽(tīng)的終端具有隨意性,很多因素影響接聽(tīng)順序,例如網(wǎng)絡(luò )原因或基于A(yíng)PP的軟電話(huà)的推送服務(wù)遲延。
      10、總結
      在本討論中,我們主要討論的環(huán)境是基于SIP服務(wù)器支持的環(huán)境,而不是前面討論過(guò)的點(diǎn)對點(diǎn)呼叫環(huán)境。因此,在討論中,我們需要借助SIP服務(wù)器來(lái)實(shí)現終端管理,終端呼叫協(xié)商,會(huì )話(huà)處理和呼叫流程模式的處理等比較復雜的概念。首先,筆者介紹了SIP服務(wù)器的必要性和其定義規范。根據終端的概念,我們介紹了非常重要的兩個(gè)概念AOR和Contact的區別。然后,筆者介紹了SIP注冊的流程,配合SIP注冊服務(wù),筆者也介紹了SIP定位服務(wù)的處理。
      另外,筆者針對注冊超時(shí)的問(wèn)題,也幫助讀者分析了超時(shí)設置的必要性和處理方式。在呼叫中,因為需要處理多個(gè)Contact地址,所以也花費一定的時(shí)間介紹了SIP注冊時(shí)所攜帶的Q值。這個(gè)Q值決定了對Contact呼叫的優(yōu)先級。針對很多讀者比較迷惑的SIP頭字段,筆者以信件的方式把這些主要的概念做了充分介紹。最后,筆者討論了定位服務(wù)對SIP多Contacts呼叫機制-并行呼叫和按序依次呼叫。
      因為篇幅的關(guān)系,筆者這里沒(méi)有花費更多時(shí)間去討論其他的關(guān)于SIP注冊和定位的相關(guān)的問(wèn)題,例如Branch ID來(lái)確認who是who的問(wèn)題,代理服務(wù)器的處理所涉及的問(wèn)題和經(jīng)過(guò)多Via路由以后的Via添加和刪除的流程。我們將會(huì )在后續的文章中繼續討論。
      參考資料:
      https://voipmagazine.wordpress.com/2014/09/19/sip-registration-process/
      https://www.ietf.org/rfc/rfc3261.txt
      https://www.test-king.com/guide-642-437-sip.htm
      http://www.openmobilealliance.org/release/LOCSIP/V1_0-20081223-C/OMA-AD-LOCSIP-V1_0-20081223-C.pdf
      http://www.voipdictionary.com/IPTelephonyDictionary-Location-Server-LS-Definition.html
      https://tools.ietf.org/html/rfc3263
      https://tools.ietf.org/html/rfc5947
     
      關(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
     

    【免責聲明】本文僅代表作者本人觀(guān)點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對文中陳述、觀(guān)點(diǎn)判斷保持中立,不對所包含內容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔全部責任。

    專(zhuān)題

    CTI論壇會(huì )員企業(yè)

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 普定县| 大石桥市| 永济市| 宜兴市| 无棣县| 合江县| 九龙城区| 南平市| 凯里市| 赤水市| 南郑县| 六枝特区| 信阳市| 上杭县| 香港| 高淳县| 手游| 凭祥市| 平江县| 五大连池市| 南京市| 靖边县| 东至县| 理塘县| 赞皇县| 天台县| 永平县| 柳河县| 定南县| 始兴县| 开化县| 蚌埠市| 沾化县| 巫山县| 乌鲁木齐县| 桐乡市| 将乐县| 莲花县| 定南县| 阜阳市| 云和县| http://444 http://444 http://444 http://444 http://444 http://444