李思銳 voip_taiwan@yahoo.com.tw VoIP系統與SIP協定 李思銳 voip_taiwan@yahoo.com.tw.

Slides:



Advertisements
Similar presentations
动态网站开发 【HTTP与网络基础】 李博杰
Advertisements

本周复习一下基本的网络知识 下周开始讲解路由器的配置方法 第四周开始到实验室做实验(主楼910,919)
第五章 網際網路 5-1 網際網路的歷史沿革 5-2 網際網路基本運作原理 5-3 連線媒介與連線上網 5-4 網際網路上的熱門應用
Rfc3315 Dynamic Host Configuration Protocol for IPv6 (DHCPv6) 組員: 蔡承翰 A 陳鈺璋 A 翁菘㠙 A 指導老師 吳俊興.
Wireshark 03/03/2017.
第 8 章 IP 基礎與定址.
實驗 9: 無線安全網路之建設.
操作系统结构.
伺服器網路檢測與管理 資訊中心網路管理組 王裕仁 2006/06/29.
NetGuru 創新 網路通訊實驗教學解決方案 PART I TCP/IP通訊協定深入剖析/以NetGuru實作
VOIP應用 與進度推廣 臺東大學電算中心 洪守成.
資訊安全與系統管理 2013/3/13 Chien wei lin.
第六章 在华为路由器上配置动态路由OSPF协议(实训)
校園網路管理實電務 電子計算機中心 謝進利.
Netman Linux 的防火牆設計與應用 Netman
UNIX系統與資料庫安裝 Why UNIX 常用的工具程式介紹 資料庫的安裝.
網路基本概念與設定方法 林文宗 資管系助理教授
Lab312.
SIP 体系架构.
医学仪器中的嵌入式系统设计  T06.WinCE 网络与通信
Linux.
主讲:邓 志 龙 Linux网络技术 主讲:邓 志 龙
NAT-PT (Network Address Translation-Protocol Translation)
李思銳 VoIP系統與SIP協定 李思銳
第 2 章 上機使用 Unix/Linux 內容: 操作介面 主機連線 登入主機 認識系統環境 使用者常用命令.
高雄應用科技大學 有線網路建置實習(I) 聯易科技股份有限公司 Ben 李政勳
第7讲 多媒体网络 本讲概述: 本讲目标: 多媒体的网络应用 了解多媒体网络的应用要求 存储式音频/视频流 交互式的实时应用
台灣大學計算機及資訊網路中心 教學研究組 張傑生
基於OpenWSN之無線感測網路系統的實作
臺東縣中小學資訊教育校園網路管理暨資訊安全防護計畫研習
TCP協定 (傳輸層).
AA SIP协议原理 2.0 此为固网课程专用的封面页。.
網路伺服器應用 Linux Server Andres, Wen-Yuan Liao
第五章 網際網路 5-1 網際網路的歷史沿革 5-2 網際網路基本運作原理 5-3 連線媒介與連線上網 5-4 網際網路上的熱門應用
Different Codec Technologies
32 bit destination IP address
SIP消息之 逐项讲解.
SIP协议 翁彦
第二章 Linux基本指令與工具操作 LINUX 按圖施工手冊.
第4章 网络互联与广域网 4.1 网络互联概述 4.2 网络互联设备 4.3 广域网 4.4 ISDN 4.5 DDN
VoIP integrate compuse PSTN-PBX with SIP/ENUM/IVR
實驗 一 : RTP 實驗目的 實作部分 了解如何利用RTP在網路上傳送語音封包 加深對RTP、RTCP封包的基本格式的認識
Stress Test Tool for SIP
什麼是網際網路? 面臨攻擊的網路 網路邊際 總結 網路核心
TCP/IP介紹 講師:陳育良 2018/12/28.
江西财经大学信息管理学院 《组网技术》课程组
第七讲 网际协议IP.
校園網路架構介紹與資源利用 主講人:趙志宏 圖書資訊館網路通訊組.
第5讲 网络层 本讲目的: 概述: 理解网络层服务原理: 因特网的实现实例 网络层的服务 路由选择原理 分层的路由选择 IP协议
作業二 : SIP User Mobility 實驗目的 實作部分
第十三章 TCP/IP 與 Internet 網路連結技術
Understanding H.323 Gatekeepers
SIP协议 Sip协议基本介绍 ..
SIP与H.323互通的研究 研究生选题报告 Research on Interworking between SIP and H.323
Web Server 王宏瑾.
第11章 網路的設定與測試.
Wireshark DNS&HTTP封包分析
中国科学技术大学计算机系 陈香兰 2013Fall 第七讲 存储器管理 中国科学技术大学计算机系 陈香兰 2013Fall.
傳輸控制協議 /互聯網協議 TCP/IP.
Source: Journal of Network and Computer Applications, Vol. 125, No
NAT技术讲座 主讲:周旭 大唐电信科技股份有限公司光通信分公司 数据通信部.
Speaker : Chang Kai-Jia Date : 2010/04/26
第 14 章 DHCP 著作權所有 © 旗標出版股份有限公司.
基本指令.
Mobile IPv4.
如何連上工作站 WorkStations: 1. Solaris 2. Linux Use X-Win32 (for Solaris)
RHCE.
擷取封包 Files  Select Settings 擷取封包 擷取封包 擷取封包.
Linux网络配置管理.
Develop and Build Drives by Visual C++ IDE
Presentation transcript:

