- 接前面章節。
- 10 Registrations
- 10.1 Overview
SIP 提供一種查詢(xún)能力。如果一個(gè)用戶(hù)想和其他用戶(hù)發(fā)起一個(gè)會(huì )話(huà)的話(huà),SIP必須查找當前其他用戶(hù)的目的地地址是否是可達狀態(tài)。這個(gè)查詢(xún)處理過(guò)程經(jīng)常是基于用戶(hù)地址信息,通過(guò)SIP網(wǎng)絡(luò )的核心要素單元來(lái)完成,例如代理服務(wù)器和重定位服務(wù)器(負責接收請求)來(lái)決定發(fā)送其發(fā)送地址,然后發(fā)送這個(gè)用戶(hù)到其地址。為了實(shí)現這個(gè)處理流程,SIP網(wǎng)絡(luò )的要素單元會(huì )查詢(xún)一個(gè)抽象服務(wù),我們稱(chēng)之為定位服務(wù)。這個(gè)服務(wù)為具體的域提供地址綁定。這些地址綁定映射一個(gè)正抵達的SIP或者SIPS URL地址,例如sip:bob@biloxi.com,可能會(huì )匹配一個(gè)或者多個(gè)這樣相似的URLs地址,例如sip:bob@engineering.biloxi.com。最終,代理會(huì )查詢(xún)一個(gè)定位服務(wù),定位服務(wù)會(huì )映射收到的URL地址到用戶(hù)代理,這個(gè)用戶(hù)是已經(jīng)定位的,這個(gè)會(huì )話(huà)期望抵達的用戶(hù)。
注冊實(shí)際上是在定位服務(wù)中為指定的域創(chuàng )建了一個(gè)綁定關(guān)系,這個(gè)指定的域通過(guò)一個(gè)或多個(gè)contact地址關(guān)聯(lián)了一個(gè)address-of-record(AoR) URI地址。因此,當這個(gè)域的代理收到一個(gè)請求,這個(gè)請求中的Request-URI匹配了address-of-record(AOR)時(shí),代理就會(huì )轉發(fā)這個(gè)請求到這個(gè)contact地址,這個(gè)地址已經(jīng)注冊到了那個(gè)address-of-record(AOR)上。一般情況下,只有這樣的處理方式是合理的,當注冊請求的AOR路由到那個(gè)域的時(shí)候,在域的定位服務(wù)上注冊添加一個(gè)address-of-record(AOR)地址。大部分情況下,這里表示的意思是,注冊的域將需要匹配在A(yíng)OR地址的域。
有多種方式創(chuàng )建定位服務(wù)的內容。一種方式是通過(guò)管理方式創(chuàng )建。在以上的示例中,Bob被看作是一名技術(shù)部門(mén)的成員之一,他有權訪(fǎng)問(wèn)公司數據庫。具體操作過(guò)程中,SIP協(xié)議對UA提供了一種機制,可以明確創(chuàng )建一種綁定關(guān)系。這種機制被稱(chēng)之為注冊。
注冊需要對指定的UAS類(lèi)型對象發(fā)生一個(gè)REGISTER請求,這種類(lèi)型的對象稱(chēng)之為注冊服務(wù)或者注冊服務(wù)器。注冊服務(wù)工作方式類(lèi)似于置于域定位服務(wù)的前端一個(gè)角色,注冊服務(wù)負責讀寫(xiě)映射REGISTER請求中的內容。定位服務(wù)然后通過(guò)解析出的結果查詢(xún)代理服務(wù)器,代理服務(wù)器負責針對那個(gè)域的綁定結果路由那個(gè)請求。
以上所有關(guān)于注冊流程的解釋在Figure 2有完整的說(shuō)明。注意,注冊服務(wù)和代理服務(wù)器都是邏輯對象,它們可以在網(wǎng)絡(luò )中部署為一個(gè)單一的邏輯對象。
為了說(shuō)明其功能,這里都把它們分開(kāi)說(shuō)明。同時(shí)也要注意,如果注冊服務(wù)和代理服務(wù)是獨立的對象,為了讓UAs那個(gè)抵達注冊服務(wù),UAs可以通過(guò)代理服務(wù)器發(fā)送請求服務(wù)。
SIP不能對一個(gè)特別的機制授權來(lái)支持定位服務(wù)。只有一個(gè)要求是必須滿(mǎn)足的,那就是針對某些域的注冊服務(wù)必須可以讀寫(xiě)到定位服務(wù)中,并且針對那個(gè)域的代理或者轉發(fā)服務(wù)必須能夠讀那些數據消息。注冊服務(wù)針對同一域,它可以和一個(gè)指定的SIP代理服務(wù)器部署在同一服務(wù)器中。
10.2 Constructing the REGISTER Request
注冊可以請求添加,移除和查詢(xún)綁定。一個(gè)注冊請求可以在一個(gè)address-of-record和一個(gè)或多個(gè)contact地址之間添加一個(gè)新的綁定。通過(guò)一個(gè)授權的,合適的第三方執行一個(gè)指定的address-of-record的注冊。客戶(hù)端也可以移除前面的綁定或通過(guò)查詢(xún)來(lái)決定哪個(gè)綁定是支持的address-of-record。
這里有一個(gè)特別說(shuō)明,注冊請求構建和客戶(hù)發(fā)送注冊請求的處理是通過(guò)基本的UAC處理方式來(lái)規范的,具體的規范說(shuō)明,請參閱Section 8.1 和Section 17.1。
一個(gè)注冊請求不能創(chuàng )建dialog。一個(gè)UAC可以在注冊請求中包括一個(gè)Route頭,這里的注冊請求是基于一個(gè)前面存在的route set列表,具體的描述參閱Section 8.1。在注冊請求或響應中的這個(gè)Record-Route頭沒(méi)有任何含義,如果出現的話(huà),它必須被忽略。特別強調,這個(gè)UAC一定不能在注冊請求的任何響應中,基于當前的或缺省的Record-Route創(chuàng )建一個(gè)新的route set。
除了Contact以外,以下頭域必須包括在注冊請求中。Contact頭也可以包括進(jìn)去:
- Request-URI: Request-URI命名定位服務(wù)的域名(例如,sip:chicago.com)。 SIP URL的"userinfo" 和"@" 部分一定不能出現。
- To: To頭包含記錄地址,其注冊流程可以被創(chuàng )建,查詢(xún)和修改。To頭和Request-URI 是不同的,因為前者包含一個(gè)用戶(hù)名稱(chēng)。這個(gè)記錄地址必須是一個(gè)SIP URL或者SIPS URL。
- From: From頭包含一個(gè)人的地址記錄,它負責注冊。除非請求是一個(gè)第三方的注冊,否則,這個(gè)值和To頭域值相同。
- Call-ID: 所有從UAC發(fā)送到特定注冊服務(wù)的注冊使用同一Call-ID頭域。
- CSeq: CSeq值用來(lái)保證正確的注冊請求順序處理。UA必須對每個(gè)帶同樣Call-ID的注冊請求遞增一個(gè)數值來(lái)保證其實(shí)現的正確性。
- Contact: 注冊請求可以包含一個(gè)Contact頭,它包含零個(gè)或者多個(gè)綁定的地址。
- UAs在收到注冊的最終響應之前或者沒(méi)有收到前面的注冊請求超時(shí)響應,它們一定不能發(fā)送新的注冊(和重傳相反,它包含一個(gè)新的Contact地址頭)。

以下Contact頭參數在注冊請求中具有特別的含義:
- action: 在RFC2543的規范中使用的參數"action" 已經(jīng)停止使用。
- UACs 不應該再使用"action" 參數。
- expires: “expires”參數表示UA綁定的有效時(shí)長(cháng)。參數值以秒為單位。如果沒(méi)有提供這個(gè)參數的話(huà),將使用Expires頭的值來(lái)代替。部署時(shí)可以,如果此值大于 2**32-1 (4294967295 seconds 或136 years)可以看作是等于2**32-1。 如果是異常的值的話(huà),異常的值應該被視為等于3600。
繼續發(fā)布……

關(guān)注微信公眾號:asterisk-cn,獲得有價(jià)值的Asterisk行業(yè)分享
Asterisk freepbx FreeSBC技術(shù)文檔: www.freepbx.org.cn
融合通信/IPPBX商業(yè)解決方案:www.hiastar.com
如何使用FreeSBC+FreeSWITCH/Asterisk,qq技術(shù)分享群:334023047