a级片网址,www.一级毛片,日批国产,中文字幕日韩精品有码视频,黄色毛片免费网站,久久久精品午夜免费不卡,天堂福利视频

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

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

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


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

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

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

專題

CTI論壇會員企業(yè)

徐汇区| 岢岚县| 平利县| 延津县| 平果县| 德惠市| 平阴县| 乌苏市| 福清市| 宜兰市| 杭锦后旗| 武安市| 涞源县| 贵阳市| 青浦区| 西安市| 濮阳市| 炉霍县| 新河县| 定远县| 海林市| 安阳市| 启东市| 灵璧县| 文登市| 康保县| 嘉义市| 北海市| 福泉市| 沾益县| 德钦县| 巫山县| 化德县| 巴林左旗| 南乐县| 衡水市| 朝阳市| 兰西县| 绿春县| 崇信县| 桐柏县|