SIP 中的Dialog,call锦积,session 和 transaction

一藏否、基本概念

1、Messages(消息)


消息是在服務(wù)器和客戶端之間交換的獨(dú)立文本, 有兩種類(lèi)型的消息,分別是請(qǐng)求(Requests)和響應(yīng)(Responses)充包。

兩種類(lèi)型的消息都由一個(gè)起始行副签、一個(gè)或多個(gè)頭字段、一個(gè)標(biāo)識(shí)頭字段結(jié)束的空行基矮、一個(gè)可選的消息體組成淆储。

2、Transaction(事務(wù))


事務(wù)發(fā)生于客戶端和服務(wù)器端之間,包含從客戶端發(fā)出請(qǐng)求給服務(wù)器,到服務(wù)器響應(yīng)給客戶端的最終消息(non-1xx message)之間的所有消息(也就是說(shuō)家浇,事務(wù)是一次完整的請(qǐng)求)本砰。如果請(qǐng)求是一個(gè)"Invite"消息,并且最終的響應(yīng)是一個(gè)non-2xx消息,那么該事務(wù)包含一個(gè)"Ack"響應(yīng)消息.如果服務(wù)器的響應(yīng)是一個(gè)2xx消息,那么,隨后的ACK是一個(gè)單獨(dú)的事務(wù).

Branch是一個(gè)事務(wù)ID(Transaction ID),用于區(qū)分同一個(gè)Client所發(fā)起的不同Transaction钢悲。

對(duì)于遵循RFC3261規(guī)范的實(shí)現(xiàn)点额,這個(gè)branch參數(shù)的值必須用magic cookie”z9hG4bK”打頭。其它部分是對(duì)“To, From, Call-ID頭域和Request-URI”按一定的算法加密后得到莺琳。

這7個(gè)字母是一個(gè)亂數(shù)cookie(定義成為7位的是為了保證舊s版本的RFC2543實(shí)現(xiàn)不會(huì)產(chǎn)生這樣的值)还棱,這樣服務(wù)器收到請(qǐng)求之后,可以很方便的知道這個(gè)branch ID是否由本規(guī)范所產(chǎn)生的(就是說(shuō)惭等,全局唯一的)珍手。

事務(wù)分類(lèi)


事務(wù)根據(jù)類(lèi)型還分Invite和Non-Invite型,即邀請(qǐng)和非邀請(qǐng)類(lèi)型辞做。Non-Invite類(lèi)型事務(wù)主要處理的是除Invite和ACK類(lèi)型外的所有Sip信息琳要。而非Invite里的ACK信息要處理的話就不屬于事務(wù)處理的范圍了,一般由程序自己把信息發(fā)送給傳輸層直接發(fā)送秤茅。Invite需要三次握手稚补,所以需要的時(shí)間比較長(zhǎng);而Non-Ivite類(lèi)型只需兩次握手框喳,要求回應(yīng)時(shí)間短课幕。

INVITE事務(wù)三次握手:

image.png

注意在上圖這兩個(gè)UA中,每一個(gè)代理服務(wù)器都將自己的地址加入返回的ACK的Via頭域中帖努,而非成功的transaction則不會(huì)加入撰豺。CSeq頭域的值必須與INVITE相同,并且CSeq的方法必須是ACK拼余。

中間響應(yīng)消息1xx的使用則是為了節(jié)省網(wǎng)絡(luò)開(kāi)銷(xiāo)設(shè)計(jì)的,一旦 UC 收到任何一個(gè)中間響應(yīng)消息亩歹,則UC必須停止消息重發(fā)定時(shí)器匙监,不再?gòu)陌l(fā)這個(gè)請(qǐng)求消息凡橱,反之則直到收到最終響應(yīng)消息或重發(fā)定時(shí)器超時(shí)。一旦客戶端UAC的事務(wù)在Calling狀態(tài)收到任何中間響應(yīng)消息1xx亭姥,事務(wù)則自動(dòng)切換到Processing狀態(tài)稼钩,停止請(qǐng)求消息的重發(fā)。并且需要將中間響應(yīng)消息傳送給TU事務(wù)用戶达罗。在呼叫業(yè)務(wù)中坝撑,TU以及上層應(yīng)用可以根據(jù)中間響應(yīng)消息在用戶界面上提示用戶。一旦事務(wù)切換到Processing狀態(tài)粮揉,任何其他中間響應(yīng)消息也都要傳送給TU巡李。

注意,從INVITE到200OK都是一個(gè)事務(wù)(branck值相同)扶认,而最后的確認(rèn)消息ACK卻是一個(gè)的單獨(dú)的事務(wù)侨拦。后面的BYE到200OK又屬于另一個(gè)新的事務(wù)。

INVITE響應(yīng):

image.png

ACK響應(yīng):

image.png

這里抓包和上面提到的一致辐宾。

