本篇教學提供讀者了解SIP 的基本知識與建置SIP Server - GitHub

文章推薦指數: 80 %
投票人數:10人

註冊處理完成後,註冊伺服器將使用者之聯絡位址上傳至Location Server 資料庫中儲存。

SIP. Proxy Server. SIP Proxy 主要負責將User Agent 或者其他SIP Proxy 發送的請求 ... Skiptocontent {{message}} imac-cloud / OpenSIPS Public Notifications Fork 1 Star 11 本篇教學提供讀者了解SIP的基本知識與建置SIPServer 11 stars 1 fork Star Notifications Code Issues 0 Pullrequests 0 Actions Projects 0 Wiki Security Insights More Code Issues Pullrequests Actions Projects Wiki Security Insights Thiscommitdoesnotbelongtoanybranchonthisrepository,andmaybelongtoaforkoutsideoftherepository. master Branches Tags Couldnotloadbranches Nothingtoshow {{refName}} default Couldnotloadtags Nothingtoshow {{refName}} default 1 branch 0 tags Code Latestcommit   Gitstats 20 commits Files Permalink Failedtoloadlatestcommitinformation. Type Name Latestcommitmessage Committime photo     .gitignore     README.md     Viewcode SIP簡介 前言 UAC與UAS RegisterServer ProxyServer RedirectServer LocationServer SIPGateways SIP特點 SIP相關的網路協定 SIP請求(Requests)與回應(Responses) SIP請求 SIP回應 SIP流程 SIP安裝教學 作業系統與SIP套件: 更新apt-get: 下載安裝相關套件: 下載OpenSIPS套件: 修改配置檔: 安裝OpenSIPS: 安裝完畢後,修改部分opensipsctlrc文件,如下: 執行建立資料庫腳本: 常見錯誤: 設定OpenSIPslisten: OpenSIPS操作: 用戶端軟體 README.md SIP簡介 前言 由於路由式IP網路的普及化,企業與個人都希望降低電信費用,我們何不利用IP網路的數據傳輸來實作語音服務呢?本篇是筆者研讀許多VoIP相關文件後所整理的筆記,透過SIP不僅可以實現通話及會議通訊功能,也同時擁有視訊會議與訊息傳輸的技術,不過你可能會想,若只局限於PCtoPC間的通話,是否對於使用者來說方便性過於狹隘?但是對於這部份,筆者最後也整理了幾個APPclient提供使用者作為參考,讓你的智慧型手機(android、iOS)也可以享有與PC相同的服務品質。

UAC與UAS SIP網路元件可分為使用者代理器(UserAgents-UA)與伺服器(Server)兩部分。

其中UA又可細分為UAC(UserAgentClient)與UAS(UserAgentServer)。

UAC負責建立請求,如:一個通話的開始,而UAS負責依照請求產生應答,如:接收通話。

換而言之,每個SIPUserAgent都包含UAC及UAS,如此一來每個終端設備都兼具接收與撥號功能。

流程如下圖: RegisterServer 這個伺服器主要是接收UserAgent註冊要求功能,並且提供authentication(驗證)服務,通常與Proxy或RedirectServer放在一起,且更新LocationServer上的UserAgent資訊與位址。

其流程如下: RegisterServer接收並處理使用者之註冊請求。

使用者藉由註冊請求,向網路特定RegisterServer登錄該使用者連位址。

註冊處理完成後,註冊伺服器將使用者之聯絡位址上傳至LocationServer資料庫中儲存。

ProxyServer SIPProxy主要負責將UserAgent或者其他SIPProxy發送的請求代為傳遞到另一個SIP元件。

當UserAgent發出請求時,請求並非直接傳遞到目的地端的UserAgent,而是經過一層層的SIPProxy後才將請求訊息傳遞至目的地端。

每個SIPPrxoy都會決定下一個路由並且對請求訊息做出適當加工處理後才傳遞。

反之,目的地端回送訊息給發送端也是如此。

SIPProxy事實上同時扮演SIPClient與SIPServer兩個角色,當他接受其他Client請求時,即為SIPServer。

當他轉送SIP請求至其他Server時,即為SIPClient。

RedirectServer RedirectServer目的是接受SIP的要求,將位址對應到零個或多個新的位址,並將結果回傳給Client。

與ProxyServer不同,RedirectServer並不會發出自己的SIP請求。

與UserAgentServer不同,RedirectServer並不會接受或結束一個通話。

LocationServer 當ProxyServer呼叫建立時,向LocationServer查詢被呼叫者的聯絡位址,以轉送呼叫建立訊息。

通常被SIPRedirect或ProxyServer所使用。

