73
SIP 协协协协协协

SIP 协议初级讲义

  • Upload
    zaide

  • View
    149

  • Download
    6

Embed Size (px)

DESCRIPTION

SIP 协议初级讲义. 基本信息. 适用对象: SIP 协议初学者 学习目标: 掌握 SIP 协议的基本术语 理解 SIP/SDP 消息 掌握 SIP 协议的寻址过程 掌握媒体协商过程 掌握 SIP 呼叫流程 具有 SIP 协议的独立学习能力 时间: 3小时学习+1小时讨论. 学习内容. 1. 概述(*) 2. SIP 的功能实体 3. SIP 的寻址 4. SIP 消息体结构 (*) 5. SIP 请求消息(*) 6. SIP 响应消息. 7. Sdp 协议 - PowerPoint PPT Presentation

Citation preview

Page 1: SIP 协议初级讲义

SIP 协议初级讲义

Page 2: SIP 协议初级讲义

基本信息适用对象:

SIP 协议初学者学习目标: 掌握 SIP 协议的基本术语 理解 SIP/SDP 消息掌握 SIP 协议的寻址过程 掌握媒体协商过程 掌握 SIP 呼叫流程 具有 SIP 协议的独立学习能力时间: 3 小时学习+ 1 小时讨论

Page 3: SIP 协议初级讲义

学习内容1. 概述 (*)2. SIP 的功能实体3. SIP 的寻址 4. SIP 消息体结构 (*)5. SIP 请求消息 (*)6. SIP 响应消息

7.Sdp 协议8.SIP 的能力协商9. 案例分析 (*)10. 测验11. 实现方法入门12.SIP 学习方法

* 部分将重点讲述

Page 4: SIP 协议初级讲义

1. SIP 协议概述 基本情况 主要特点 主要结构 名词解析

Page 5: SIP 协议初级讲义

基本情况 创立 组织: IETF/mmusic 工作组 IP 网络协议的后起之秀,是 NGN 的理想协议 时间: 1995 开始研究

1999 年 2 月提出草案 草案编号: RFC2543 目前版本: Version 9 ( Feb , 2002 )

Page 6: SIP 协议初级讲义

主要特点 是应用层的控制协议,可以建立,修改和结束多媒体会话。 独立于 TCP 或者 UDP ,使用自己应用层协议保证消息的可靠传送。 消息体采用文本方式 以客户-服务器方式建立会话 灵活的寻址方式 SIP 没有媒体协商功能,往往需要集成 SDP 协议

Page 7: SIP 协议初级讲义

主要结构

UserAgent

SIP Proxy Server

UserAgnet

SIP Redirect Server

SIP Proxy Server

Location Server

IP Network

Registrar Server

DBMS

图例 SIP 协议私有协议

Page 8: SIP 协议初级讲义

2. 功能实体 User Agent Proxy Server Redirect Server Registrar Server Location Server

Page 9: SIP 协议初级讲义

功能实体( 1 ) User Agent (呼叫代理)

是 SIP 网络的终端,具体的分为 UserAgent Client 和 UserAgent Server 。 UAC 是客户端,表示主叫; UAS 是服务端,表示被叫。

REGISTRAR SERVER (注册服务器)接受客户端的注册请求,将用户的地址信息写入数据库,并返回注册状态。

Page 10: SIP 协议初级讲义

功能实体( 2 ) REDIRECT SERVER (重定向服务器) 接受 SIP 的请求,映射请求的原地址成零个或者多个 IP 地址,并且返回给客户端。 由客户端重新发起请求。 LOCATION SERVER (定位服务器) 管理若干数据库,接受由 Redirect Server 或

者 Proxy Server 的路由查询。

Page 11: SIP 协议初级讲义

功能实体( 3 )Proxy Server (代理服务器) 完成 SIP 消息的转接和转发功能,可以修改 SIP消息内容。具体功能有:呼叫认证状态管理 路由选择失败重传

Page 12: SIP 协议初级讲义