李思銳 voip_taiwan@yahoo.com.tw VoIP系統與SIP協定 李思銳 voip_taiwan@yahoo.com.tw

大綱 VoIP 導論 電路交換與分封交換 FXS FXO T1 E1等電信介面之簡介 網路基本概念 Linux和Open Source 語音壓縮基本概念 封包大小與流量之計算

Telcom, Datacom Circuit switch: 電路交換 Packet switch: 分封交換 Example: (2G) GSM: Circuit switch (2.5G) GPRS: Circuit switch (voice) + Packet switch (data) (3G) CDMA: Packet switch

Communication Physical layer Protocol layer

Communication Example UART (TX, RX, Ground) or RS232 interface 115200, 8N1, XMODEM Telephony interface Dial Pulse or DTMF (dual-tone multi-frequency)

Dial Pulse 北美: 60 (on) : 40 (off) 歐洲: 63 (on) : 37 (off) 6~15 (8~10) pulses per second Mark (on), Break (off), Pause 所以傳統類比電話系統可以使用勾鍵(Hook)撥號

DTMF Tone Frequencies 雙音複頻 兩個不同頻率的聲音耦合 使用4x4的table表, 可以表達1, …, 9, #, 0, *, A, B, C, D的訊息

DTMF row frequency ROW 0: 697 Hz ROW 1: 770 Hz ROW 2: 852 HZ

DTMF col frequency COL 0: 1209 Hz COL 1: 1336 Hz COL 2: 1477 Hz

SIP Signaling RFC 2833 INFO messages or RTP messages Event 0~9: coding 0~9 Event *: 10 Event #: 11 Event A~D: 12~15 Event Flash: 16

FXS, FXO FXS: Foreign Exchange Station, interface provides power (battery) and generates ring signals, SLIC FXO: Foreign Exchange Office, interface receives power (battery) and receives ring signals, DAA

PCM PCM (pulse-code modulation) 類比數位的轉換 動作程序為: 取樣 量化 編碼

Sampling Sampling (取樣) 8 KHz, the voice frequency range is 0~4000 (300~3400), by Nyquist Theory, sampling speed must be taken greater (or equal) than double with frequency (s>=2f)

Quantifying Quantifying (量化) linear scale (線性量化) logarithmic scale (非線性量化)

Coding Coding (編碼) 8 bits (傳統電信) 16 bits, …

linear scale 如果編碼為n-bits, 將聲音頻率等分為2^n 例如, 如果編碼為8-bits, 那量化階度為等分256階 常見者為PCM8, PCM16

logarithmic scale 通常聲音頻率落在中間居多, 越高頻出現的機會較低, 為了讓量化更準確, 將聲音出現機率越高的頻段切分的更細, 以提高量化的準確度 常見者為G.711 u-Law和A-Law

u-law量化方式 y = ln(1 + ux) / ln(1 + u) where u = 255

A-law量化方式 y = Ax / (1 + ln A) for x <= 1/A y = (1 + ln Ax) / (1 + ln A) for 1/A <= x <= 1 where A = 87.6

CCS, CAS CCS: Common Channel Signaling 信令在獨立的通道上傳送, 因此信令的實體線路或路由可以和語音通道不同 CAS: Channel Associated (Access) Signaling 信令附加在語音通道, 所以信令的實體線路或路由可以和語音通道相同

