sip協議中,比較有特點的就是sip事務了。那麼想要理解sip事務的概念,我們還需要了解sip請求的一些內容。
sip事務的概念:乙個sip請求以及由它觸發的一系列應答(包括臨時應答和乙個最終應答)。
sip請求有6種(核心規範定義的,也有擴充套件),也叫6個方法(method欄位標識):
invite, ack, options, bye, cancel, register
sip請求的格式包括請求行(如invite sip:192.168.101.30 sip/2.0),
sip應答的格式包括狀態行(如sip/2.0 100 trying);sip應答的狀態碼從100到699,其中100~199是臨時(provisional)應答。
sip請求:invite請求是三次握手機制,其他請求都採用兩次握手機制。
sip請求:cancel 請求用於取消懸而未決的事務,我的理解是一方發出invite,但是另一方始終沒有做出應答,
發出200ok訊息(超過了預設的振鈴時長),那麼uac會 自動發出乙個cancel請求,uas返回200ok,
並且同時發出487 (sip_request_terminated 487 //請求無應答 ) 狀態碼的應答,
uac再對收到的487訊息發出ack確認,即最開始的 invite和487以及ack構成三次握手。
sip請求:options請求用於詢問伺服器的效能情況,包括這個伺服器所支援的方法(可能會有擴充套件方法)和會話描述協議。
**伺服器的三種型別:保留呼叫狀態**、保留狀態**、不保留狀態**。這三種型別的**在處理能力和
所占用資源上有差別,在**分發中我們採用網路核心無狀態,而在流量較小的網路邊界採用智慧型性高的保留(呼叫)狀態伺服器處理路由。
sip訊息編碼採用文字方式(即使用字串),相對的是二進位制的編碼方式,前者易於除錯和擴充套件,後者則有利於節省頻寬。
sip標題頭:
邀請(比如在下象棋的同時發起聊天的邀 請),那麼乙個邀請中的後續事務將通過這個邀請特有的call-id來區分,如一方發出bye訊息來結束聊天,
但是下棋仍然進行中,那麼另一方將根據 bye訊息的call-id來確定要結束的究竟是哪乙個會話。該文章講述了理解sip事務的概念2.
cseq 欄位是用來
給同乙個會話中的 事務進行排序的。可以理解為,會話由call-id來標識,會話中的事務則由cseq標識。除了ack請求和cancel請求,invite之後的請求中 cseq欄位的數字是最初請求(invite)的cseq遞增的結果。而ack和cancel請求則擁有與它所確認(取消)的請求相同的cseq數字部 分,只是方法名不同。
contact 欄位是被呼叫方傳送200ok訊息時帶上的,包含了被叫方的真實ip,這樣sip伺服器在路由第乙個invite請求之後就可以被解除安裝掉(越過),不再需要存在於信令路徑中。
to 字段 總是包含被呼叫方的位址(通過sip**時是公用位址,點對點時是真實ip),要注意的是區別該標題頭和sip訊息請求行中的request-uri。 to在信令路徑中不會被**改變,然而request-uri包含的是信令路徑中下一跳的位址,因此在路途中被每個**改變。
via 字 段儲存所有處理請求的**位址(包括使用者**和sip**),它可以用來檢測路由迴圈,也用於使應答訊息經過請求訊息來時相同的路徑(方向相反)。因此, 在請求訊息傳送時,via標題頭的數量是隨著跳數逐漸增加的,而應答訊息返回時,via標題頭的數量則逐漸遞減(每經過一跳則剝離乙個有它自己位址的 via標題頭)。
(sip標題頭完)
sip訊息可能含有訊息體(乙個或多個),通常是會話描述符,也可以是**或其他附件。一般情況下,訊息體只對ua有意義,因此可被端到端加密。
有時候,sip**處於控制的原因也需要檢查被交換**的資訊。
sip請求中nvite事務:
sip使用udp傳輸協議來傳送invite訊息時,要使用逐 跳重傳機制保證invite的最終傳送,即使用者**ua和sip**proxy都要保證invite
到達下一跳,下一跳收到時會返回乙個臨時應答 (proxy返回100trying,ua返回100trying和180ringing),**在限定時間內收不到應答即會重傳invite。
臨時應答(100~199)用於阻止逐跳invite重傳,沒有端到端的可靠傳輸,也就是說當被叫方返回180應答時,如果在路徑中途丟失,也不會重傳。
最終應答(200~699)能被保證到達它們想要去的目的地。
成 功應答(200~299)被可靠地傳送到呼叫方ua,但不是使用逐跳重傳機制。只有呼叫方ua能為最終成功應答傳送乙個ack(直接傳送到被叫方ua),
如果成功應答在路徑中途丟失或者ua發出的ack丟失,那麼被叫方會在限定時間內收不到ack時重新傳送最終應答,直到收到ack的確認。
非成功最終應答(300~699)使用和invite一樣的逐跳機制。被叫方使用者**將持續重傳非成功應答(給前一跳),直到收到ack為止(proxy也可以
為非成功應答傳送ack)。
sip請求中cancel事務:
cancel事務與invite事務都是逐跳事務,但是處理方法不同,路徑上的每乙個**收到cancel請求時,都會傳送乙個最終應答來響應
(而不是發出臨時應答),並且向下一跳傳送乙個cancel請求。
事務的概念
mysql5.x都已經發布好久了,但是還有很多人認為mysql是不支援事務處理的,這不得不怪他們是孤陋寡聞的,其實,只要你的mysql版本支援bdb或innodb表型別,那麼你的mysql就具有事務處理的能力。這裡面,又以innodb表型別用的最多,雖然後來發生了諸如oracle收購innodb等令...
事務的概念
1.什麼是事務 所謂的事務,它是乙個操作序列,這組操作序列要麼都執行,要麼都不執行,它是不可分割的工作單位 所謂的事務,它是一組的sql語句的序列,這組操作序列要麼都執行,要麼都不執行,它是不可分割的工作單位 2.事務的特性 原子性a 乙個事務是乙個不可分割的工作單位,事務中包括的操作要麼都做要麼都...
事務的概念
1 事務 transaction 是併發控制的單位,是使用者定義的乙個操作序列。這些操作要麼都做,要麼都不做,是乙個不可分割的工作單位。通過事務,sql server能將邏輯相關的一組操作繫結在一起,以便伺服器保持資料的完整性。2 事務通常是以begin transaction開始,以commit或...