3. SIP 协议的寻址 SIP URL URL 的表示规则 定位 UserAgent 定位方式

Page 13: SIP 协议初级讲义

SIP URL SIP 依靠 URL 进行路由。 SIP URL 的格式可以是

EmailID 或者是 E.164 地址。SIP: user@hostTEL:[email protected]

URL 可以用在下面头域中: FROM 头域

FROM:<SIP:[email protected]> TO 头域

TO:<SIP:[email protected]> CONTACT 头域: <TEL:[email protected]> 可以方便的嵌入网页,提供多种网上业务

Page 14: SIP 协议初级讲义

SIP-URL = "sip:" [ userinfo "@" ] hostport url-parameters [ headers ] userinfo = user [ ":" password ] user = *( unreserved | escaped | "&" | "=" | "+" | "$" | "," ) password = *( unreserved | escaped | "&" | "=" | "+" | "$" | "," ) hostport = host [ ":" port ] host = hostname | IPv4address hostname = *( domainlabel "." ) toplabel [ "." ] domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum toplabel = alpha | alpha *( alphanum | "-" ) alphanum IPv4address = 1*digit "." 1*digit "." 1*digit "." 1*digit port = *digit url-parameters = *( ";" url-parameter ) url-parameter = transport-param | user-param | method-param | ttl-param | maddr-param | other-param

transport-param = "transport=" ( "udp" | "tcp" ) ttl-param = "ttl=" ttl ttl = 1*3DIGIT ; 0 to 255 maddr-param = "maddr=" host user-param = "user=" ( "phone" | "ip" ) method-param = "method=" Method tag-param = "tag=" UUID UUID = 1*( hex | "-" ) other-param = ( token | ( token "=" ( token | quoted-string ))) headers = "?" header *( "&" header ) header = hname "=" hvalue hname = 1*uric hvalue = *uric uric = reserved | unreserved | escaped reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," digits = 1*DIGIT

URL 的表示规则

Page 15: SIP 协议初级讲义

例子 sip:[email protected] sip:j.doe:[email protected];transport=tcp sip:[email protected]?subject=project sip:+1-212-555-1212:[email protected];user=phone sip:[email protected] sip:[email protected] sip:[email protected] sip:alice%[email protected] sip:[email protected];method=REGISTER

Page 16: SIP 协议初级讲义

定位 Proxy 服务器 配置 UA 指向 Proxy Server

配置 UA 指向 Redirect Server ,由 Redirect Server 分配合适的 Proxy Server

Page 17: SIP 协议初级讲义

定位 SIP UserAgent Server (被叫) User Agent 激活时通过 Registrar Server 注册。 Proxy Server 通过 Location Server 得到

User Agent Server 的路由。 Proxy Server 根据地址呼叫 UserAgent

Server 如果没有能到达 UserAgent Server 的路由,必须返回 UserAgent Client (主叫)具体的原因,包括代码和文字的原因。

Page 18: SIP 协议初级讲义

定位 UserAgent 的方式 简单方式 主叫 Proxy 可以直接发送请求消息到被叫,建立会话。只适应小型网络。 复杂方式 主叫的 Proxy Server 也可以发请求消息到被叫

的 Proxy Server ,由 Proxy Server 根据 URI重新定位 UserAgent Server 。

Page 19: SIP 协议初级讲义

注意的问题( 1 ) Location Server 可能会返回几个位置, Proxy

Server 可以决定如何处理。 如果 Proxy Server 转发 SIP 请求,它必须将自己的 IP 地址加入到 Via 部分的开头。而在返回的时候,将 Via 域中的地址去掉。

Page 20: SIP 协议初级讲义

注意的问题( 2 ) 在进行 Forks 定位时,用相同的 Call -

ID , Cseq ,而 Tags 不同。 Proxy 有两种形式: 有状态返回 UserAgent 100 消息,表示 Proxy 可以完成状态的管理 无状态

Proxy 不能管理呼叫状态,必须有 UserAgent 自己解决