非INVITE二次握手:

image.png

當(dāng)UAC發(fā)出non-INVITE請(qǐng)求時(shí)狱从,它就會(huì)在事務(wù)管理子層上開(kāi)啟定時(shí)器F(TCP)或者是E(UDP),確保超時(shí)的時(shí)候進(jìn)行重傳叠纹。這適用于除了 ACK請(qǐng)求外的其他非INVITE請(qǐng)求季研。每次超時(shí)重傳時(shí)E的時(shí)間都被翻倍,直到最大的4秒誉察。而F超時(shí)時(shí)训貌,UAC就會(huì)認(rèn)為是Timeout,這個(gè)事務(wù)將被刪除冒窍。

3递沪、Dialog(對(duì)話)


會(huì)話是兩個(gè)UAs(user agent) 之間持續(xù)一段時(shí)間的端到端(peer-to-peer)的SIP 關(guān)系.?一個(gè)會(huì)話由一個(gè)Call-ID, 一個(gè)local tag 和 一個(gè)remote tag來(lái)標(biāo)識(shí).會(huì)話過(guò)去也叫做 "call leg"。一個(gè)對(duì)話由SIP消息建立综液,就像用2xx響應(yīng)INVITE請(qǐng)求款慨。

dialog的建立是客戶端收到UAS的響應(yīng)(To tag)時(shí)開(kāi)始建立的。**收到180響應(yīng)時(shí)建立dialog叫做早期對(duì)話(early dialog),收到2XX的應(yīng)答開(kāi)始才是真正的dialog建立谬莹。

4檩奠、Session(會(huì)話)


用于進(jìn)行媒體流傳送。當(dāng)一方發(fā)出請(qǐng)求附帽,而另外一方或多方接受請(qǐng)求并通過(guò)信令交互成功后才能建立會(huì)話埠戳。具體而言就是通過(guò)offer/answer方式交換sdp的媒體。

具體來(lái)說(shuō)蕉扮,INVITE中的消息體用sdp語(yǔ)言來(lái)描述自己可處理的媒體類(lèi)型整胃,200OK中帶回UAS端可處理的媒體類(lèi)型。這個(gè)時(shí)候媒體交換就算是完成了喳钟。也就是session建立起來(lái)了屁使。

一次呼叫只能建立一次會(huì)話在岂,但可以建立多個(gè)對(duì)話(Dialog),因?yàn)榻邮苷?qǐng)求的可能不止一個(gè)蛮寂。

5蔽午、Call(呼叫)


一個(gè)呼叫是由一個(gè)會(huì)議中被同一個(gè)發(fā)起者邀請(qǐng)加入的所有成員組成的。一個(gè) SIP 呼叫用全局唯一呼叫標(biāo)識(shí)(CALL_ID)來(lái)識(shí)別酬蹋。因此及老,如果一個(gè)用戶被不同的人邀請(qǐng)參加同一個(gè)多點(diǎn)會(huì)議,每個(gè)邀請(qǐng)都有一個(gè)唯一的呼叫范抓。


SIP幾個(gè)重要的參數(shù)


  1. 如下三個(gè)值相同代表同一個(gè)dailog(會(huì)話)

Call-id

Form tag

To tag

2)branch值相同骄恶,代表同一個(gè) transaction(事務(wù))

3) cseq

Cseq,其生存域是一個(gè)會(huì)話尉咕。用于將一個(gè)會(huì)話中的請(qǐng)求消息序列化叠蝇,以便用于重復(fù)消息、“遲到”消息的檢測(cè)年缎,響應(yīng)消息與相應(yīng)請(qǐng)求消息的匹配等悔捶。包含兩部分:一個(gè)32位的序列號(hào),一個(gè)請(qǐng)求方法单芜。
通常在會(huì)話開(kāi)始時(shí)確定一個(gè)初始值蜕该,其后再發(fā)送消息時(shí)將該值加1。主叫方與被叫叫各自維護(hù)自己的CSeq序列洲鸠,互不干擾堂淡,這有點(diǎn)像TCP/IP中IP包的序列號(hào)。
一個(gè)響應(yīng)消息有與其對(duì)應(yīng)的請(qǐng)求消息相同的CSeq值扒腕。

【注意】SIP中CANCEL消息與ACK消息總是比較特殊绢淀。CANCEL消息的CSeq中的序列號(hào)總是跟其要cancel的消息的相同,而對(duì)于ACK消息:如果它所要確認(rèn)的是INVITE請(qǐng)求的non-2xx響應(yīng)瘾腰,則ACK消息的CSeq中的序列號(hào)與對(duì)應(yīng)INVITE請(qǐng)求的相同皆的;如果是2xx響應(yīng),則不同蹋盆,此時(shí)ACK被當(dāng)作一個(gè)新的事務(wù)费薄。