SIPGateways 負責SIP協定和其他非SIP協定(PSTN)轉換的橋樑 負責語音通訊時資料傳送,將封包型態的數位資料轉換成類比訊號後,由PSTN網路傳送,或將類比資料轉成數位後在包裝成封包後,由IP網路傳送出去。

SIP特點 簡單:SIP通訊協定與HTTP通訊協定類似,都是採用請求(Requests)與回應(Responses)模式,提供數種命令與回應代碼來完成呼叫控制。

以文字為主:類似HTTP的作法,將協定的訊息以文字表達並使用標準的字元編碼,如ASCII、UTF-8,運用這個方式的好處是容易實作與偵錯、擴充性佳、增加額外訊息不需大幅更動原有解析程式。

與傳輸層分離:SIP運作在傳輸層之上,可以提昇網路傳輸的適應性和支援性。

在封包容易遺失的環境下使用TCP連線,而在環境叫穩定的狀況下使用UDP。

支援移動性:SIP在制定時,就已經將支援移動性納入考量,就算使用者在呼叫階段或是交談過程中,都可以藉由轉送或是重新邀請來維持會談。

SIP相關的網路協定 SDP(會談描述協定):此協定主要用來協商雙方建立多媒體資料封包通道之用,雙方會在邀請(INVITE)訊息的三向交握過程中交換彼此可以使用的通訊方式及資料格式。

RTP(即時傳輸協定):此協定用於即時資料傳輸,如影像資料...等,由於VoIP所傳輸的多媒體資料大多屬於即時性優先於資料完整性,所以利用RTP的特性來編排及傳遞這些資料內容最適合。

LDAP(輕量及目錄訪問協定):此協議主要是讓SIPServer用來與位址服務的伺服器溝通,以取得每個目的的正確位址。

SIP請求(Requests)與回應(Responses) SIP請求 SIP的六項基本的方法向伺服器發出請求,以下簡單敘述: 方法 敘述 INVITE 邀請建立會議(Session) ACK 回覆確認邀請(INVITE)的回覆已收到 OPTIONS 用來傳送midcall訊號(mid-session資訊)並不改變Session狀態 BYE 結束一個已連結的Session CANCEL 取消一個已發出邀請但尚未連結的Session REGISTER 註冊使用者的URL SIP回應 SIPResponses訊息包含一個三個位數的狀態碼(statuscode),用來表示回應原因: 1XX-InformationMessages.(訊息通知,請求處理中尚未完成。

) 2XX-SuccessfulResponses.(請求處理成功。

) 3XX-RedirectionResponses.(重新導向,將請求訊息重新導向至另一個SIP元件。

) 4XX-RequestFailureResponses.(客戶端錯誤,錯誤的原因在於請求端。

可以矯正後重試。

) 5XX-ServerFailureResponses.(伺服器端錯誤,錯誤的原因在於目的端。

可以重試其他的location。

) 6XX-GlobalFailureResponses.(錯誤-GlobalError,請求失敗且無法重試。

) 代碼 敘述 代碼 敘述 100 正在嘗試 305 使用代理伺服器 180 正在撥打 380 替代服務 181 正在轉接 400 呼叫不當 182 正在排隊 401 未經授權 183 通話進展 402 要求付費 200 OK 403 被禁止的 202 被接受 404 未發現用戶 300 多項選擇 405 不允許的方法 301 被永久遷移 406 不可接受的 302 被暫時遷移 407 需要代理伺服器授權 代碼 敘述 代碼 敘述 408 呼叫超時 481 通話/事務不存在 410 用戶曾經存在,但現在不存在 482 檢測到迴圈 413 呼叫實體過大 483 跳數過多 414 呼叫URI過長 484 位址不全 415 不支援的媒體類型 485 模糊不清 416 不支援的URI方案 486 忙碌中 420 不當擴展 487 呼叫被終止 421 需要擴展 488 此處不可接受 423 時間間隔過短 491 呼叫待批 480 暫時不可以使用 493 無法解讀 代碼 敘述 500 伺服器內部錯誤 501 SIP呼叫方法在此無法實施 502 不當閘道 503 服務不可使用 504 伺服器超時 505 伺服器不支援SIP協定的這個版本 513 消息過長 600 各處忙碌 603 拒絕 604 無處存在 605 不可使用 SIP流程 由下圖可知,當Client1撥打電話給Client2時,會先發送INVITE請求並且與Client1請求代理伺服器授權。

當前置動作完成以後,SIPServer會發送INVITE給Client2,此時雙方的電話將會響起,假設雙方都接受電話請求,此時開始進行對話。