Page 21: SIP 协议初级讲义
Page 22: SIP 协议初级讲义

注意的问题( 3 )(比较 CallID/CSeq/Tag ) CallID 是会话的唯一标志 一个会话过程使用同一个 CallID 随机产生 Cseq 是会话命令的序列 一个 Transaction 使用同一个 Cseq 32 位无符号整数 判断命令的版本 以 Bye 结束会话时增加 “tag” 是一个标签,用来区别会话中的不同对象。 出现在请求的 From 头域中,当共享同一个 SIP 地址的用户的两个实例使用同一个 Call-ID 发出邀请时,必须使用此“ tag” 。 Proxy 使用 tag 来判断消息是传给自己,还是给用户。 单个用户的 Tag 在呼叫过程中保持一致

Page 23: SIP 协议初级讲义

注意的问题( 4 ) CALL LEG (呼叫历程)

Call leg 用 CallID (呼叫标识)、 From (源方)和 To (目的地)的组合来标识一个会话。 TRANSACTION (事务) SIP 定义一个请求及其最终应答称为一个事务。所有应答有相同的 Call-ID,Cseq,To 和 From 域。

Page 24: SIP 协议初级讲义

4. SIP 消息体结构 消息体结构 头域说明

Page 25: SIP 协议初级讲义

SIP 消息体组成响应的 SIP版本 SP状态 码 SP 原 因 短 语 CRLF

请求的方法 SP请求的 SIP-URL SP SIP版本 CRLF

General-header| Request-header| Response-header| Entity-header消息体( SDP原码,加密的

SDP …, )

起始行 Start-Line消息头域 Message-line 空行 CRLF 消息体 Message-body

Page 26: SIP 协议初级讲义

Start line (起始行详细描述)起始行Start-Line = request-line | status-line request-line = Method SP Request-URI SP

SIP-Version CRLF INVITE sip :[email protected] SIP2.0status-line = SIP-Version SP status-code

SP phase CRLF SIP2.0 200 OK

Page 27: SIP 协议初级讲义

General headers (通用头域)路由信息: Accept | Accept-Encoding | Accept-Language | Contact | Date| Encryption| Expires | From | Record-Route |Timestamp呼叫标示 : Call-ID, CSeq, INVITE sip: [email protected] SIP2.0 Via: SIP/2.0/UDP proxy.SunTek.com Via: SIP/2.0/UDP sation1.SunTek.com From : Wang < sip: [email protected] > To : softswitch <sip: [email protected] > Call-ID : 23434@ sation1.SunTek.com CSeq: 1 INVITE Contact : [email protected]

Page 28: SIP 协议初级讲义

其他头域(请求、响应、实体)Request Headers: Hide, In-Reply-To, Max-Forwards, Priority, Proxy-

Authentication, Proxy-Require, Response-Key, Subject, Route

Response Headers:Proxy-Authenticate, Retry-After, Server, Unsupported,

Warning, WWW-Authenticate

Entity Headers: Allow, Content-Disposition, Content-Encoding, Content-

Language, Content-Length, Content-Type, Expires

Page 29: SIP 协议初级讲义

关键头域解析 (Accept,CallID) Accept : 指明请求方所能接受的响应类型 . 媒体类型 : Internet media types, defined in MIME 缺省值是 application/sdp.syntax Accept : # ( */* | type/* | type/subtype ) ; q= value; Example : Accept : text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c CallID : 唯一标识一个会话,保持全球的唯一性

Call-ID 区分大小写 随机产生,有效的提高安全性 CallID 相同,消息体不同时将更新会话

Syntax: Call-ID = (“Call-ID” | “i”)”:”local-id”@”host Example:Call-ID: f81d4fae-7dec-11d0-a765-

[email protected]

Page 30: SIP 协议初级讲义