Dialog,call栖雾,session 和 transaction關(guān)系圖


image.png

Transaction:維護(hù)hop to hop狀態(tài)楞抡,包括一個(gè)請(qǐng)求和其觸發(fā)的所有響應(yīng),包括若干暫時(shí)響應(yīng)和一個(gè)最終響應(yīng)析藕。生命周期從請(qǐng)求產(chǎn)生到收到最終響應(yīng)召廷。

Dialog:維護(hù)peer to peer狀態(tài),目前只有invite和subscribe請(qǐng)求會(huì)觸發(fā)dialog。其生命周期貫穿一個(gè)端到端會(huì)話的始終柱恤。


Early dialog数初、Session找爱、Dialog梗顺、Transaction等的在一個(gè)UA-UA的呼叫中的體現(xiàn):


image.png

在這個(gè)例子中,通過(guò)INVITE事務(wù)而成功建立起來(lái)的dialog必須有一個(gè)ACK進(jìn)行回應(yīng)车摄,這是第二個(gè)transaction的開(kāi)始寺谤,盡管ACK并沒(méi)有回復(fù),但是由于新的 branch-value被填入吮播,所以這個(gè)ACK代表了一個(gè)新的Transaction的開(kāi)始变屁。注意,此時(shí) transaction number (CSeq) 并沒(méi)有根據(jù)INVITE而增加--也就是說(shuō)若收到的最終響應(yīng)不是2XX(是3XX--6XX)意狠,則該transaction中包含ACK粟关,若最終響應(yīng)是2XX,則ACK屬于一個(gè)新的transaction环戈。


參考資料

SIP協(xié)議入門(mén):初學(xué)者必須明白的幾個(gè)重要概念(原創(chuàng))
SIP 中的Dialog闷板,call,session 和 transaction

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末院塞,一起剝皮案震驚了整個(gè)濱河市遮晚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拦止,老刑警劉巖县遣,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異汹族,居然都是意外死亡萧求,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)顶瞒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)夸政,“玉大人,你說(shuō)我怎么就攤上這事搁拙∶胧幔” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵箕速,是天一觀的道長(zhǎng)酪碘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)盐茎,這世上最難降的妖魔是什么兴垦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上探越,老公的妹妹穿的比我還像新娘狡赐。我一直安慰自己,他們只是感情好钦幔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布枕屉。 她就那樣靜靜地躺著,像睡著了一般鲤氢。 火紅的嫁衣襯著肌膚如雪搀擂。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天卷玉,我揣著相機(jī)與錄音哨颂,去河邊找鬼。 笑死相种,一個(gè)胖子當(dāng)著我的面吹牛威恼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寝并,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼箫措,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了食茎?” 一聲冷哼從身側(cè)響起蒂破,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎别渔,沒(méi)想到半個(gè)月后附迷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哎媚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年喇伯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拨与。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稻据,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出买喧,到底是詐尸還是另有隱情捻悯,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布淤毛,位于F島的核電站今缚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏低淡。R本人自食惡果不足惜姓言,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一瞬项、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧何荚,春花似錦囱淋、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至唠倦,卻和暖如春称鳞,著一層夾襖步出監(jiān)牢的瞬間涮较,已是汗流浹背稠鼻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狂票,地道東北人候齿。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像闺属,于是被迫代替她去往敵國(guó)和親慌盯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一掂器、 SIP協(xié)議的分層結(jié)構(gòu) SIP是一個(gè)分層結(jié)構(gòu)協(xié)議亚皂,它的行為根據(jù)一組平等獨(dú)立的處理階段來(lái)描述,每一階段之間只是松...
    電臺(tái)_Fang閱讀 4,422評(píng)論 0 1
  • SIP概括 會(huì)話初始協(xié)議(Session Initiation Protocal, SIP)国瓮。SIP是一個(gè)應(yīng)用層的...
    耦耦閱讀 15,806評(píng)論 0 13
  • 一灭必、SIP簡(jiǎn)介 1. 什么是SIP? 會(huì)話初始化協(xié)議 SIP( Session Initiation Proto...
    LonelyBanana閱讀 4,508評(píng)論 0 24
  • 引言 通過(guò)語(yǔ)音傳遞信息是人類(lèi)最重要、最常用和最方便的交換信息的形式乃摹。語(yǔ)言是人類(lèi)持有的功能禁漓,聲音是人類(lèi)常用的工具,是...
    點(diǎn)融黑幫閱讀 964評(píng)論 2 9
  • 姓名:吳廣明 公司:力創(chuàng)商業(yè)地產(chǎn) 盛和商學(xué)第346期努力二組副隊(duì)長(zhǎng) 【知~學(xué)習(xí)】 《六項(xiàng)精進(jìn)》大綱背誦1遍共83...
    吳廣明閱讀 158評(píng)論 0 0