最後,當一方送出BYE訊息時,系統會執行通話終止,並且同時送出BYE訊息給另一方結束此次通話。

SIP安裝教學 作業系統與SIP套件: Ubuntu-14.04 OpenSIPS-2.1 Openstack- 主機 PrivateIP PublicIP SIPServer 192.168.100.174 10.26.1.25 更新apt-get: sudoapt-getupdate 下載安裝相關套件: sudoapt-getinstall-ygitmakebisonflexmysql-servermysql-clientlibmysqlclient-devlibncurses5libncurses5-dev 下載OpenSIPS套件: cd~/ sudogitclonehttps://github.com/OpenSIPS/opensips.git-b2.1opensips_2_1 修改配置檔: sudovim~/opensips_2_1/Makefile.conf.tmplate 移除exclude_modules中db_mysql並儲存 安裝OpenSIPS: cd~/opensips_2_1 sudomakeall sudomakeinstall 安裝完畢後,修改部分opensipsctlrc文件,如下: sudovim/usr/local/etc/opensips/opensipsctlrc 修改如下,將部分註解刪除 ##yourSIPdomain #SIP_DOMAIN=ubuntustudio ##chrooteddirectory #$CHROOT_DIR="/path/to/chrooted/directory" ##databasetype:MYSQL,PGSQL,ORACLE,DB_BERKELEY,orDBTEXT, ##bydefaultnoneisloaded #Ifyouwanttosetupadatabasewithopensipsdbctl,youmustatleastspecify #thisparameter. DBENGINE=MYSQL ##databasehost DBHOST=localhost ##databasename(forORACLEthisisTNSname) DBNAME=opensips #databasepathusedbydbtextordb_berkeley DB_PATH="/usr/local/etc/opensips/dbtext" ##databaseread/writeuser DBRWUSER=opensips ##passwordfordatabaseread/writeuser DBRWPW="opensipsrw" ##databasesuperuser(forORACLEthisis'scheme-creator'user) DBROOTUSER="root" #usernamecolumn USERCOL="username" 若出現ERROR:databaseenginenotspecified,pleasesetuponeintheconfigscript錯誤,請修改/usr/local/etc/opensips權限。

執行建立資料庫腳本: /usr/local/sbin/opensipsdbctlcreate 你會看到如下方結果: MySQLpasswordforroot: INFO:testservercharset INFO:creatingdatabaseopensips... INFO:CoreOpenSIPStablessuccesfullycreated. Installpresencerelatedtables?(y/n):y INFO:creatingpresencetablesintoopensips... INFO:Presencetablessuccesfullycreated. Installtablesforimccplsiptracedomainpolicycarrierrouteuserblacklist?(y/n):y INFO:creatingextratablesintoopensips... INFO:Extratablessuccesfullycreated. 如果執行出現錯誤,可以從/var/log/syslog檢視錯誤資訊。

常見錯誤: var/run路徑權限不足 sudochmod777/var sudochmod777/var/run opensips.cfg權限不足 sudochmod755/usr/local/etc/opensips/opensips.cfg 設定OpenSIPslisten: 使用你慣用的編輯軟體如:vim,開啟/usr/local/etc/opensips/opensips.cfg進行設定。

... advertised_address="10.26.1.25" alias="10.26.1.25" listen=udp:192.168.100.174:5060 ... 若你想在AWSEC2或OpenstackInstance佈署OpenSIPS服務,請務必加入advertised_address與alias,如此一來你的服務才能夠被正確的對應出來。

如果你使用的是EC2請輸入PublicIP,如果你使用的是OpenstackInstance請輸入FloatingIPs。

OpenSIPS操作: 啟動: /usr/local/sbin/opensipsctlstart 暫停: /usr/local/sbin/opensipsctlstop 重新啟動: /usr/local/sbin/opensipsctlrestart 如果執行時出現錯誤,請檢查opensips.cfg、/var與/var/run權限是否有誤。

用戶端軟體 MacOS:YateClient、Zoiper Android:ECOASip(可至Play商店下載) iOS:Zoiper(可至AppStore下載) 以上為筆者列舉幾項作為示範,若需要更多相關用戶端軟體可至opensourceVOIPSoftware取得。

About 本篇教學提供讀者了解SIP的基本知識與建置SIPServer Resources Readme Stars 11 stars Watchers 7 watching Forks 1 fork Releases Noreleasespublished Packages0 Nopackagespublished Youcan’tperformthatactionatthistime. Yousignedinwithanothertaborwindow.Reloadtorefreshyoursession. Yousignedoutinanothertaborwindow.Reloadtorefreshyoursession.



請為這篇文章評分?