1 / 73

SIP 协议初级讲义

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

zaide
Download Presentation

SIP 协议初级讲义

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SIP协议初级讲义

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

  3. 学习内容 1. 概述(*) 2. SIP的功能实体 3. SIP的寻址 4. SIP消息体结构(*) 5. SIP请求消息(*) 6. SIP响应消息 7.Sdp协议 8.SIP的能力协商 9.案例分析(*) 10.测验 11.实现方法入门 12.SIP学习方法 *部分将重点讲述

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

  5. 基本情况 • 创立 • 组织:IETF/mmusic工作组 • IP网络协议的后起之秀,是NGN的理想协议 • 时间:1995开始研究 1999年2月提出草案 • 草案编号:RFC2543 • 目前版本:Version 9(Feb,2002)

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

  7. SIP Redirect Server Location Server IP Network 主要结构 DBMS Registrar Server SIP Proxy Server SIP Proxy Server UserAgent 图例 UserAgnet SIP协议 私有协议

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

  9. 功能实体(1) • User Agent(呼叫代理) 是SIP网络的终端,具体的分为UserAgent Client和UserAgent Server。UAC是客户端,表示主叫;UAS是服务端,表示被叫。 • REGISTRAR SERVER(注册服务器) 接受客户端的注册请求,将用户的地址信息写入数据库,并返回注册状态。

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

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

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

  13. SIP URL • SIP依靠URL进行路由。SIP URL的格式可以是EmailID或者是E.164地址。 SIP: user@host TEL:85521717@suntektech.com • URL可以用在下面头域中: • FROM头域 FROM:<SIP:kermit@suntektech.com> • TO头域 TO:<SIP:tom@netcentrex.com> • CONTACT头域:<TEL:6831@suntektech.com> • 可以方便的嵌入网页,提供多种网上业务

  14. URL的表示规则 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

  15. 例子 • sip:j.doe@big.com • sip:j.doe:secret@big.com;transport=tcp • sip:j.doe@big.com?subject=project • sip:+1-212-555-1212:1234@gateway.com;user=phone • sip:1212@gateway.com • sip:alice@10.1.2.3 • sip:alice@example.com • sip:alice%40example.com@gateway.com • sip:alice@registrar.com;method=REGISTER

  16. 定位Proxy服务器 • 配置UA指向Proxy Server • 配置UA指向Redirect Server,由Redirect Server分配合适的Proxy Server

  17. 定位SIP UserAgent Server(被叫) • User Agent激活时通过Registrar Server注册。 • Proxy Server通过Location Server得到User Agent Server的路由。 • Proxy Server根据地址呼叫UserAgent Server • 如果没有能到达UserAgent Server的路由,必须返回UserAgent Client(主叫)具体的原因,包括代码和文字的原因。

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

  19. 注意的问题(1) • Location Server可能会返回几个位置,Proxy Server可以决定如何处理。 • 如果Proxy Server转发SIP 请求,它必须将自己的IP地址加入到Via部分的开头。而在返回的时候,将Via域中的地址去掉。

  20. 注意的问题(2) • 在进行Forks定位时,用相同的Call-ID,Cseq,而Tags不同。 • Proxy有两种形式: • 有状态 返回UserAgent 100消息,表示Proxy 可以完成状态的管理 • 无状态 Proxy不能管理呼叫状态,必须有UserAgent自己解决

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

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

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

  24. 响应的SIP版本SP状态码 SP原因短语 CRLF 请求的方法SP请求的SIP-URL SP SIP版本CRLF 起始行 Start-Line General-header | Request-header | Response-header | Entity-header 消息头域 Message-line 空行 CRLF 消息体 Message-body 消息体(SDP原码,加密的SDP,…) SIP 消息体组成

  25. Start line(起始行详细描述) 起始行 Start-Line = request-line | status-line request-line = Method SP Request-URI SP SIP-Version CRLF INVITE sip :SS@SunTek.com SIP2.0 status-line = SIP-Version SP status-code SP phase CRLF SIP2.0 200 OK

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

  27. 其他头域(请求、响应、实体) 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

  28. 关键头域解析(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-00a0c91e6bf6@foo.bar.com

  29. 关键头域解析(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

  30. 关键头域解析(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:operator@cs.columbia.edu>;tag=287447

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

  32. 关键头域解析(Content-Length) • Content-Length(内容长度) • 实体头域指示消息体的长度。形式上以八个比特为一个字节。 • 服务器如果收到一个包含有Content-Length域的UDP请求。但它的值比消息体的实际长度大,客户则应产生一个400类的响应。

  33. 关键名词解析(Subject) • Subject(标题) • 为请求头域提供了一个摘要,或者指示了呼叫的实际情况 • 可以不必分析通话描述便可过滤呼叫。 Syntax: Subject = (“subject” | “s”)“:”*TEXT-UTF8 • Timestamp(时间标记) • 指示客户何时向服务器发送请求 • 服务器不能修改此值 • 可以计算Round-Trip时间,以便更改TimeOut时间

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

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

  36. ACK(邀请证实) • 证实INVITE请求 • ACK只和INVITE请求一起使用 • ACK有UserAgent Client(主叫)发出 • ACK中的CallID,From,To,Cseq由INVITE消息复制而来

  37. Invite Details INVITE sip:john@192.190.132.31 SIP/2.0 Via: SIP/2.0/UDP 192.190.132.20:3456 Call-ID: a2e3a@192.190.132.20 From: sip: mary@192.190.132.20 To: sip: john@192.190.132.31 Cseq 1 INVITE Content-type: application/sdp Content-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 John SIP/2.0 200 OK v: SIP/2.0/UDP 192.190.132.20:3456 i: a2e3a@192.190.132.20 f: sip: mary@192.190.132.20 t: sip: john@192.190.132.31 Cseq 1 INVITE c: application/sdp l: 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 192.190.132.20 192.190.132.31 ACK sip:john@192.190.132.31 SIP/2.0 Via: SIP/2.0/UDP 192.190.132.20:3456 Call-ID: a2e3a@192.190.132.20 From: sip: mary@192.190.132.20 To: sip: john@192.190.132.31 Cseq 1 ACK

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

  39. Bye Details BYE sip:mary@192.190.132.20 SIP/2.0 v: SIP/2.0/UDP 192.190.132.31:3456 i: a2e3a@192.190.132.20 From: sip: john@192.190.132.31 To: sip: mary@192.190.132.20 Cseq 2 BYE 192.190.132.20 SIP/2.0 200 OK Via: SIP/2.0/UDP 192.190.132.31:3456 Call-ID: a2e3a@192.190.132.20 From: sip: john@192.190.132.20 To: sip: mary@192.190.132.31 Cseq 2 BYE 192.190.132.31

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

  41. 注册例子

  42. CANCEL(取消会话) • 作用:取消正在建立的会话(注意不能取消已经建立的会话) • UA收到CANCEL命令时,如果发现CallID,FROM,TO和Cseq一致时,便取消本次会话。 • 典型应用:Proxy 取的用户的几个联系地址,同时发起邀请,但其中有些有返回时,对其他还没有返回的地址,可以发送CANCEL。

  43. OPTIONS(能力查询) • 用途 在发送会话请求之前查询UserAgent Server的能力集 • 响应消息复制OTIONS命令的CALLID,FROM,TO值 • 返回的能力可以在下面的头域中取得: • Allow:支持的消息(INIVTE,ACK等) • Accept-Language:支持的语言 • SDP:支持能力

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

  45. SIP响应消息的格式

  46. 状态码定义 • 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

  47. 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(可选的服务)

  48. 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(本地忙)

  49. 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(不接受)

More Related