Traditional Trunk 2-wire CO 2-wire E&M: E(RX), M(TX), G (Ground), B (Battery) 4-wire E&M: E1, E2, M1, M2, G, B 2-wire E&M and 4-wire E&M都是一路的語音中繼線路, 但是4-wire E&M的傳輸距離較遠

FDM, TDM FDM: 劃頻多工 對特定範圍的頻帶切割, 已傳輸多路的訊息, 例如廣播系統中的FM TDM: 劃時多工 利用切割時間的不同, 來達成同時傳輸多路的訊息, 類似電腦系統中的multi-task概念, 也因為要切割時間, 所以需要同步. 我們稱每個切割出來的區間為Time Slot, 若是用來傳遞語音則也稱為Voice Channel

TDM trunk T1 CAS: TS 0~23: Voice Channel using 1 bit as signaling every 6 TS I bit addition for sync. E1 CCS: TS 0: Frame Sync. and Alarm TS 1~15: Voice Channel TS 16: Signaling TS 17~31: Voice Channel

T1 PCM Sampling Rate: 8 KHz Encoding Law: u-law Bit Rate: 1.544 Mbps 8 KHz*(8 bits*24 TS+1 bit sync) Code: AMI, B8ZS Impedance: 100 Ohms Standard

E1 PCM Sampling Rate: 8KHz Encoding Law: A-law Bit Rate: 2.048Mbps 8 KHz * 8 bits * 32 TS Code: HDB3 Impedance: 120 Ohms Standard

Quiz The speed limiting of modem is 56kbps? Why or why not?

Protocol stacks The IETF Internet 4-layer Physical: Ethernet IP/ICMP TCP/UDP AP: SIP, H.323, RTP/RTCP

SIP RFC 3261 support TCP and UDP H.323 v1 and H.323 v2 support H.245 Q.931 over TCP and RAS over UDP H.323 v3 and H.323 v4 support H.245 Q.931 over TCP/UDP and RAS over UDP

Network Class Class A: 0.0.0.0 ~ 127.255.255.255 但是0開頭和127開頭為特殊用途 0結尾和255結尾也有特殊用途 Class B: 128.0.0.0 ~ 191.255.255.255 Class C: 192.0.0.0 ~ 223.255.255.255

Class D: 224.0.0.0 ~ 239.255.255.255 注意Class D為multicast 使用 Class E: 240.0.0.0 ~ 247.255.255.255 保留未來或實驗使用

特別的IP Address 0.0.0.0: 用於來源位址時, 合法用途為要讓IP位址動態地由伺服器分配 用於目的位址時, 合法用途為要參照一個預設路由

127.xxx.xxx.xxx: Loopback, 傳統上只使用127.0.0.1, 來表示本機 廣播位址: 例如255.255.255.255, 192.168.0.255

CIDR 舉例來說, 192.168.0.0/24, 表示subnet mask開頭有24個1, 也就是subnet mask =255.255.255.0; 所以整個區段的網路範圍為192.168.0.0 ~ 192.168.0.255

TCP vs. UDP TCP通訊協定(由上層AP看下來)保證沒有錯誤, 沒有遺失或重複, 依序傳遞; 而UDP則不保證, 而必須由AP層自行負責 由於UDP的負擔小, 在傳輸類似影像或聲音的資料流時, 通常不用考慮重傳的問題, 因此UDP就顯現出他的優點

The Open Source 通常我們稱open source, 是指軟體的版權規範於GPL, LGPL或是MPL等等, 通常我們可以自由下載使用, 甚至傳播這些軟體, 也可以更改程式的source, 不過若是更動source, 通常要回報原始的作者或是開發論壇, 詳細內容請見該程式的原始規範 所以, 我們可以說open source的精神, 就是要集合眾人之力, 把程式做到更完美

常用的Linux Command ls : list, 類似DOS的dir, 可以搭配ls -al使用 rm : remove,類似DOS的del rmdir : remove directory mkdir : make directory cd : change directory cp : copy

mv : move chmod : 更改權限 file : 看某個檔案的類型, 也常用來測試某檔案存不存在 find -name : 找檔案 grep : 找字串 cat : 顯示內容到stdout