关键头域解析 (Cseq) Cseq 对于每一个请求,客户必须使用 Cseq ( Command sequence )通用头域 重传请求用相同的 Cseq ACK 和 CANCEL 相应必须返回跟 INVITE 请求相同的 Cseq BYE 请求释放一个请求时必须含有以更高数值的 Cseq 用户代理服务器必须记住同一个 Call-ID 的 INVITE 请求的最高序列数。 所有在并行搜寻中产生的请求拥有和触发此并行搜寻的请求一样的

Cseq值。 Syntax: Cseq =“Cseq” “ ” : 1*DIGIT Method Funtion :不用比较消息体就可以将不同消息区分开来Example: CSeq: 4711 INVITE

Page 31: SIP 协议初级讲义

关键头域解析( From , To )

From (源地址) 请求和响应必须包含 From 通用头域,指示请求的初始者 “tag” 可以出现在一个请求的 From 头域中,当共享同一个 SIP 地址的用户的两个实例使用同一个 Call-ID 发出邀请时,必须使用此“ tag”, 如 Forks 。

To (目的地地址) To 通用头域说明了请求的接收者 如果请求包含了不止一个 Via 头域,则必须增加“ tag”参数。Syntax:

To = “( To” | “t” “ ”) : ( name-addr | addr-spec ) * “ ”( ; addr-params )

Example: To: The Operator <sip:[email protected]>;tag=287447

Page 32: SIP 协议初级讲义

关键头域解析( Max-Forwards,Via)

Max-Forwards (最大前转数目) 用来限制前转请求的代理或者网关的数目,防止死循环。 适用于任何请求方式, 防止死循环的还有 Via 域 Via 头域指示请求迄今为止所走的路径。 确保消息能够迎着原请求路径返回 防止死循环

Page 33: SIP 协议初级讲义

关键头域解析( Content - Length)

Content-Length (内容长度) 实体头域指示消息体的长度。形式上以八个比特为一个字节。 服务器如果收到一个包含有 Content-Length 域

的 UDP 请求。但它的值比消息体的实际长度大,客户则应产生一个 400 类的响应。

Page 34: SIP 协议初级讲义

关键名词解析( Subject)

Subject (标题) 为请求头域提供了一个摘要,或者指示了呼叫的实际情况 可以不必分析通话描述便可过滤呼叫。Syntax : Subject = “( subject” | “s” “ ”) : *TEXT-UTF8

Timestamp (时间标记) 指示客户何时向服务器发送请求 服务器不能修改此值 可以计算 Round-Trip 时间,以便更改 TimeOut 时间

Page 35: SIP 协议初级讲义

5. SIP 请求消息 INVITE ACK BYE REGISTER CANCEL OPTIONS

Page 36: SIP 协议初级讲义

INVITE (会话邀请) INVITE 用于发起一个会话请求,建立会话的三个基本头域参数( CallID,From,To )。此三个基本参数在会话过程中保持不变。 INVITE 消息体中带有本次会话的基本参数 连接地址 主叫媒体能力 带宽指示

Page 37: SIP 协议初级讲义

ACK (邀请证实) 证实 INVITE 请求 ACK 只和 INVITE 请求一起使用 ACK 有 UserAgent Client (主叫)发出 ACK 中的 CallID,From,To,Cseq 由

INVITE 消息复制而来

Page 38: SIP 协议初级讲义

INVITE sip:[email protected] SIP/2.0Via: SIP/2.0/UDP 192.190.132.20:3456Call-ID: [email protected]: sip: [email protected]: sip: [email protected] 1 INVITEContent-type: application/sdpContent-Length: 98

v=0 o=mary 3123 121231 IP IP4 192.190.132.20 c=IN IP4 192.190.132.20 m=audio 49170 RTP/AVP 0

Mary

192.190.132.20

192.190.132.31

John

SIP/2.0 200 OK v: SIP/2.0/UDP 192.190.132.20:3456i: [email protected]: sip: [email protected]: sip: [email protected] 1 INVITEc: application/sdpl: 98

