SIP注冊
注冊服務為特定地區(qū)的位置服務創(chuàng)建綁定關系,這個綁定關系是用來建立包含一個或者多個聯(lián)系地址的address-of-recordURI。因而,當那個地區(qū)的proxy接收到一個請求,這個請求的Request-URI和address-of-record的記錄匹配,那么這個proxy會轉發(fā)請求到這個address-of-record中登記的聯(lián)系地址中去。
Address-of-Record:記錄地址。一個address-of-record(AOR)是一個SIP或者SIPSURI它指向了一個具有定位服務的主機,這個主機可以把URI映射成為用戶真正物理位置的URI。通常情況下,定位服務器是通過登記服務來建立的。一個AOR經(jīng)常被認為是一個用戶的”公共地址”。
需要注意的是,登記服務器(registrar)和proxy服務器都是邏輯上的角色,可以在網(wǎng)絡中用一個設備來部屬.還需要注意的是如果他們(登記服務器和proxy)本身是分開的,那么UA可以通過proxy服務器發(fā)送注冊請求。
1構造一個REGISTER請求
REGISTER請求用來增加、刪除、查詢綁定資料。
下面這些頭域,除了Contact,必須在REGISTER頭域中包含。Contact頭域可選。
Request-URI:這個頭域指明了登記服務所指明的位置服務所在的區(qū)域(比如sip:chicago.com)?!眜serinfo”和”@”元素在SIPURI中不能出現(xiàn)。
To:這個頭域包含了被查詢、增加、修改的address-of-record。to頭域和Request-URI頭域通常是不同的,因為這個由用戶名組成。這個address-of-record必須是一個SIPURI或者SIPS URI.
From:這個頭域包含了提交這個注冊信息的用戶的address-of-record資料。這個值和To頭域的值相同,除非這個請求是第三方發(fā)起的注冊請求。
Call-ID:UAC發(fā)出的給某個注冊服務器(registrar)的所有注冊請求都應該有相同的Call-ID頭域值。如果相同的客戶端用了不同的Call-ID值,注冊服務器(registrar)就不能檢測是否一個REGISTER請求由于延時的關系導致了故障。
Cseq:Cseq值保證了REGISTER請求的正確順序。一個UA為每一個具備相同的Call-ID的REGISTER請求順序遞增這個Cseq字段。
Contact:REGISTER請求可以有一個Contact頭域。這個頭域可以有0個或者多個包含綁定地址信息的值。“expires”參數(shù)表明UA的綁定的有效時間。以秒為單位的整數(shù)。如果本參數(shù)沒有制定,那么這個參數(shù)的值就是Expires頭域的值。實現(xiàn)中,可以把超過2**32-1的值(4294967295秒或者136年)認為是2**32-1。非法的值應當視同3600。
UA在沒有收到上一個注冊請求的應答或者上一個REGISTER請求超時之前,禁止發(fā)送新的注冊請求(就是說,包含一個新的Contact頭域值,而不 是重發(fā))。
1.1增加綁定
1.1.1 設置Contact地址的過期參數(shù)
當一個客戶端發(fā)出一個REGISTER請求,它可能包含一個過期參數(shù)用來表示這個注冊的地址的有效期。
客戶端設置有效期的方法有兩種:一個是通過設置Expires頭域,一個是通過設置”expires”contact頭域的參數(shù)來設置。后一種允許針對同一個REGISTER請求中的多個綁定聯(lián)系地址中的每一個聯(lián)系地址單獨設定有效期,然后所有沒有帶”expires”參數(shù)的Contact頭域的值都使用Expires的設置。
如果REGISTER中沒有兩種有效期都沒有設置,這就表明這個有效期由服務器來決定。
1.1.2 Contact Adress的參數(shù)選擇
如果在一個REGISTER請求中包含多個Contact,這說明UA想要把這些Contact頭域的內容都和To頭域中制定的address-of-record地址綁定起來。這個列表可以用”q”參數(shù)來區(qū)分Contact頭域的優(yōu)先級。”q”參數(shù)用來標志特定Contact頭域值和其他綁定的address-of-record的聯(lián)系地址之間的優(yōu)先級。
1.2刪除綁定
注冊信息是一個純粹軟件的狀態(tài),并且如果不刷新會過期。如果需要,也可以被刪除。一個客戶端可以設置注冊服務器(registar)的有效期(10.2.1)。一個UA可以通過發(fā)出有效期為”0”的REGISTER請求,使某一個聯(lián)系地址立刻失效。UAS都需要實現(xiàn)這個機制使得在聯(lián)系地址過期前能夠被刪除。
REGISTER規(guī)范中的Contact頭域如果設置成為”*”則表示需要操作所有的注冊項。但是也只能在具有一個Expires頭域并且這個頭域為’0’的情況下能夠使用。(這就是說,只能夠在要刪除所有的注冊項的時候使用”*”)。
用”*”來刪除所有的注冊項有一個好處,就是使得UA不需要知道每一個注冊項的精確值。
1.3訪問綁定
無論請求是否包含了Contact頭域,給任何REGISTER請求的成功應答都包含了一個完整的綁定列表。如果REGISTER請求頭域中不包含Contact頭域,那么注冊服務器的綁定列表將不會改變。
1.4刷新綁定
每一個UA都對先前它建立的綁定信息由刷新的義務。禁止對其他UA建立的綁定信息進行刷新。于是在這些綁定信息過期前,UA為每個綁定發(fā)出REGISTER請求來刷新綁定。也可以通過一個REGISTER請求來刷新數(shù)個綁定請求。
UA在一個刷新周期中,應該使用相同的Call-ID來進行注冊調用。
1.6尋找注冊服務器
UA有3種方法來決定向哪里發(fā)出注冊請求:通過配置,使用address-of-record,廣播方式。
1)一個UA可以用非本文檔規(guī)定的方式,配置一個注冊服務器的地址。
2)用請求的Request-URI部分種的address-of-record的服務器部分(hostpart),用普通的SIP服務器定位機制。比如,用戶”sip:carol@chicago.com”地址的注冊服務應該是”sip:chicago.com”。
3)UA可以通過監(jiān)聽廣播的形式來獲得注冊服務器地址。
1.8錯誤響應
如果UA接收到一個423(間隔太簡略)應答,它可能需要更改REGISTER請求中的所有有效期,使得這些有效期必須大于等于423應答頭中的Min-Expires頭域中的有效期,并且重新嘗試發(fā)送這個REGISTER請求。
2 處理REGISTER請求
一個注冊服務器(registrar)就是一個UAS,這個UAS用來響應REGISTER的請求,并且維持一個綁定表,這個綁定表用來提供給它所管理的區(qū)域中的proxy服務器和重定向服務器的。
一個注冊服務器禁止產(chǎn)生6xx應答。
一個注冊服務器可以適當?shù)霓D發(fā)REGISTER請求。通常用于一個注冊服務器(registar)監(jiān)聽一個多點廣播,并且通過302應答(臨時轉移)轉發(fā)這個多點廣播的REGISTER請求到它正確的處理位置。
一個注冊服務器必須知道(例如,通過配置)它所管理的區(qū)域。注冊服務器一定需要按照接收到的REGISTER請求順序進行處理。
當接收到一個REGISTER請求,注冊服務器(registrar)按照如下步驟處理:
1、注冊服務器(registrar)檢查Request-URI來決定是否它屬于本注冊服務器所管理的區(qū)域的Request-URI。如果不是,并且如果這個服務器同時也作為一個proxy服務器,那么這個服務器應當轉發(fā)這個請求到指定的區(qū)域。
2、為了保證注冊服務器能夠支持所需要的擴展,注冊服務器必須處理Require頭域。
3、 一個注冊服務器應當對UAC進行身份認證。
4、注冊服務器應當檢查認證的用戶是否通過認證來更改這個address-of-record的登記權限。
5、注冊服務器(registrar)從REGISTER請求的To頭域中解出address-of-record。如果這個address-of-record并非在這個Request-URI指明的區(qū)域中合法,那么注冊服務器必須發(fā)出一個404(沒有找到)的應答,并且跳過后續(xù)步驟。接著URI必須轉換成為標準的格式。所有的URI參數(shù)都必須刪去(包括用戶參數(shù)user-param),并且任何非法(escaped)字符必須轉換成為合法字符(unescaped)格式。最后形成一個可以用于綁定的列表。
6、注冊服務器(registrar)檢查是否請求包含了一個Contact頭域。如果沒有包含,它跳過到最后一步。如果Contact頭域包含了,注冊服務器檢查是否有一個Contact頭域值是”*”,并且包含了一個Expires頭域。如果請求有其他的Contact頭域或者任何有效期的值是非0的,這個請求就是非法請求,并且服務器必須送回一個400(非法請求)的應答,跳過后續(xù)步驟。如果沒有,那么注冊服務器檢查是否Call-ID復核每一個綁定的值。如果不符合,它必須刪除綁定。如果符合,它必須僅僅刪除保存的綁定表中CSeq值小于請求中的Cseq值的記錄。否則,更新必須終止,請求失敗。
7、現(xiàn)在注冊服務器(registrar)可以依次處理Contact頭域中的聯(lián)系地址了。
8、注冊服務器(registrar)返回一個200(OK)應答。這個應答必須包含Contact頭域,并且這個頭域的值中列舉了所有當前綁定的注冊信息。每一個Contact值都必須包含一個”expires”參數(shù),用來標志還有多久這個綁定信息就過期了。應答也必須包含一個Date頭域。
愛華網(wǎng)