ps : 顯示執行的process, 常使用ps aux touch : 更改檔案的timestamp, 也常用來產生一個空的檔案 man : manual ifconfig : 設定或顯示網路 ifconfig eth0 xxx.xxx.xxx.xxx

route : 設定或顯示路由 route add default gw yyy.yyy.yyy.yyy ping reboot : 重新開機 shutdown : 關機, 常用shutdown -h now

vi文字編輯器 vi 檔名 初始進入vi文字編輯器時, 我們稱之為命令模式

:wq.  存檔並結束 :q.  強迫結束(不存檔, 不論檔案有無被更改) :100.  跳到第100行(row) dd :wq  存檔並結束 :q!  強迫結束(不存檔, 不論檔案有無被更改) :100  跳到第100行(row) dd  刪除游標所在那一行(row) i  進入編輯模式, 在編輯模式中可以按ESC回到命令模式

語音壓縮 傳統的PCM編碼, 以u-law或是A-law為例, 他所需的傳輸速率要64kbps, 若以目前的網路環境(或許該說2000年以前), 是無法承受這麼大的網路頻寬需求, 因此語音封包需要壓縮, 以減少網路流量, 當然壓縮過後多多少少會導致語音的失真或品質的降低

G.711 PCM u-law 64 kbps data rate 10 ms sample size Default datagram 2 samples = 20 ms Default 1.5 ms packetization delay Default 40 ms jitter buffer delay (based on 2 datagrams) Theoretical maximum MOS 4.4

G.711 PCM A-law 64 kbps data rate 10 ms sample size Default datagram 2 samples = 20 ms Default 1.5 ms packetization delay Default 40 ms jitter buffer delay (based on 2 datagrams) Theoretical maximum MOS 4.4

G.729A 8 kpbs data rate 10 ms frame size Default datagram 2 frames = 20ms Default 15.0 ms packetization delay Default 40 ms jitter buffer delay (based on 2 datagrams) Theoretical maximum MOS 4.07

G.723.1 6.3 kbps 30 ms frame size Default datagram 1 frame = 30 ms Default 37.5 ms packetization delay Default 60 ms jitter buffer delay (based on 2 datagrams) Theoretical maximum MOS 3.87

g723.1 can also be 5.3 kbps with a maximum MOS 3.69

封包大小與流量之計算 以G.711為例 64 Kbps * 20 ms = 160 bytes Overhead, 以Ethernet為例 IP+UDP+RTP Overhead = 20 + 8 + 12 = 40 bytes Ethernet Overhead (包含4-byte的CRC) = 18 bytes

所以, 在Ethernet傳輸的總速率為 (160+40+18) bytes * 50 frame = 87.2 Kbps

大綱 SIP測試環境架設 安裝X-Lite, SJPhone與Ethereal 設定讓同一台PC執行兩個SIP soft phone 在Linux環境下編譯open source的Proxy Server

在只有文字模式Linux環境下擷取SIP封包: 編譯與使用ngrep

Testing Environment X-Lite SJPhone Ethereal VMWare Red Hat 9 SER ngrep

設定SJPhone Options/Profiles/PC to PC (SIP)確認設定為in use

在上個畫面點選Edit, 在Profile Option/STUN中, 不要勾選Use discovered address in SIP

如果要強迫binding某個IP, 可以在Options/Call Options/Outgoing calls裡設定

設定X-Lite X-Lite在安裝完成, 第一次執行時, 會一直跳出Menu/System Settings/SIP Proxy/Default的頁面, 我們需要設定一下以便測試點對點 Enable: Yes Display Name: 1001 Username: 1001 Authorization User: 1001 Password: 1001

Domain/Realm: 填Linux host IP, 之後要用,測試點對點時沒用到, 只是為了讓X-Lite不要一直跳出設定畫面

SIP Proxy: 填host Linux IP Outbound Proxy: 填 host Linux IP Use Outbound Proxy: Never Send Internal IP: Always Register: Never Direct Dial IP: Yes

在Menu/Network要設定 Auto Detect IP: No Listen on IP: 如果要強制binding某個IP, 可以填在這 Use X-NAT to Choose SIP/RTP Ports: Never Listen SIP Port: 為避免和SJPhone衝突, 不要填5060, 我通常喜歡改成50607或是50600