v=0 o=john 5664 456456 IP IP4 192.190.132.31 c=IN IP4 192.190.132.31 m=audio 23244 RTP/AVP 0

ACK sip:[email protected] SIP/2.0Via: SIP/2.0/UDP 192.190.132.20:3456Call-ID: [email protected]: sip: [email protected]: sip: [email protected] 1 ACK

Invite Details

Page 39: SIP 协议初级讲义

BYE (结束会话) 作用:结束当前会话 可以由 UAC (主叫)或者 UAS (被叫)发起 UA 收到 BYE 消息后,必须停止向对方发送媒体流

Page 40: SIP 协议初级讲义

BYE sip:[email protected] SIP/2.0v: SIP/2.0/UDP 192.190.132.31:3456i: [email protected]: sip: [email protected]: sip: [email protected] 2 BYE

SIP/2.0 200 OK Via: SIP/2.0/UDP 192.190.132.31:3456Call-ID: [email protected]: sip: [email protected]: sip: [email protected] 2 BYE

Bye Details

192.190.132.20

192.190.132.31

Page 41: SIP 协议初级讲义

REGISTER (用户注册) 用于 UA 向 Registrar Server 中登记 Request-URI :要注册的域名 To : Registrar Server 分析 To 头域的 URI ,将其与 UA 的 IP 地址关联起来 Contact : UA 发送注册信息中有可选的

Contact 头域,可以将 Contact 的 URI 也关联到UA 的 IP 地址。

Page 42: SIP 协议初级讲义

注册例子

Page 43: SIP 协议初级讲义

CANCEL (取消会话) 作用:取消正在建立的会话(注意不能取消已经建立的会话) UA 收到 CANCEL命令时,如果发现

CallID , FROM , TO 和 Cseq 一致时,便取消本次会话。典型应用: Proxy 取的用户的几个联系地址,同时发起邀请,但其中有些有返回时,对其他还没有返回的地址,可以发送 CANCEL 。

Page 44: SIP 协议初级讲义

OPTIONS (能力查询) 用途在发送会话请求之前查询 UserAgent Server 的能力集 响应消息复制 OTIONS命令的

CALLID , FROM , TO值 返回的能力可以在下面的头域中取得: Allow :支持的消息( INIVTE,ACK等) Accept-Language :支持的语言 SDP :支持能力

Page 45: SIP 协议初级讲义

6. SIP 的响应消息 响应消息的具体格式 状态码定义

Page 46: SIP 协议初级讲义

SIP 响应消息的格式The SIP response format.

From: sip:[email protected]: sip:[email protected];tag=2332462Call-ID: [email protected]: sip:[email protected]: Wed, 29 Jul 1998 9:00:00 GMTCSeq: 1 INVITE

Blank Line

Headers

Response Data(clear SDP,

encrypted SDP, text/plain or text/html)

SIP/2.0 302 Moved temporarily

Status Line

Page 47: SIP 协议初级讲义

状态码定义 1xx Responses - Information Responses 2xx Responses - Successful Responses 3xx Responses - Redirection Responses 4xx Responses - Request Failures Responses 5xx Responses - Server Failure Responses 6xx Responses - Global Failure Responses

Page 48: SIP 协议初级讲义

Status Code ( 1XX , 2XX , 3XX ) Informational 1xx 指示消息 100 Trying(尝试) 180 Ringing(振铃) 181 Call Is Being Forwarded(呼叫正被前转) Successful 2xx 请求成功,终止搜寻 200 OK(成功) Redirection 3xx 重定向 300 Multiple Choices(多个选择) 301 Moved Permanently(永久转移) 302 Moved Temporarily(临时转移) 305 Use Proxy(使用代理) 380 Alternative Service(可选的服务)

Page 49: SIP 协议初级讲义

Status Code ( 4XX )

Request Failure 4xx ( 客户端请求失败 ) 400 Bad Request(错误请求) 401 Unauthorized (未鉴权) 402 Payment Required (需要支付(付款)) 403 Forbidden (禁止) 404 Not Found (未找到) 405 Method Not Allowed (方式不允许) 406 Not Acceptable (不接受) 407 Proxy Authentication Required (需要代理验证) 486 Busy Here (本地忙)

