SIP IP 電話系統的呼叫路由

2021-06-15 18:28:18 字數 4735 閱讀 6591

1 引言

sip ip **系統的呼叫路由過程是由使用者**、**伺服器、註冊伺服器共同協調完成的。其中使用者**用於發起和接收呼叫, **伺服器負責對呼叫請求和響應訊息進行**。註冊伺服器接受使用者**的註冊請求並更新定位伺服器中使用者的位址對映資訊。

本文將在[1]的基礎上對sip 的呼叫路由過程進行介紹。主要內容有基本的概念和術語、註冊/登出過程、對話內和對話外的呼叫路由過程以及移動時的呼叫路由過程等。

2 基本概念

2.1 請求資源標識

2.2 路由記錄和路由頭部

路由記錄(record route)頭部的作用是記錄請求訊息經過的路徑,用**伺服器sip uri 位址序列的形式來表示。該頭部由請求訊息經過的**伺服器根據需要插入, 用以強制本對話後續的所有請求訊息必須經過本**伺服器。

路由(route) 頭部的作用與tcp/ip 中源點選路選項的作用非常類似。該頭部作為請求訊息的一部分, 描述了本請求訊息必須經過的**伺服器列表。路由頭部也以**伺服器sip uri 列表的形式來表示,在構造請求訊息時由使用者**客戶生成。對於尚未建立對話( 稱為對話外) 的請求訊息,路由頭部一般根據預設路由集的內容來設定。而對於已建立對話( 稱為對話內) 的請求訊息, 路由頭部則根據該對話路由集(route set) 的內容來設定。

2.3 路由集

路由集是乙個sip uri 序列,它表示使用者**在對話內向對端使用者**傳送請求訊息時必須要經過的伺服器列表。路由集的內容是從建立對話的請求或響應訊息攜帶的路由記錄頭部抽取出來的, 它僅在本對話的範圍內有效。

3 註冊和登出過程

sip 採用了邏輯位址和聯絡位址相分離的思想。邏輯位址用於標識使用者, 而聯絡位址表明使用者的當前位置。這種分離為使用者的移動性提供了技術上的可能性。為了實現邏輯位址和聯絡位址之間的動態對映, 必須要有註冊和登出過程的支援。

註冊: 當使用者**要向註冊伺服器新增乙個位址對映記錄時,contact 域包含要增加的聯絡位址資訊,通過expires 頭部域或該位址資訊的expires 引數來宣告該聯絡位址的生命期。使用者可通過乙個register 請求訊息同時增加多個位址對映記錄。

重新整理: 當要重新整理乙個位址對映記錄時,contact 域包含要重新整理的聯絡位址資訊, 通過expires 頭部域或該位址資訊的expires 引數宣告該註冊位址的生命期來對對映記錄進行重新整理。使用者可以對某個特定的記錄進行重新整理, 也可以同時重新整理多個對映記錄。

登出: 當使用者**要刪除乙個對映記錄時, 可在contact 域中填寫要刪除的聯絡位址資訊, 並將expires 引數置0, 註冊伺服器收到後就會刪除該對映記錄。如果將contact 域設為「*」, 且expires 頭部域設為0, 將會刪除該使用者的所有聯絡位址對映記錄。

4 呼叫路由

sip 系統的呼叫路由從本質上而言是invite 請求訊息的路由過程。它包含了使用者**客戶如何構建請求訊息, 傳送給下一跳; **伺服器如何處理請求訊息, **給下一跳; 直至請求訊息到達入向**, 並傳送給使用者**伺服器這樣乙個過程。在呼叫過程中, 下一跳的uri 位址一旦確定, 就可以使用rfc 3263[3]定義的dns 查詢過程來確定使用的傳輸協議、目標ip 位址和埠號, 從而將訊息傳送給下一跳。下面分對話外的呼叫路由和對話內的呼叫路由兩種情況進行介紹。

4.1 對話外的路由

對話外的路由指使用者**客戶使用invite 請求訊息發起呼叫時的路由過程。

4.1.1 使用者**客戶