測試點對點 SJPhone  X-Lite: 輸入1001@xxx.xxx.xxx.xxx:50600 X-Lite  SJPhone: 輸入1000@xxx.xxx.xxx.xxx 這個模式(X-Lite主叫, SJPhone被叫)會有問題, 詳情請見下面說明

Some problems with SJPhone 注意我們只有一個網路介面, 而且只有一個音效介面, 因此在本機上SJPhone和X-Lite對打會有怪現象發生, 而且Ethereal會抓不到封包 另外, 由於我們在同一台機器上執行兩個sip soft phone, SJPhone若是被叫端, 他會回應c: IN IP4 127.0.0.1, 因此造成問題

安裝設定Ethereal 先安裝WinPcap 然後安裝Ethereal 啟動Ethereal後, 按下Capture/Interfaces, 會跑出一個視窗, 找到正確網路介面後, 按下Capture就開始抓封包了

為了方便閱覽, 我通常設定Filter: sip, 這樣其他不是sip的封包就會被過濾掉

通常要抓到封包需要純Hub, 而Switch Hub會有些問題 在比較新版的Ethereal中有個設定值Capture packets in promiscuous mode可以勾選, 以解決(部分)Switch Hub的問題

如果要把抓到的封包傳給別人分析, 用File/Save As, 就可以存成檔案 如果只是要方便閱讀, 可以用File/Export, 然後選擇匯出的格式

Host Linux VM + RH9 Development Tools + mysql-server + mysql-devel ( + apache-server + PHP) Memory > 128MB (256MB recommend) HD space > 2GB (4GB recommend)

SSH login 如果是安裝RH9, 在重啟後SSH就自動啟動 如果是其他平台, 先用ps aux檢查, 如果沒有啟動可以下命令service sshd start

putty 在Windows執行putty, 然後在Session/Host Name輸入Linux Host的IP

pietty 也可以用pietty取代putty

psftp 如果要在Windows和Linux Host之間傳輸檔案, 可以執行psftp psftp> open xxx.xxx.xxx.xxx psftp> put 要傳到linux裡的檔名 psftp> get 要回傳windows的檔名

winscp 有的時候psftp建立連線很慢, 可以用winscp取代psftp, 而且winscp有圖形介面

SIP proxy server # tar xvfz ser-0.9.6_src.tar.gz # cd ser-0.9.6 # make # make modules # make install # ser # serctl ul show

SER的啟動 SER如果沒有更改Makefile, 通常會安裝在/usr/local/sbin, 換句話說, 如果要改變安裝位置, 需要去更動Makefile SER的預設的config檔案通常是在/usr/local/etc/ser/ser.cfg, 我們可以用 ser -f your_own_ser_cfg 來改變讀取的config檔

如果在shell直接下命令, shell卻回報找不到執行檔, 可以檢查PATH(echo $PATH)後, 執行PATH=$PATH:/usr/local/sbin

SER啟動後檢查 Listening on: 檢查SER是否binding到我們要的protocol和位址 下命令ps aux, 檢查SER是否真的有啟動 如果SER啟動有問題, 可以用ser -c檢查config是否有錯 如果config檔沒錯, 但是SER啟動仍然有問題, 可以進入偵錯模式檢視問題

SER的偵錯模式 通常我會下命令 ser -ddd -D -E -l eth0:5060 -d: Debugging mode (multiple -d increase the level) -D: Do not fork into daemon mode -E: Log to stderr -l address: Listen on the specified address/interface

SER的config 如果執行ser之後, 發現ser抱怨SIP_DOMAIN沒有設定, 可以在linux shell執行以下命令 SIP_DOMAIN=“your_own_sip_domain” export SIP_DOMAIN SER的config檔內容在下面說明

global configuration parameters debug: -d fork: -D log_stderror: -E check_via: -v dns: -r rev_dns: -R port: the listen port

children: -n fifo: ser fifo location listen: the listen address alias: 別名 fifo_db_url: the database location of fifo

SER IPC SER利用fifo來達成IPC(inter-process communication), 通常是用在和外部程式溝通時使用 預設的SER config設定fifo="/tmp/ser_fifo"

在比較新版本的SER, 也可以用Unix socket來達到IPC, 設定的方法就是把fifo改成socket, 但是要注意Linux kernel必需support Unix socket 如果我們沒有要和其他process用fifo_db溝通, fifo_db_url可以不用設定, 不過SER會抱怨”no fifo_db_url given”