Page 50: SIP 协议初级讲义

Status Code ( 5XX , 6XX ) Server Failure 5xx( 服务器失败 5XX) 500 Server Internal Error (服务器内部错误) 501 Not Implemented (未实现) 502 Bad Gateway (错误的网关) 503 Service Unavailable (无效服务) 504 Gateway Time-out (网关超时) 505 Version Not Supported (不支持的版本) Global Failure 6xx 600 Busy Everywhere (全忙) 603 Decline (拒绝) 604 Does Not Exist Anywhere (不存在) 606 Not Acceptable (不接受)

Page 51: SIP 协议初级讲义

7. SDP 协议介绍 协议概述 协议格式 理解 SDP 协议

Page 52: SIP 协议初级讲义

SDP 协议概述 协议说明 全称是 Session Description Protocol ( By

ITEF/MMUSIC )

SDP 功能概述 通过会话公告将会议的地址,时间,媒体和建立等信息告知的会话参加者,获得这些信息后可以加入会话。

SDP 的责任和传送 SDP 定义了会话描述的统一格式,但并不定义多播地址的分配

和 SDP 消息的传送,也不支持媒体编码方案的协商 SDP 描述的信息封装在传送协议中发送,典型的会话传送协议包括:会话公告协议( SAP , SIP , RTSP , HTTP )

Page 53: SIP 协议初级讲义

Header : 所用会话协议的控制信息 Text payload : 是 SDP 的会话描述。 文本的 Payload 必须小于 1K byte 一个包中只能有一个会话。

SDP 的传送格式 Header

Text Payload

Page 54: SIP 协议初级讲义

会话描述格式 综述 SDP 会话描述由很多文本行组成,每个文本行的格式是 <type>=<value>

1 ) <type> 是一个字符, <value>取决于 <type> 的变化。2 )两者必须区分大小写(通常都是小写)3 ) <value> 一般由多个字段组成,各个字段由一个空格符分隔,也可以是一个自由格式阿文本串。4 )“=”两侧不允许有空格。

Page 55: SIP 协议初级讲义

会话描述格式 Session Descriptionv=(protocol version) o=(owner/creator and session identifier). s= (session name) i=* (session information) u=* (URI of description) e=* (email address) p=* (phone number) c=*(connection information - not

required if included in all media)

b=* (bandwidth information) One or more time descriptions

(see below) z=* (time zone adjustments) k=* (encryption key) a=* (zero or more session

attribute lines) Zero or more media descriptions

(see below)

Page 56: SIP 协议初级讲义

Sdp语法 Time description t= (time the session is active) r=* (zero or more repeat times) Media description m= (media name and transport address) i=* (media title) c=* (connection information - optional if included at

session-level) b=* (bandwidth information) k=* (encryption key) a=* (zero or more media attribute lines)

Page 57: SIP 协议初级讲义

例子v=0 版本是 0o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4o=<username> <session id> <version> <network type> <address

type><address> <session id> 取决于 NTP ( Network Time Protocol )<version> is increased when a modification is made s=SDP Seminar //只能有一个 Session name i=A Seminar on the session description protocol 对于会话水平和媒体水平,都只能是一个 i.u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps // 可选的,允许有多个 [email protected] (Mark Handley)p=+44-171-380-777 // Email&Phone, 可多选,也可不选。 + 表示国家代码 ; -表示号码连接符c=IN IP4 224.2.17.12/127/3 // Connection Data // c=<network type> <address type> <connection address> // IN stand for Internet //127 stand for TIME TO LIVE (range 0-255) //3 表示后面连接的地址生命期是 127

Page 58: SIP 协议初级讲义

b=12345678:8 // b=<modifier>:<bandwidth-value> 。 可 选项 ,modifier 是带宽的修饰语,带宽值的单位是 kilobits/second

