97成人免费视频,97视频免费公开成人福利,免费视频99,99婷婷,国产伊人久久,亚洲视频欧美,国产精品福利久久

您當(dāng)前的位置是:  首頁(yè) > 資訊 > 文章精選 >
 首頁(yè) > 資訊 > 文章精選 >

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

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


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

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

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

專題

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

广饶县| 石楼县| 陵川县| 洪雅县| 巫溪县| 望奎县| 怀安县| 开远市| 华安县| 外汇| 呼伦贝尔市| 盘锦市| 富蕴县| 民勤县| 山东| 昭通市| 佛学| 右玉县| 日照市| 台州市| 富平县| 双峰县| 吴江市| 恭城| 苍南县| 定安县| 麻栗坡县| 湘阴县| 辛集市| 自贡市| 华池县| 临洮县| 文登市| 阜平县| 梓潼县| 丹凤县| 武乡县| 昭苏县| 东乡| 玛纳斯县| 乌兰县|