module-specific parameters loadmodule: 指定要載入的模組, 注意各模組之間可能會有相依性 modparam: 設定各模組的parameters, 各模組的設定值可以在官方網站或是source code裡的README檔案找到, 但是注意有時說明檔會沒有更新, 所以需要搭配研讀source code

request routing logic 這裡就是SER的routing table, 也就是我們要讓自己的SIP Proxy Server執行指定的行為的地方 在source code裡面有兩個目錄, etc和examples, 裡面有各式各樣的範例, 但是還是要注意, 也許程式更新了但是範例還是沒有更新

編譯與安裝libpcap ngrep depends on libpcap, 所以我們先編譯與安裝libpcap # tar xvfz libpcap-0.8.3.tar.gz # cd libpcap-0.8.3 # ./configure # make # make install

編譯與安裝ngrep # tar xvfj ngrep-1.44-1.tar.bz2 # cd ngrep-1.44 # ./configure # make # make install

使用ngrep擷取SIP封包 由於SIP封包的內容是純文字的, 而且每行結尾均為CR LF, 所以我們用下面的命令來擷取SIP封包 # ngrep -d any port 5060 -W byline

“-d”: 後面可以填device name(例如eth0), 我們填any表示所有的network device封包都要擷取 “port 5060”: 指定port=5060, 其他的不擷取, 若是SIP server的listen port不是用default的5060 port, 則這裡的值要跟著更改 “-W byline”: 如果收到的封包有換行符號, 則顯示時也跟著換行

如果要把抓到的封包存到檔案, 而不是輸出到stdout # ngrep -d any port 5060 -W byline \ > capture.txt # ngrep -d any port 5060 -W byline \ | tee capture.txt

大綱 SIP初探: 擷取SIP封包 點對點 Call Setup SIP Header SDP 註冊到Proxy Server 認證相關問題

Reference RFC 2327: SDP: Session Description Protocol RFC 2543: SIP: Session Initiation Protocol (俗稱SIP v1) RFC 3261: SIP: Session Initiation Protocol (俗稱SIP v2) RFC 3264: An Offer/Answer Model with the Session Description Protocol (SDP)

SIP user agents UAC (user agent client): an entity which make a call, terminal a call UAS (user agent server): an entity which receive a call , terminal a call

SIP servers Proxy server: make request on behalf of other clients Location server: keep the info of call party’s location Redirect server: map the address into new address Registrar server: accept REGISTER request

SIP client and SIP server 在本課程中, 我們稱一個SIP client, 他需具備UAC+UAS全部或部分的特性, 類似H.323裡所定義的Endpoint 在本課程中, 我們稱一個SIP server, 他需具備Proxy server+Location server+ Redirect server+Registrar server全部或部分的特性, 類似H.323裡所定義的Gatekeeper

有時候,我們稱一個Proxy server, 其實就是在說一個SIP server

SIP method REGISTER INVITE ACK BYE CANCEL OPTIONS: query the capability of server INFO: carry a out-of-band information (eg. DTMF)

SIP response 1xx: informational 2xx: successful 3xx: redirection 4xx: request failure 5xx: server failure 6xx: global failure

1xx and 2xx and 3xx 100 Trying 180 Ringing 181 Call Is Being Forwarded 183 Session Progress 200 OK 301 Moved Permanently 302 Moved Temporarily

4xx 401 Unauthorized 403 Forbidden 404 Not Found 405 Method Not Allowed 406 Not Acceptable 407 Proxy Authentication Required 408 Request Timeout

415 Unsupported Media Type 480 Temporarily Unavailable 481 Call/Transaction Does Not Exist 483 Too Many Hops 486 Busy Here 487 Request Terminated 488 Not Acceptable Here

5xx and 6xx 500 Server Internal Error 501 Not Implemented 503 Service Unavailable 513 Message Too Large 600 Busy Everywhere 603 Decline 604 Does Not Exist Anywhere 606 Not Acceptable

Make a simple call A send “INVITE” to B B send “180 Ringing” to A B send “200 OK” to A A send “ACK” to B Media connection between A and B B send “BYE” to A A send “200 OK” to B