t=2873397496 2873404696 // t=<start time> <stop time> 如果stop time 为零,则会话无效;如果 start time 为 0 ,则永久有效。注意要写上 start time 和 stop time ,以防止防止意外。

K= uri:<202.1.2.3> // Encryption Keys k=<method>:<encryption key> // 到 URI 指定的地址取密钥 a=recvonly // a=<attribute> m=audio 49170 RTP/AVP 0// 可多选 m=<media> <port> <transport> <fmt list> // AVP=audio/video profile // <fmt list> 参考下页表m=video 51372 RTP/AVP 31

Page 59: SIP 协议初级讲义

Audio Encoding Payload type 1016 1

DVI4 5, 6G721 2 G722 9G728 15 GSM 3L16 10, 11 LPC 7MPA 14

PCMA 8 PCMU 0

Payload types for standard audio encoding

Page 60: SIP 协议初级讲义

8 . 能力协商 协商介绍 协商例子

Page 61: SIP 协议初级讲义

UA 能力协商概述 主叫携带能力集

INVITE 的消息体中带有 UAC (主叫)的能力集 被叫证实能力

UAS (被叫)在从主叫的能力集中选择一种,通过 200 OK 消息返回 根据消息体中的 IP 地址和端口号创建 RTP 流 c=IN IP4 192.190.132.3 (例子参加案例分析之“基本呼叫”)

Page 62: SIP 协议初级讲义

9.案例分析 最简单的呼叫 经过两个 Proxy 的呼叫 呼叫转移

Page 63: SIP 协议初级讲义

[email protected]=IN IP4 192.190.132.20m=audio 49170 RTP/AVP 0 3

200 OKc=IN IP4 192.190.132.31m=audio 12345 RTP/AVP 3

John’s terminal rings

ACK

192.190.132.31

JohnMary

Port 12345

The response indicates that John’s terminal can receive GSM data, on port 12345

192.190.132.20

例子一:最简单的呼叫

180 Ring

GSM Stream

200 OK

BYE

Page 64: SIP 协议初级讲义

例子二:经过两个 Proxy 的呼叫

Page 65: SIP 协议初级讲义

例子三: 遇忙转移User

AProxy User B1

INVITEINVITE100 Trying 468 Busy

ACK

INVITE

180 Ringing180 Ringing 200 OK200 OK

ACKACK

Both way RTP voice

BYE BYE

200 OK200 OK

Page 66: SIP 协议初级讲义

10. 测验1. SIP 网络的主要功能实体是什么?2. SIP 协议有什么请求消息?3. SIP 如何寻址?4. 如何进行媒体协商?5. 画出经过一个 Proxy Server 的呼叫序列图

Page 67: SIP 协议初级讲义

11. SIP 协议的实现方法入门 概述 封装消息 解析消息 状态机

Page 68: SIP 协议初级讲义

实现方法概述

Page 69: SIP 协议初级讲义

封装消息

Cal l I DFromTo

内存对象

EnCode

I NVI TE

Cal l I DFromTo

字符串消息

Page 70: SIP 协议初级讲义

解析消息

Cal l I DFromTo

内存对象

DeCode

State

Cal l I DFromTo

字符串消息

Page 71: SIP 协议初级讲义

状态机的实现

Page 72: SIP 协议初级讲义

12. SIP 的继续学习方法1. SIP 协议原文( RFC2543 )

2. SIP 协议的扩展( RFC2976 )

3. SIP 的权威站点1 ) http://www.ietf.org/html.charters/sip-charter.html (官方站点)2) Http://www.sipforum.com (最新应用)3) Http://www.sinpcenter.com (最新应用)4) Http://www.vovida.org (免费源代码组织)5) http://www.cs.columbia.edu/~hgs/sip/ ( SIP 的哥伦比亚大学老家)

Page 73: SIP 协议初级讲义

Contact me when you are troubled with SIP.It is my pleasure to discuss with you!Kermit