路由(route) 頭部域的處理比較複雜。一般情況下, 使用者**客戶有乙個預設路由集, 包含了該使用者**客戶傳送請求訊息時必須要經過的**伺服器列表。這樣可以對請求訊息的路由進行靈活的控制。預設路由集的最簡單應用就是只包含出向**的sip uri 位址。這樣所有的請求訊息都將被傳送到出向**, 由出向**負責對訊息進行**。使用者**客戶將預設路由集的內容作為路由頭部, 按次序插入到請求訊息中。

完成上述步驟後, 就要對request-uri 進行dns 查詢以獲取下一跳的ip 位址、埠號和使用的傳輸協議。使用者**客戶在請求訊息中插入via 頭部( 包含自己的主機位址、埠號、使用的傳輸協議等資訊), 將請求訊息傳送給下一跳。

4.1.2 **伺服器

**伺服器收到請求訊息後, 首先對其合法性進行檢查。可能的步驟有: 語法檢查、request-uri 檢查、環路檢測等。為了實現後向相容性, **伺服器還要對請求訊息進行進一步處理, 以形成乙個滿足rfc 3261 要求的標準請求訊息。

如果本**伺服器是中間**伺服器(request-uri 中的域不是由本**伺服器負責), 那麼該請求訊息的目標就是request-uri, 無需執行更多的操作。

如果**伺服器要求由本請求訊息建立的對話的後續請求訊息必須經過本**伺服器, 它將自己的sip uri 插入到路由記錄頭部的最前面。然後根據請求資源標識的內容確定下一跳的ip 位址、埠號, **伺服器在請求訊息中插入via 頭部, 將訊息傳送給下一跳。

4.1.3 使用者**伺服器

使用者**伺服器收到請求訊息後, 若訊息合法, 將準備以成功響應回送, 並建立對話。使用者**伺服器要為該對話構建對話上下文。其路由集的內容根據請求訊息包含的路由記錄頭部來構建, 它表明了從被叫到主叫的請求訊息必須經過的**伺服器的列表。

由於via 頭部標明了請求訊息的傳送路徑,響應訊息將沿該路徑原路返回到傳送方的使用者**客戶。

4.1.4 重定向

sip 定義了重定向伺服器, 可以根據配置對呼叫請求進行重定向。比如: 某使用者開啟了呼叫前轉服務, 如果收到對它的呼叫請求就可以通過重定向來響應。再如, 如果重定向伺服器通過查詢定位伺服器發現使用者已經移動出了本域,它也可以通過重定向指示主叫使用者**重新發起呼叫。

重定向伺服器可以和入向**伺服器或使用者**伺服器放置在一起,以實現對呼叫請求的控制。當重定向伺服器確定要對乙個請求訊息重定向後, 它將構造乙個重定向響應訊息。響應訊息的to、from、via 等頭部的內容從請求訊息拷貝。contact 域的內容包括重定向的目標位址列表。重定向響應訊息將根據via 頭部的內容按原路返回給使用者**客戶。使用者**客戶收到重定向響應後, 根據響應訊息contact 頭部域的內容構建新的目標集並使用對話外的呼叫路由過程重新發起呼叫請求。

4.2 對話內的路由

當對話建立後, 使用者**客戶和使用者**伺服器將為對話建立對話上下文。對話上下文包含了對話雙方的邏輯位址、聯絡位址、請求訊息經過的路由集等資訊。有了這些資訊, 請

求訊息的路由過程就變得非常簡單。由於**伺服器無法感知到對話的存在, 對話內傳送請求訊息時, **伺服器的行為與對話外相同。

4.2.1 使用者**客戶和伺服器

當使用者**客戶要構建乙個請求訊息時, 訊息的to、from 域的內容分別設定為對話上下文的遠端uri 和本地uri。request-uri 的值設定為對話上下文的遠端目標。對話上下文的路由集作為路由頭部插入請求訊息中。訊息構建完成後傳送給下一跳。

使用者**伺服器的動作更為簡單, 收到請求訊息後加以處理並給予適當的響應。響應訊息按照via 頭部的路徑原路返回到使用者**客戶。

如果收到成功響應, 本次請求操作成功完成。如果收到重定向響應, 對重定向響應訊息進行相應的處理。

4.2.2 目標重新整理

對話過程中乙個非常重要的過程是目標重新整理, 即重新整理使用者的聯絡位址和會話引數。在對話過程中, 如果任一方的聯絡位址或會話引數發生變化, 都可以通過目標重新整理通知對方。

5 移動時的呼叫路由