Sample INVITE package INVITE sip:1000@192.168.11.200 SIP/2.0 Via: SIP/2.0/UDP 192.168.11.175:50607;rport;branch=z9hG4bK82FC66F931EF4E40AE365120135E5D8D From: 1001 <sip:1001@192.168.11.200:50607>;tag=2177201999 To: <sip:1000@192.168.11.200> Contact: <sip:1001@192.168.11.175:50607> Call-ID: D29C04C7-98D9-49B8-910E-561A4DC37902@192.168.11.175 CSeq: 39854 INVITE Max-Forwards: 70 Content-Type: application/sdp User-Agent: X-Lite release 1103m Content-Length: 197

v=0 o=1001 14655515 14655546 IN IP4 192.168.11.175 s=X-Lite c=IN IP4 192.168.11.175 t=0 0 m=audio 8000 RTP/AVP 0 101 a=rtpmap:0 pcmu/8000 a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-15

Header fields Call-ID, i Contact, m Content-Length, l Content-Type, c From, f Subject, s To, t

Via, v CSeq Max-Forwards User-Agent …

The min required header field set Via Max-Forwards To From Call-ID CSeq

SDP Version number, v Origin containing name, o Subject, s Connection, c Time, t Media, m Attributes, a

Content-Length calculation v=0 --> 5 o=1001 14655515 14655546 IN IP4 192.168.11.175 --> 48 s=X-Lite --> 10 c=IN IP4 192.168.11.175 --> 25 t=0 0 --> 7 m=audio 8000 RTP/AVP 0 101 --> 28 a=rtpmap:0 pcmu/8000 --> 22 a=rtpmap:101 telephone-event/8000 --> 35 a=fmtp:101 0-15 --> 17

空白字元要計算 行尾的CR LF (0x0D 0x0A)要計算 所以上面例子裡的Content-Length為5+48+10+…+17=197

SJPhone reg to SER Options/Profiles點選New Profile Name: 輸入名字, 例如SER Profile Type: Calls through SIP Proxy

在按下2次OK後 Account: 1000 Password: 1000

新增完成後, 選取Edit, 在Proxy domain和User domain填入Linux Host IP

X-Lite reg to SER Menu/System Settings/SIP Proxy/Default Register: Always Direct Dial IP: No 設定完畢後, 記得重新啟動X-Lite

Registration A send “REGISTER” to P P send “100 Trying” to A P send “200 OK” to A

Sample REGISTER package REGISTER sip:192.168.11.200 SIP/2.0 Via: SIP/2.0/UDP 192.168.11.175:50607;rport;branch=z9hG4bK6C24482F4D7747ADBB4523FA7526E7C6 From: 1001 <sip:1001@192.168.11.200>;tag=1820338451 To: 1001 <sip:1001@192.168.11.200> Contact: "1001" <sip:1001@192.168.11.175:50607> Call-ID: 8588EED3AC6440C3A02DFE71976DC1B2@192.168.11.200 CSeq: 607 REGISTER Expires: 1800 Max-Forwards: 70 User-Agent: X-Lite release 1103m Content-Length: 0

Call with proxy server A send “INVITE” to P P send “INVITE” to B B send “180 Ringing” to P P send “180 Ringing” to A B send “200 OK” to P P send “200 OK” to A A send “ACK” to B

Media connection between A and B B send “BYE” to P P send “BYE” to A A send “200 OK” to P P send “200 OK” to B

SER with mysql support Modify Makefile to enable mysql support 找到exclude_modules, 把mysql去掉 Re-compile and re-install SER 記得先停止SER, 可以下命令killall ser 確保安全, 先清掉之前安裝的目錄, 然後make clean

SER mysql table 記得先export SIP_DOMAIN 執行SER, 確認SER已經啟動 然後Create the database table 問密碼時直接按Enter 注意, 這裡的密碼指的是MySQL的密碼, 預設是沒有

# export SIP_DOMAIN="RH9“ # ser # ser_mysql.sh create MySql password for root: creating database ser ... Enter password:

Add user 命令格式為 serctl add username passwd email SER database table的預設密碼為heslo # serctl add 1000 1000 1000@localhost MySql password: heslo new user added new user into uri table added 多加幾個, 例如1001, 1002, 1003, …

Re-install SER mysql table 如果SER的mysql table毀損可以 下命令ser_mysql.sh reinstall, 或是 利用工具清掉mysql裡的table, 然後依照前面的做法, 重新create新的

