【文章內(nèi)容簡(jiǎn)介】
被Bob的SIP電話和Alice的softphone所接到(因?yàn)镽ecordRoute頭域?qū)⒃?00(OK)應(yīng)答中被送回),并且在會(huì)話中一直保存。,BYE,給BYE的200(OK)應(yīng)答。每一個(gè)代理都可以單獨(dú)決定是否接收INVITE以后的后續(xù)消息,并且這些后續(xù)消息都可以被發(fā)送到那些決定接收后續(xù)消息的代理服務(wù)器。這種情況通常發(fā)生在提供midcall業(yè)務(wù)的代理服務(wù)器上。登記服務(wù)是另一個(gè)常用的SIP操作。在初始化的時(shí)候,或者每隔一段時(shí)間,Bob的SIP 。REGISTER消息包含了Bob當(dāng)前登陸服務(wù)器的SIP或者SIPS的URI(sip:bob@)(轉(zhuǎn)換成為Contact域中的SIP或者SIPS URI)。登記服務(wù)器登記這個(gè)映射,這個(gè)叫做綁定(binding),寫(xiě)到一個(gè)數(shù)據(jù)庫(kù)里邊,叫做定位服務(wù)(location service)。通常登記服務(wù)器和代理服務(wù)器是做在一起的。一個(gè)很重要的概念就是SIP服務(wù)器的差別在邏輯上,并非在物理上的差別。Bob并沒(méi)有限定非得在一個(gè)單個(gè)設(shè)備上發(fā)起注冊(cè)。比如,他家里的SIP電話和公司的SIP電話都可以注冊(cè)。這些消息在定位服務(wù)(location service)中保存,并且允許代理服務(wù)器通過(guò)不同的手段查找Bob。同樣的,不同的用戶也可以在同一個(gè)設(shè)備上同時(shí)注冊(cè)。定位服務(wù)(location service)是一個(gè)邏輯概念。他是讓代理服務(wù)通過(guò)輸入一個(gè)URI來(lái)查詢到底應(yīng)該向哪里轉(zhuǎn)發(fā)請(qǐng)求??梢院?jiǎn)單通過(guò)用戶注冊(cè)來(lái)建立這個(gè)定位服務(wù)所需要的資料,也可以通過(guò)其他方法。可以通過(guò)其他任意的地址映射方式來(lái)實(shí)現(xiàn)定位服務(wù)。最后在SIP中需要注意的是,注冊(cè)服務(wù)只是用來(lái)提供路由收到的SIP請(qǐng)求的,它并不做請(qǐng)求的身份認(rèn)證的判定。在SIP中授權(quán)和認(rèn)證可以通過(guò)建立在基于請(qǐng)求/應(yīng)答的模式上的上下文相關(guān)的請(qǐng)求來(lái)實(shí)現(xiàn),也可以使用更底層的方式來(lái)實(shí)現(xiàn)(具體在26節(jié)有描述)。其他SIP的操作,比如檢查SIP服務(wù)器的負(fù)載,或者使用客戶端使用可選項(xiàng)(OPTIONS),或者用CANCEL取消一個(gè)未決的請(qǐng)求,在后續(xù)的章節(jié)中會(huì)介紹。協(xié)議的結(jié)構(gòu)SIP是一個(gè)分層的協(xié)議,意思是說(shuō)SIP協(xié)議由一組相當(dāng)無(wú)關(guān)的處理層次組成,這些層次之間只有松散的關(guān)系。協(xié)議分成不同層次來(lái)描述是為了能夠更清晰的表達(dá),在同一個(gè)小節(jié)里有功能的公共要素的交叉描述。本協(xié)議并沒(méi)有規(guī)定一個(gè)具體的實(shí)現(xiàn)。當(dāng)我們說(shuō)一個(gè)要素”包含”某一個(gè)層,我們的意思是這個(gè)要素復(fù)核這個(gè)層定義的規(guī)則。不是SIP每一個(gè)要素都一定包含每一個(gè)層。此外,SIP定義的要素是邏輯上的要素,不是物理要素。一個(gè)物理的實(shí)現(xiàn)可以實(shí)現(xiàn)不同的邏輯要素,或許甚至是基于串行事務(wù)處理原理。SIP最底層的是它的語(yǔ)法和編碼層。編碼方式是采用擴(kuò)展的BackusNaur Form grammar(BNF范式)。完整的BNF描述在25節(jié);第7節(jié)有簡(jiǎn)要的SIP消息結(jié)構(gòu)描述。第二層是傳輸層。它定義了一個(gè)客戶端如何發(fā)送請(qǐng)求和接收應(yīng)答,以及一個(gè)服務(wù)器如何接收請(qǐng)求和發(fā)送應(yīng)答。所有的SIP要素都包含一個(gè)通訊層。第18節(jié)有通訊層的描述。第三層是事務(wù)層。事務(wù)是SIP的基本組成部分。一個(gè)事務(wù)是客戶發(fā)送的一個(gè)請(qǐng)求事務(wù)(通過(guò)通訊層)發(fā)送到一個(gè)服務(wù)器事務(wù),連同服務(wù)器事務(wù)的所有的該請(qǐng)求的應(yīng)答發(fā)送回客戶端事務(wù)。事務(wù)層處理應(yīng)用服務(wù)層的重發(fā),匹配請(qǐng)求的應(yīng)答,以及應(yīng)用服務(wù)層的超時(shí)。任何一個(gè)用戶代理客戶端(user agent client UAC)完成的事情都是由一組事務(wù)構(gòu)成的。有關(guān)事務(wù)的討論在第17節(jié)有描述。用戶代理包含一個(gè)事務(wù)層,來(lái)實(shí)現(xiàn)有狀態(tài)的代理服務(wù)器。無(wú)狀態(tài)的代理服務(wù)器并不包含事務(wù)層。事務(wù)層包含一個(gè)客戶元素(可以認(rèn)為是一個(gè)客戶事務(wù))和一個(gè)服務(wù)器元素(可以認(rèn)為是一個(gè)服務(wù)器事務(wù)),他們都可以用一個(gè)有限狀態(tài)機(jī)來(lái)處理特定的請(qǐng)求。在事務(wù)層之上是事務(wù)用戶(TU)。每一個(gè)SIP實(shí)體,除了無(wú)狀態(tài)代理,都是一個(gè)事務(wù)用戶。當(dāng)一個(gè)TU發(fā)出一個(gè)請(qǐng)求,它首先創(chuàng)建一個(gè)客戶事務(wù)實(shí)例(client transaction instance)并且和請(qǐng)求一起發(fā)送,這包括了目標(biāo)IP地址、端口號(hào)、以及發(fā)送請(qǐng)求的設(shè)備。TU可以創(chuàng)建客戶事務(wù),也可以取消客戶事務(wù)。當(dāng)客戶取消一個(gè)事務(wù),它請(qǐng)求服務(wù)器終止正在處理的事務(wù),并且回滾狀態(tài)到該事務(wù)開(kāi)始前的狀態(tài),并且產(chǎn)生指定的該事務(wù)的錯(cuò)誤報(bào)告。這是由CANCEL請(qǐng)求完成的,這個(gè)請(qǐng)求有自己的事務(wù),并且包含一個(gè)被取消的事務(wù)(第9節(jié))。SIP要素,包含,用戶代理客戶端和服務(wù)器,無(wú)狀態(tài)和有狀態(tài)代理服務(wù)器和注冊(cè)服務(wù)器,包含一個(gè)可以互相區(qū)別的核心(Cores)。Cores,除了無(wú)狀態(tài)代理服務(wù)器,都是事務(wù)用戶。UAC(用戶代理客戶端)和UAS(用戶代理服務(wù)端)的cores的行為依賴于實(shí)現(xiàn),對(duì)所有的實(shí)現(xiàn)來(lái)說(shuō),有幾個(gè)公共的原則(第8節(jié))。對(duì)UAC來(lái)說(shuō),這些規(guī)則約束請(qǐng)求的建立;對(duì)UAS來(lái)說(shuō),這些規(guī)則約束請(qǐng)求的處理和應(yīng)答。由于注冊(cè)服務(wù)在SIP中是一個(gè)重要的角色,所以UAS處理REGISTER請(qǐng)求有一個(gè)特別的名字:登記員(registrar,登記服務(wù)器)。第10節(jié)描述了UAC和UAS的對(duì)REGISTER實(shí)現(xiàn)的core(核心)行為。第11節(jié)描述了OPTIONS的UAC和UAS的core實(shí)現(xiàn),這個(gè)OPTIONS用來(lái)檢測(cè)UA的處理能力的(UAuser agent)。在對(duì)話中,有其他的相關(guān)會(huì)被發(fā)送。一個(gè)對(duì)話是一個(gè)持續(xù)一定時(shí)間的兩個(gè)用戶之間的端到端的SIP關(guān)系。對(duì)話過(guò)程要求兩個(gè)用戶代理之間的信息是有序的而且請(qǐng)求被正確路由傳輸?shù)摹T谶@個(gè)規(guī)范中,只有INVITE請(qǐng)求可以用來(lái)建立會(huì)話。當(dāng)一個(gè)UAC在一個(gè)對(duì)話中發(fā)出請(qǐng)求的時(shí)候,它不僅遵循第8節(jié)描述的一般UAC規(guī)則而且也遵循對(duì)話中的請(qǐng)求規(guī)則。第12節(jié)講述了對(duì)話并且討論了對(duì)話的創(chuàng)建和維持,以及在對(duì)話中創(chuàng)建一個(gè)請(qǐng)求。SIP中最重要的方法就是INVITE方法,它用來(lái)在不同的參與者中創(chuàng)建會(huì)話使用。一個(gè)會(huì)話由一組參與者,他們之間用于交流的媒體流組成。第13節(jié)講述了這些會(huì)話的創(chuàng)建初始化過(guò)程,以及創(chuàng)建一個(gè)或一組對(duì)話。第14節(jié)講述了在對(duì)話中使用INVITE請(qǐng)求來(lái)改變會(huì)話的屬性。最后,第15節(jié),講述了如何終止會(huì)話。第111115節(jié)講述了完整的UA核心(第9節(jié)描述了取消,在UA核心和代理核心中使用)。第16節(jié)講數(shù)了代理服務(wù)器,代理服務(wù)器用于在兩個(gè)UA之間做消息路由使用。協(xié)議的定義以下講述的名次對(duì)SIP有著額外的意義:AddressofRecord: 記錄地址。一個(gè)addressofrecord(AOR)是一個(gè)SIP或者SIPS URI它指向了一個(gè)具有定位服務(wù)的主機(jī),這個(gè)主機(jī)可以把URI映射成為用戶真正物理位置的URI。通常情況下,定位服務(wù)器是通過(guò)登記服務(wù)來(lái)建立的。一個(gè)AOR經(jīng)常被認(rèn)為是一個(gè)用戶的”公共地址”BacktoBack UserAgent:背對(duì)背的用戶代理(B2BUA)是一個(gè)邏輯實(shí)體,它就像用戶代理服務(wù)器(UAS)一樣接收和處理請(qǐng)求。為了決定該如何應(yīng)答一個(gè)請(qǐng)求,B2BUA就像UAC一樣工作,并且發(fā)出請(qǐng)求。但是它不像代理服務(wù)器(proxy),它維持對(duì)話狀態(tài),并且參與已經(jīng)建立的對(duì)話中的每一個(gè)請(qǐng)求。由于它是直接的UAC和UAS的串連,所以,不需要對(duì)他有額外的定義。Call:呼叫,一個(gè)呼叫是一個(gè)非正式的術(shù)語(yǔ),它是指在端點(diǎn)之間一個(gè)一些通訊行為,通常用于建立多媒體對(duì)話。Call Leg: 對(duì)話的別名;在本規(guī)范中沒(méi)有使用。Call Stateful: 如果一個(gè)代理服務(wù)器(proxy)保存一個(gè)對(duì)話的狀態(tài)(從最開(kāi)始的INVITE到對(duì)話終結(jié)的BYE),那么這個(gè)代理服務(wù)器就是請(qǐng)求有狀態(tài)的。一個(gè)請(qǐng)求有狀態(tài)(call stateful)的代理服務(wù)器也一定是事務(wù)有狀態(tài)的,但是事務(wù)有狀態(tài)的不一定是請(qǐng)求有狀態(tài)的。Client:客戶端。一個(gè)客戶端是一個(gè)任意的網(wǎng)絡(luò)元素,它發(fā)出SIP請(qǐng)求和接收SIP應(yīng)答??蛻舳丝赡軙?huì)也可能不會(huì)和人交互。用戶代理客戶端(UAC)和代理服務(wù)器都是客戶端。Conference: 一個(gè)包含多個(gè)參與方的多媒體會(huì)話(見(jiàn)后)。Core:核心。核心定義了SIP實(shí)體的特定類別。比如定義了一個(gè)有狀態(tài)和無(wú)狀態(tài)的代理服務(wù)器,一個(gè)用戶代理或者注冊(cè)服務(wù)器(registrar)。所有的核心,除了無(wú)狀態(tài)代理服務(wù)器,都是事務(wù)用戶。Dialog:對(duì)話,一個(gè)對(duì)話是持續(xù)一段時(shí)間的兩個(gè)UA之間的端到端的SIP關(guān)系。一個(gè)對(duì)話由SIP消息建立,就像用2xx響應(yīng)INVITE請(qǐng)求。我們用Call identifier,local tag(本地tag),remote tag(對(duì)方tag)來(lái)標(biāo)志一個(gè)對(duì)話,一個(gè)對(duì)話在RFC 2543中被正式叫做CALL LEG.Downstream: 它是事務(wù)中的消息傳遞方向。它特指從UAC到UAS的請(qǐng)求流的方向, Final Response:終結(jié)響應(yīng)。一個(gè)響應(yīng)終端SIP事務(wù)的應(yīng)答,和事務(wù)中間的臨時(shí)響應(yīng)相反。所有的2xx,3xx,4xx,5xx,6xx響應(yīng)都是終結(jié)響應(yīng)。Header:頭。頭域是在SIP消息頭部用來(lái)描述這個(gè)SIP消息信息的部分。它由一堆頭域字段組成。Header Field:頭域字段。頭域字段是在SIP消息頭域的字段。一個(gè)頭域字段可以由多個(gè)頭域字段行組成。一個(gè)頭域字段由一個(gè)頭域名和(零個(gè)或多個(gè))頭域值組成。多個(gè)頭域值用’,’分割。某些頭域字段只能有單個(gè)值,比如結(jié)果域(result)就只能有一個(gè)值。Header Field Value:頭域值。一個(gè)頭域值是一個(gè)單個(gè)的值,一個(gè)頭域字段可以有0個(gè)或者多個(gè)頭域值。Home Domain:宿主機(jī)。一個(gè)提供SIP服務(wù)的主機(jī)。一般指的是在登記服務(wù)中指明的記錄地址中的URI的主機(jī)。Informational Response:提示應(yīng)答。和臨時(shí)應(yīng)答一樣。Initiator, Calling Party, Caller: 用INVITE初始一個(gè)會(huì)話(和對(duì)話)的那方。一個(gè)caller從發(fā)出INVITE請(qǐng)求建立對(duì)話開(kāi)始,到對(duì)話終止都一直是這個(gè)角色。Invitation: 一個(gè)INVITE請(qǐng)求。Invitee,Invited User,Called Party, Callee:被叫方。收到INVITE請(qǐng)求并且建立會(huì)話的那方。一個(gè)被叫方從收到INVITE請(qǐng)求起,到終止INVITE建立的對(duì)話結(jié)束,都稱作被叫方。Location Service: 定位服務(wù)。定位服務(wù)是用來(lái)給SIP轉(zhuǎn)發(fā)或者代理服務(wù)器確定被叫方可能的位置使用的。它包含一張綁定了addressofrecord的表,被叫方可能有0到多個(gè)記錄。綁定的記錄可以通過(guò)多種渠道添加和刪除;本規(guī)范定義了REGISTER方法來(lái)更新綁定表。Loop:環(huán)路。當(dāng)請(qǐng)求抵達(dá)一個(gè)代理服務(wù)器,代理服務(wù)器轉(zhuǎn)發(fā)這個(gè)請(qǐng)求,當(dāng)這個(gè)請(qǐng)求再次來(lái)到同一個(gè)代理服務(wù)器,就稱之為環(huán)路。當(dāng)?shù)诙蔚诌_(dá)的時(shí)候,Request-URI中包含了上次抵達(dá)的資料,并且由于并沒(méi)有什么東西可以改變轉(zhuǎn)發(fā)的策略,這樣就導(dǎo)致這個(gè)請(qǐng)求還會(huì)再次被轉(zhuǎn)發(fā)回來(lái)。環(huán)路請(qǐng)求是錯(cuò)誤的,所以,處理程序需要檢測(cè)和防止協(xié)議中出現(xiàn)的環(huán)路請(qǐng)求。Loose Routing:丟失路由。代理服務(wù)器在下述情況下會(huì)丟失路由。A proxy is said to be loose routing if it follows the procedures defined in this specification for processing of the Route header field. These procedures separate the destination of the request (present in the RequestURI) from the set of proxies that need to be visited along the way (present in the Route header field). A proxy pliant to these mechanisms is also known as a loose router.Message:消息。SIP元素之間傳送的協(xié)議數(shù)據(jù)就是消息。SIP消息既可以是請(qǐng)求也可以是應(yīng)答。Method:方法。方法是在服務(wù)器請(qǐng)求處理的主要功能。方法是請(qǐng)求消息自身攜帶的。典型的方法就是INVITE和BYE。Outbound Proxy:對(duì)外代理服務(wù)器。一個(gè)代理服務(wù)器接收到客戶的請(qǐng)求,即使它不是由Request_URI所決定的服務(wù)器。通常一個(gè)UA會(huì)手工配置一個(gè)對(duì)外的代理服務(wù)器,或者可以通過(guò)一個(gè)自動(dòng)配置的協(xié)議自動(dòng)配置一個(gè)。Parallel Search: 并行搜索。并行搜索情況下,代理服務(wù)器會(huì)向多個(gè)用戶可能存在的地方發(fā)起請(qǐng)求,并且等待應(yīng)答。同串行搜索不同的地方是,并行搜索不會(huì)等待上一個(gè)請(qǐng)求應(yīng)答回來(lái)之后再發(fā)起下一個(gè)搜索,而是一個(gè)接一個(gè)的發(fā)起搜索請(qǐng)求。Provisional Response: 臨時(shí)應(yīng)答。服務(wù)器用來(lái)標(biāo)志自己正在處理的應(yīng)答,但是本應(yīng)答并不結(jié)束一個(gè)SIP事務(wù)。1xx應(yīng)答就是臨時(shí)的,其他應(yīng)答標(biāo)志著事務(wù)的結(jié)束。Proxy,Proxy Server:代理、代理服務(wù)器。一個(gè)中間的實(shí)體。它本身即作為客戶端也作為服務(wù)端,為其他客戶端提供請(qǐng)求的轉(zhuǎn)發(fā)服務(wù)。一個(gè)代理服務(wù)器首先提供的是路由服務(wù),也就是說(shuō)保證請(qǐng)求被發(fā)到更加”靠近”目標(biāo)用戶的地方。代理服務(wù)器對(duì)某些強(qiáng)制政策有用(比如,確認(rèn)一個(gè)用戶是否允許建立一個(gè)呼叫等)。一個(gè)代理服務(wù)器翻譯,并且,如果有需要的話,再轉(zhuǎn)發(fā)前會(huì)重寫(xiě)請(qǐng)求消息。Recursion:回路、遞歸。一個(gè)客戶端,在響應(yīng)請(qǐng)求的時(shí)候產(chǎn)生新的到Contract包頭域的URI請(qǐng)求的時(shí)候,會(huì)在3xx響應(yīng)中陷入遞歸。A client recurses on a 3xx response when it generates a new request to one or more of the URIs in the Contact header field in the response.Redirect Server:重定向服務(wù)器。一個(gè)重定向服務(wù)器是一個(gè)產(chǎn)生3xx應(yīng)答的UAS服務(wù)器,指示客戶端連接別的URI。Registrar: 登記員。一個(gè)登記員(登記服務(wù)器)是一個(gè)接收REGISTER請(qǐng)求得服務(wù)器。他把請(qǐng)求得信息放到定位服務(wù)器中,這樣可以讓定位服務(wù)器很方便得查找位置信息。Regular Transaction:常規(guī)事務(wù)。凡不包含INVITE,ACK,或者CANCEL方法得事務(wù)就是常規(guī)事務(wù)。Request: 請(qǐng)求。 一個(gè)由客戶端發(fā)到服務(wù)端得SIP信息,用于執(zhí)行特定得功能。Response:應(yīng)答。一個(gè)由服務(wù)端發(fā)到客戶端得SIP信息。用來(lái)標(biāo)志從客戶端發(fā)往服務(wù)端得請(qǐng)求處理得情況得。Ringback: 回鈴音?;剽徱羰且粋€(gè)信號(hào)音。是給呼叫方得一個(gè)信號(hào)表示被叫方正在振鈴(Ringing)。Route Set: 路由集。路由集合是一個(gè)順序得SIP或者SIPS URI。這些URI描述了傳遞一個(gè)請(qǐng)求所必須經(jīng)歷得代理列表。一個(gè)路由集可以是自適應(yīng)得,因?yàn)榘^中包含了RecordRoute(記錄路由),也可以是依賴配置得到得。Server:服務(wù)器。一個(gè)server是一個(gè)網(wǎng)絡(luò)元素接收請(qǐng)求并且處理請(qǐng)求并且發(fā)送回應(yīng)給請(qǐng)求方。典型得服務(wù)器就是代理服務(wù)器(proxies),用戶代理服務(wù)器(user agent servers),重定向服務(wù)器,登記服務(wù)器。Sequential Search:順序查找。在順序查找中,代理服務(wù)器順序嘗試聯(lián)系地址,在處理下一個(gè)之前必須等待上一個(gè)請(qǐng)求已經(jīng)有一個(gè)結(jié)束應(yīng)答。一個(gè)2xx或者6xx系列得最終應(yīng)答總是結(jié)束一個(gè)順序查找。Session:會(huì)話。根據(jù)SDP得描述:”一個(gè)多媒體會(huì)話是一個(gè)由多媒體發(fā)送方和接受方組成得集合,并且包括在發(fā)送方和接受方之間得數(shù)據(jù)流。一個(gè)多媒體會(huì)議是一個(gè)典型得多媒體會(huì)話?!?RFC 2327[1])(一個(gè)session在SDP訂一下可以是一個(gè)或者多個(gè)RTP sessino)。在定義中,一個(gè)被叫方可以被多次邀請(qǐng),被不同得呼叫方邀請(qǐng),到同一個(gè)會(huì)話。在SDP中,一個(gè)會(huì)話可以被SDP用戶名,session id,網(wǎng)絡(luò)類型,地址類型,地址元素得一個(gè)集合串所規(guī)定。SI