為了滿足多**通訊系統移動性的需要,sip 在設計的初期就考慮到了對移動性的支援, 並採用了多種簡單、靈活的機制。比如邏輯位址和聯絡位址分離、註冊/登出、目標重新整理等等。sip 的使用者**、註冊伺服器和**伺服器在移動框架中都承擔了一定的功能。

5.1 移動框架

sip 的移動框架包括位址分離機制、註冊/登出、呼叫重定向和目標重新整理過程。

使用者移動性的基礎是其標識唯一性,其它使用者就用這個唯一的標識跟移動使用者聯絡,sip 中稱之為移動使用者的邏輯位址。但要實現與移動使用者的通訊, 必須要能將報文傳送到其當前所在的位置, 即它的聯絡位址。該聯絡位址是隨著移動使用者位置的變化而變化的。使用者使用邏輯位址進行呼叫, 網路實體使用聯絡位址進行通訊。

位址分離為移動性支援提供了基礎。要完成對移動使用者的呼叫, 必須知道使用者的當前位置資訊。這需要註冊和登出過程的支援。當使用者接入sip 系統時, 它首先要發起註冊, 以報告自己當前的聯絡位址。當使用者由於移動改變了聯絡位址, 它必須要登出老的位址對映, 並通過註冊過程建立新的位址對映。這樣, 定位伺服器中的位址對映總能反映使用者的最新位置資訊, 確保完成對移動使用者的呼叫。

目標重新整理可供使用者告知通訊對方自己的聯絡位址發生了變化。這對於通訊中的移動是非常重要的。當使用者在通訊中進行移動時, 它的聯絡位址有可能發生變化( 比如進入到另乙個域而使ip 位址發生變化)。當聯絡位址改變後, 使用者使用目標重新整理過程, 將新的聯絡位址告知對端。對端就可以使用新的聯絡位址與其通訊, 保證了移動中通訊的不中斷。目標重新整理過程完成後, 使用者還要及時向自己的註冊伺服器註冊新位址, 以使網路獲知其當前位置。

5.2 移動性支援

在圖2 中, 通訊對端和移動終端使用者正在進行通訊, 移動終端使用者從外地網路1 移動到了外地網路2, 致使其聯絡位址發生了變化。移動終端使用者使用目標重新整理過程將其新聯絡位址告訴對端, 對端就可以使用新位址與其通訊了。由此可見, 在通訊過程中的移動性支援是靠目標重新整理過程完成的。

2 通訊過程中的移動

6 結束語

本文對sip ip **系統的呼叫路由過程進行了詳細的介紹。在描述了基本概念後, 首先對基本的註冊/登出過程進行了介紹。註冊/登出過程是sip 呼叫路由過程的前提。文章分對話外和對話內兩種情況對sip 的呼叫路由過程進行了分析。由於sip 在設計時就考慮到了對移動性的支援, 可以很好地支援移動後的呼叫路由和通訊過程中的移動。

隨著sip 的逐漸成熟和普及應用, 很多研究人員提出了對sip 的擴充使用方案。比如對及時訊息的支援[4], 對會議功能的支援[5]等。我們將密切跟蹤sip 應用的發展動態, 對這些新的應用方法進行研究。

呼叫系統電話 簡訊 瀏覽器

1 呼叫 自帶mail 2 呼叫 phone 3 呼叫 sms 4 呼叫自帶 瀏覽器 safari 呼叫phone可以傳遞號碼,呼叫sms 只能設定號碼,不能初始化sms內容。若需要傳遞內容可以做如下操作 加入 messageui.framework import 實現 mfmessagecompo...

ios 呼叫系統打電話和發訊息的功能

1.打 openurl nsurl urlwithstring nsstring stringwithformat tel 13027621806 2.發資訊 方法一 呼叫的方法非常的簡單,但是不能夠回到自己的應用,是程式外呼叫系統發簡訊 openurl nsurl urlwithstring ns...

android呼叫系統發簡訊傳遞電話號碼和簡訊內容

看了很多人做發簡訊功能時,呼叫系統的發簡訊介面,但是 號碼始終傳不過去,所以看見很多人傳遞了重複的爛帖子!那些方法都是行不通的。應該這麼做 intent intent new intent intent.action view 就是這句話 intent.putextra address 123456...