sip請(qǐng)求是什么
sip請(qǐng)求是什么
SIP協(xié)議中,比較有特點(diǎn)的就是SIP事務(wù)了。那么想要理解SIP事務(wù)的概念,我們還需要了解sip請(qǐng)求的一些內(nèi)容。學(xué)習(xí)啦小編在這里就給大家介紹sip請(qǐng)求。
sip事務(wù)的概念:一個(gè)sip請(qǐng)求以及由它觸發(fā)的一系列應(yīng)答(包括臨時(shí)應(yīng)答和一個(gè)最終應(yīng)答)。
sip請(qǐng)求有6種(核心規(guī)范定義的,也有擴(kuò)展),也叫6個(gè)方法(Method字段標(biāo)識(shí)):INVITE, ACK, OPTIONS, BYE, CANCEL, REGISTER
sip請(qǐng)求的格式包括請(qǐng)求行(如INVITE sip:192.168.101.30 SIP/2.0),sip應(yīng)答的格式包括狀態(tài)行(如SIP/2.0 100 Trying);sip應(yīng)答的狀態(tài)碼從100到699,其中100~199是臨時(shí)(provisional)應(yīng)答。
sip請(qǐng)求:INVITE請(qǐng)求是三次握手機(jī)制,其他請(qǐng)求都采用兩次握手機(jī)制。
sip請(qǐng)求:CANCEL 請(qǐng)求用于取消懸而未決的事務(wù),我的理解是一方發(fā)出INVITE,但是另一方始終沒有做出應(yīng)答,發(fā)出200OK消息(超過了默認(rèn)的振鈴時(shí)長),那么UAC會(huì) 自動(dòng)發(fā)出一個(gè)CANCEL請(qǐng)求,UAS返回200OK,并且同時(shí)發(fā)出487狀態(tài)碼的應(yīng)答,UAC再對(duì)收到的487消息發(fā)出ACK確認(rèn),即最開始的 INVITE和487以及ACK構(gòu)成三次握手。
sip請(qǐng)求:OPTIONS請(qǐng)求用于詢問服務(wù)器的性能情況,包括這個(gè)服務(wù)器所支持的方法(可能會(huì)有擴(kuò)展方法)和會(huì)話描述協(xié)議。
代理服務(wù)器的三種類型:保留呼叫狀態(tài)代理、保留狀態(tài)代理、不保留狀態(tài)代理。這三種類型的代理在處理能力和所占用資源上有差別,在代理分發(fā)中我們采用網(wǎng)絡(luò)核心無狀態(tài),而在流量較小的網(wǎng)絡(luò)邊界采用智能性高的保留(呼叫)狀態(tài)服務(wù)器處理路由。
sip消息編碼采用文本方式(即使用字符串),相對(duì)的是二進(jìn)制的編碼方式,前者易于調(diào)試和擴(kuò)展,后者則有利于節(jié)省帶寬。
sip標(biāo)題頭:
CALL-ID 字 段用于標(biāo)識(shí)一個(gè)特定邀請(qǐng)以及與這個(gè)邀請(qǐng)相關(guān)的所有后續(xù)事務(wù)(即標(biāo)識(shí)一個(gè)會(huì)話),比如一方發(fā)起邀請(qǐng)加入一個(gè)國際象棋的會(huì)話,那么INVITE請(qǐng)求以及應(yīng)答, BYE請(qǐng)求以及應(yīng)答都共享一個(gè)CALL-ID,因?yàn)檫@兩個(gè)事務(wù)都屬于一個(gè)特定邀請(qǐng)。而兩個(gè)用戶之間可以同時(shí)存在多個(gè)邀請(qǐng)(比如在下象棋的同時(shí)發(fā)起聊天的邀 請(qǐng)),那么一個(gè)邀請(qǐng)中的后續(xù)事務(wù)將通過這個(gè)邀請(qǐng)?zhí)赜械腃ALL-ID來區(qū)分,如一方發(fā)出BYE消息來結(jié)束聊天,但是下棋仍然進(jìn)行中,那么另一方將根據(jù) BYE消息的CALL-ID來確定要結(jié)束的究竟是哪一個(gè)會(huì)話。
CSeq 字段是用來給同一個(gè)會(huì)話中的 事務(wù)進(jìn)行排序的??梢岳斫鉃?,會(huì)話由CALL-ID來標(biāo)識(shí),會(huì)話中的事務(wù)則由CSeq標(biāo)識(shí)。除了ACK請(qǐng)求和CANCEL請(qǐng)求,INVITE之后的請(qǐng)求中 CSeq字段的數(shù)字是最初請(qǐng)求(INVITE)的CSeq遞增的結(jié)果。而ACK和CANCEL請(qǐng)求則擁有與它所確認(rèn)(取消)的請(qǐng)求相同的CSeq數(shù)字部 分,只是方法名不同。
Contact 字段是被呼叫方發(fā)送200OK消息時(shí)帶上的,包含了被叫方的真實(shí)IP,這樣sip服務(wù)器在路由第一個(gè)INVITE請(qǐng)求之后就可以被卸載掉(越過),不再需要存在于信令路徑中。
Recode-Route和Route字 段是用來使sip服務(wù)器保留在每次請(qǐng)求中,不被繞過。Record-Route字段由信令路徑上的服務(wù)器添加(每經(jīng)過一個(gè)信令路徑上必須存在的代理,就添 加一個(gè)Record-Route標(biāo)題頭),maddr參數(shù)包含該代理的IP地址。被叫方發(fā)出的200OK應(yīng)答包含Record-Route和 Contact字段(Record-Route可能有多個(gè)),呼叫方收到200OK后根據(jù)這兩個(gè)字段創(chuàng)建用于后續(xù)請(qǐng)求的Route標(biāo)題頭(可能有多個(gè)), 其包含的是信令路徑上的下一跳的下一跳的(hehe,有點(diǎn)別扭,不過意思是對(duì)的)真實(shí)IP。
To 字段 總是包含被呼叫方的地址(通過sip代理時(shí)是公用地址,點(diǎn)對(duì)點(diǎn)時(shí)是真實(shí)ip),要注意的是區(qū)別該標(biāo)題頭和sip消息請(qǐng)求行中的Request-URI。 To在信令路徑中不會(huì)被代理改變,然而Request-URI包含的是信令路徑中下一跳的地址,因此在路途中被每個(gè)代理改變。
Via 字 段存儲(chǔ)所有處理請(qǐng)求的代理地址(包括用戶代理和sip代理),它可以用來檢測路由循環(huán),也用于使應(yīng)答消息經(jīng)過請(qǐng)求消息來時(shí)相同的路徑(方向相反)。因此, 在請(qǐng)求消息發(fā)送時(shí),via標(biāo)題頭的數(shù)量是隨著跳數(shù)逐漸增加的,而應(yīng)答消息返回時(shí),via標(biāo)題頭的數(shù)量則逐漸遞減(每經(jīng)過一跳則剝離一個(gè)有它自己地址的 Via標(biāo)題頭)。
sip消息可能含有消息體(一個(gè)或多個(gè)),通常是會(huì)話描述符,也可以是照片或其他附件。一般情況下,消息體只對(duì)UA有意義,因此可被端到端加密。有時(shí)候,sip代理處于控制的原因也需要檢查被交換媒體的信息。
sip請(qǐng)求中NVITE事務(wù):
SIP使用UDP傳輸協(xié)議來傳送INVITE消息時(shí),要使用逐 跳重傳機(jī)制保證INVITE的最終傳送,即用戶代理UA和sip代理proxy都要保證INVITE到達(dá)下一跳,下一跳收到時(shí)會(huì)返回一個(gè)臨時(shí)應(yīng)答 (proxy返回100Trying,UA返回100Trying和180ringing),代理在限定時(shí)間內(nèi)收不到應(yīng)答即會(huì)重傳INVITE。
臨時(shí)應(yīng)答(100~199)用于阻止逐跳INVITE重傳,沒有端到端的可靠傳輸,也就是說當(dāng)被叫方返回180應(yīng)答時(shí),如果在路徑中途丟失,也不會(huì)重傳。
最終應(yīng)答(200~699)能被保證到達(dá)它們想要去的目的地。
成 功應(yīng)答(200~299)被可靠地傳送到呼叫方UA,但不是使用逐跳重傳機(jī)制。只有呼叫方UA能為最終成功應(yīng)答發(fā)送一個(gè)ACK(直接發(fā)送到被叫方UA), 如果成功應(yīng)答在路徑中途丟失或者UA發(fā)出的ACK丟失,那么被叫方會(huì)在限定時(shí)間內(nèi)收不到ACK時(shí)重新發(fā)送最終應(yīng)答,直到收到ACK的確認(rèn)。
非成功最終應(yīng)答(300~699)使用和INVITE一樣的逐跳機(jī)制。被叫方用戶代理將持續(xù)重傳非成功應(yīng)答(給前一跳),直到收到ACK為止(proxy也可以為非成功應(yīng)答發(fā)送ACK)。
sip請(qǐng)求中CANCEL事務(wù):
CANCEL事務(wù)與INVITE事務(wù)都是逐跳事務(wù),但是處理方法不同,路徑上的每一個(gè)代理收到CANCEL請(qǐng)求時(shí),都會(huì)發(fā)送一個(gè)最終應(yīng)答來響應(yīng)(而不是發(fā)出臨時(shí)應(yīng)答),并且向下一跳發(fā)送一個(gè)CANCEL請(qǐng)求。