mysql and phpmyadmin # tar xvfz phpMyAdmin-2.9.0.tar.gz \ –C /var/www/html # service mysqld start 在某些系統可能是service mysql start # service httpd start 開啟IE, 網址列輸入http://linux_host/phpMyAdmin-2.9.0/

Config Modify config file of SER to enable auth and mysql support vi /usr/local/etc/ser/ser.cfg 找到mysql.so, auth.so, auth_db.so把comment拿掉 (就是拿掉該行最前面那個#)

db_mode設成2 calculate_ha1設成yes password_column設成password 啟動www_authorize和www_challenge, 並且把domain清空

loadmodule "/usr/local/lib/ser/modules/mysql.so“ loadmodule "/usr/local/lib/ser/modules/auth.so" loadmodule "/usr/local/lib/ser/modules/auth_db.so“ modparam("usrloc", "db_mode", 2) modparam("auth_db", "calculate_ha1", yes) modparam("auth_db", "password_column", "password") www_authorize("", "subscriber") www_challenge("", "0")

Reg auth A send “REGISTER” to P P send “401 Unauthorized” to A (407 Proxy Authentication Required) A send “REGISTER” to P with Authorization information P send “200 OK” to A

Enable call auth with SER Copy the reg auth settings Modify it if (method=="INVITE") { if (!www_authorize("", "subscriber")) { www_challenge("", "0"); break; };

Call auth A send “INVITE” to P P send “401 Unauthorized” to A A send “ACK” to P A send “INVITE” to P with Authorization information P send “INVITE” to B B send “180 Ringing” to P P send “180 Ringing” to A

B send “200 OK” to P P send “200 OK” to A A send “ACK” to B Media connection between A and B B send “BYE” to P P send “BYE” to A A send “200 OK” to P P send “200 OK” to B

實地演練 練習將SJPhone和X-Lite都註冊到SER, 由SJPhone打給X-Lite, 啟動Ethereal抓取封包, 然後檢視封包內容 請比較no auth, reg auth和call auth之間行為的差異性

Quiz What should I fill the address of “From”, “To”, and “Contact” fields? Should it be local address, NAT’s address, or proxy server’s address?

大綱 SIP Registration Registration Registration Update Contact List Request UnRegistration Unsuccessful Registration

SIP Registration 這個部分我們使用X-Lite and SER, 直接擷取封包 請更改X-Lite的Advanced System Settings / SIP Settings, 設定Reregister Proxy = 180

Registration: 正常執行SER, 然後開啟X-Lite(假設已經設定完成)就可以擷取到註冊封包 Registration Update: 我們前面設定了Expire Time = 180 sec, 所以等待3分鐘後就可以擷取到重新註冊封包

Contact List Request: X-Lite於正常執行狀態, 更改X-Lite向SIP server註冊的帳號及密碼即可擷取到新的註冊封包 UnRegistration: 關閉X-Lite, 即可擷取到解除註冊的封包 Unsuccessful Registration: 把X-Lite向SIP server註冊的帳號及密碼故意填錯, 可以擷取到註冊失敗的封包

大綱 SIP Call Call Establishment Through Two Proxies No Answer Busy No Response Temporarily Unavailable

SIP Call 這個部分我們使用SJPhone, X-Lite and SER, 直接擷取封包 請將前面更改X-Lite的設定改回來(Advanced System Settings / SIP Settings, 設定Reregister Proxy = 1800)

Call Establishment: 由SJPhone發起呼叫, X-Lite為受話端即可 Through Two Proxies: 啟動另一個SER (listen port要跳開), 將SJPhone註冊到新的SER, 這個新的SER設定將封包forward到第一台SER, 測試完畢請將SJPhone註冊回原來的SER

No Answer: (1) 由SJPhone發起呼叫, X-Lite不要應答, 等待2分鐘會收到408 Request Timeout (2) 由SJPhone發起呼叫, X-Lite還沒應答, SJPhone掛斷電話 Busy: 用SJPhone或是X-Lite自己呼叫自己, 會收到486 Busy

No Response: 先停掉SER, 關掉X-Lite, 然後再啟動SER, 由SJPhone呼叫X-Lite(此時沒有啟動) Temporarily Unavailable: 將X-Lite正常開啟, 再正常關閉X-Lite, 然後由SJPhone呼叫X-Lite