SIP應用層網關的實現 - SIP應用層網關技術
本節前面部分詳細的介紹了SIP應用層網關實現的理論基礎,本節介紹ALG的軟件實現方式,軟件開發平臺是Windows2000,開發工具是Visua1C++ 6.0,采用的是OSIP協議棧,開發的語言主要是C。
結構及工作流程
這里ALG被分成兩個部分:ALG主體部分和SIP URI信息管理系統部分,這兩部分被設計成是兩個相互獨立的程序。ALG主體部分的功能是處理各種流向上的SIP消息、管理呼叫環境以及跨網絡呼叫時,在通信雙方之間進行RTP數據包的轉發;SIP URI信息管理系統部分的功能是負責私網內部SIP URI及其綁定信息的管理和維護,該系統及其維護的數據庫放置在私網內部的其它主機上運行。兩部分之間通過UDP/TCP進行通信,這樣可以減小來自外網上攻擊的風險,從而提高數據信息的安全性。 由于ALG主體無法直接對SIPURI的數據信息進行訪問,因此必須在這兩部分之間提供訪問的接口,“信息數據庫接口”模塊就是為 ALG訪問SIP URI信息管理系統的接口。
SIP應用層網關的主要工作由一個SIP消息的監聽線程、一個與SIP URI信息管理系統進行通信的線程、一個SIP消息處理線程(包括對話的管理和維護)和數量不定的RTP數據包轉發線程完成。RTP數據包轉發線程能夠根據需要而動態的生成和釋放,因此數量不定。
SIP應用層網關的基本工作流程如下:
應用程序初始化完畢以后,啟動SIP消息監聽線程、URI信息數據庫訪問線程和SIP消息處理線程。SIP消息監聽線程對ALG的所有SIP端口(包括私網和公網)進行監聽,如果收到SIP消息,它把消息連同其源IP地址和端口以及消息本身的長度封裝成一個簡單的數據結構放入一個先入先出的隊列(FIFO)當中,然后繼續監聽,它不對消息進行進一步的處理。
一旦FIFO中有了SIP消息,SIP消息處理線程就被喚醒,并投入運行,它從FIFO中取走消息,然后開始對這個消息進行處理:首先它對消息進行解析以及例行的語法檢查,然后根據SIP消息的源地址和目的地址將其分成四類:
(1)內部消息,其源地址和目的地址都在私網內部。
(2)對外消息,其源地址是私網地址,目的地址是公網地址。
(3)對內消息,其源地址是公網地址,目的地址是ALG的公網地址。
(4)外部消息,其源地址和目的地址都是公網地址。
SIP消息被分成以上四類后,ALG對它們進行不同的處理。第(1)類消息稱為“內部消息”,第(2)類和第(3)類消息統稱為“跨網絡消息”;第(4)類消息稱為“外部消息”,它會被無條件丟棄,ALG不對其作進一步的處理。SIP消息處理線程在對“跨網絡消息”消息進行處理的同時,對呼叫的上下文環境進行管理和維護,并在必要的時候,啟動新的RTP數據包轉發線程,使其完成對跨網絡通信的RTP數據包的轉發工作。
基于SOCKET消息接收與應答功能模塊
由于UDP包的接收是異步的,ALG無法預測何時會有SIP消息到來,因此在SIP應用層網關的設計中,用單獨的線程對SIP端口進行監聽。由于SIP應用層網關處在兩個網絡的邊界上,并在兩網之間轉發數據,因此ALG的SIP端口也相應的分為私網和公網兩部分,在任何一邊的網絡上,都可以打開一個或者多個與套節字(SOCKET)相聯系的SIP端口。并且每隔一定時間試圖從所有監聽的SIP端口相關聯的SOCKET上讀取數據,如果讀到了數據,就對數據做簡單的封裝,然后把它放入應用層網關的SIP消息FIFO當中。
信息數據庫接口模塊
出于安全性的考慮,SIP URI信息管理系統從SIP應用層網關中分離出去,這個系統的功能并不復雜,一方面它接受來自ALG的訪問;另一方面,它必須對自身的信息數據庫進行維護。ALG本身必須通過信息數據庫接口模塊對其進行訪問。
ALG需要從SIP URI信息管理系統得到的信息有兩類:一類是用戶信息,包括用戶名和密碼;另一類是SIP URI綁定信息,這一類信息的交互是雙向的,不同的REGISTER請求會要求ALG添加、修改、刪除或者僅僅是獲取SIP URI的綁定信息。本文用統一的數據結構來表示這兩類信息,這樣只需要一次訪問就能夠獲取所需全部信息,可以縮短ALG處理SIP消息所需的時間。
信息管理模塊
SIP應用層網關需要很多信息才能完成工作,有些信息是動態的,例如SIP URI的綁定信息,不同用戶不同時間的綁定信息是不同的,因此只有在需要的時候應用層網關才從數據庫中進行動態的訪問;而另外一些信息則是相對穩定的,如ALG本身的域名、IP地址等等。這些信息很多,但并不復雜,大多是字符串、數值或者布爾型的變量,信息管理模塊的功能就是維護和管理它們。
“媒體會話”模塊
當SIP應用層網關為跨網絡呼叫的終端之間建立起媒體會話(視頻、音頻)的連接后,雙方之間主要的交互將是RTP數據流(媒體數據被打包成RTP數據包)的交互,“媒體會話”模塊的功能主要就是在通信雙方之間進行RTP數據包的轉發工作,每一個RTP數據包轉發器能夠為多路RTP連接提供數據包轉發服務。
當ALG需要為一路RTP連接提供數據包轉發服務時,它試圖從轉發器環境中得到一個空閑的RTP數據包轉發器,如果環境中的轉發器都已經被占用,環境會試圖創建一個新的RTP數據包轉發器,并把它加入到環境當中,并將它返回給ALG使用。另一方面,當一個轉發器不再為任何RTP連接提供轉發服務時,環境會把它刪除,并釋放相應的資源。
“消息處理及對話維護”模塊
這是SIP應用層網關的核心模塊,它的功能是對收到的SIP消息進行解析和處理,完成對SIP消息的代理,對跨網絡呼叫的上下文環境進行維護以及在必要時啟動對話的RTP代理。這些功能之間是相互關聯的,統一由SIP消息處理及對話的維護線程完成。圖2是SIP消息處理線程的工作流程圖。
本文小節
SIP協議憑借其簡單、易于擴展、便于實現等諸多優點越來越得到業界的青睞,越來越多的基于SIP協議的網絡如VOIP、視頻會議、智能家居系統被開發實現,本文實現的SIP應用層網關正是SIP網絡對NAT/Firewall的穿越的關鍵技術,但這一方案仍存在著不足之處,由于SIP應用層網關必須對跨網絡的所有SIP消息進行解析,導致這些消息須以明碼的形式傳輸,降低了SIP應用的安全性,進一步研究表明:這要求我們對SIP協議進行適當擴展來實現信息的加密。
- 第 1 頁:SIP應用層網關技術
- 第 2 頁:SIP應用層網關的實現
本文導航
非常好我支持^.^
(2) 100%
不好我反對
(0) 0%
相關閱讀:
- [電子說] EtherCAT從站轉modbus RTU協議轉換網關用modbus slave測試的方法 2023-10-24
- [電子說] 工業 CPE 雙頻網關在工業物聯網中的應用優勢 2023-10-24
- [電子說] 5G RedCap工業智能網關 2023-10-24
- [電子說] DLT698轉modbus協議網關把電能數據接到wincc的方法 2023-10-24
- [處理器/DSP] Codasip發布適用于定制計算的新一代RISC-V處理器系列產品 2023-10-24
- [電子說] 物通博聯工業采集網關實現水處理除臭設備運行狀態監控 2023-10-24
- [電子說] 工業物聯網解決方案:卷繞機數據采集管理系統 2023-10-24
- [電子說] 快速了解電力IEC104協議規約 2023-10-24
( 發表人:Spring )