当前位置:首页 > 洗衣机 > 文章正文

「技能篇」SIP 协议详解

编辑:[db:作者] 时间:2024-08-25 03:07:17

主叫方A呼叫被叫方B:

步骤1:主叫方A发送INVITE要求到代理做事器;步骤2:代理做事器发送100 Trying 相应主叫方A;步骤3~6:代理做事器搜索被叫方B的地址,获取地址后转发INVITE要求;步骤7~9:被叫方B天生的180 振铃相应,返回给主叫方A;步骤10~12:被叫方B天生的200 OK相应,返回给主叫方A;步骤13~17:主叫方A收到被叫方B200 OK相应后,向被叫方B发送一个ACK,会话建立;步骤18~20:会话结束后,任何参与者(A或B)都可以发送一个BYE要求来终止会话;步骤21~23:主叫方A发送200 OK相应来确认BYE,会话终止。

注:以上的全体流程称之为一个Dialog

「技能篇」SIP 协议详解

2.2、Pager Model

在Sip中,对付体不大于1300字节时,一样平常采取Pager Model。
Sip通信中采取MESSAGE方法,MESSAGE方法本身并不建立Dialog,在多数运用中,每条IM都是独立的,颇似分页。

2.2.1 MESSAGE方法的由来

RFC3428对Sip协议进行了扩展,在Sip协议中增加了MESSAGE要求方法。
采取Pager Model进行通信,通报不超过1300字节的数据。
MESSAGE方法详细可参考 “SIP-RFC3428” https://tools.ietf.org/html/rfc3428。

2.2.2 MESSAGE方法体

当User1想给User2发送IM时,只需布局一个MESSAGE,发出去即可。
对付其体body可以是任何MIME格式。
但必须支持plain/text格式,可以选择支持message/cpim、message/sdp格式,可能用message/cpim会好一点,由于已有的IM系统标准是message/cpim格式。

注:想理解CPIM格式的同学可参考:CPIM 格式:https://xiaxl.blog.csdn.net/article/details/104718006注:想理解SDP格式的同学可参考:SDP 格式:https://xiaxl.blog.csdn.net/article/details/104723834

2.2.3 Pager Model要求流程如下

以User1向User2发送MESSAGE为例:

步骤1:User1发送MESSAGE要求到代理做事器;步骤2:代理做事器转发User1的MESSAGE要求给USER2;步骤3:User2收到User1的后,回答200 OK给代理做事器;步骤7~9:代理做事器转发200 OK回答给User1三、SIP体格式

SIP体构造与Http协议构造相似,均由三部分组成:

要求行(request-line) or 状态行(status-line)头(header)正文(body)3.1、要求行

要求行格式:Method Request-URI SIP-Version CRLF要求行举例:INVITE sip:bob@zte.com SIP/2.0 /r/n

Method以下列出了几种Method方法:

Method

方法解释

REGISTER

注册联系信息

INVITE

发起会话要求

ACK

INVITE 要求的相应的确认

CANCEL

取消要求

BYE

闭幕会话

OPTIONS

查询做事器能力

MESSAGE

RFC3428对Sip协议的扩展,增加了MESSAGE方法。
采取Pager Model进行通信,通报不超过1300字节的数据。
MESSAGE方法详细可参考 “SIP-RFC3428” https://tools.ietf.org/html/rfc3428

Request-URI指示要求的用户或者做事的地址信息

SIP-Version要乞降相应都须要包含SIP版本信息

3.2、状态行

状态行格式: SIP-Version Status-Code Reason-Phrase CRLF状态行举例:SIP/2.0 200 OK /r/n

Status-Code状态码:状态代码由3位数字组成,表示要求是否被理解或被知足。
状态代码的第一个数字定义了相应的种别,后面两位没有详细的分类。

第一个数字有五种可能的取值:

状态码

含义

1xx:

临时相应、表示要求正在被处理

2xx

成功相应、表示要求已被成功吸收完备理解并吸收

3xx

重定向相应、表示需采纳进一步完成要求

4xx

客户机缺点、表示要求中包含语法缺点信息或做事器无法完成客户机的要求

5xx

做事器缺点、表示做事器无法合法完成要求

6xx

全局故障 、表示任何做事器都无法完成该要求

常用的状态码举例:

状态码

msg

含义

100

Trying

试呼叫

180

Ringing

振铃

181

Call is Being Forwarded

呼叫正在前转

200

OK

成功相应

302

Moved Temporarily

临时迁移

400

Bad Request

缺点要求

401

Unauthorized

未授权

403

Forbidden

禁止

404

Not Found

用户不存在

408

Request Timeout

要求超时

480

Temporarily Unavailable

暂时无人接听

486

Busy Here

线路忙

504

Server Time-out

做事器超时

600

Busy Everywhere

全忙

3.3、头

发送MESSAGE给user2

MESSAGE sip:user2@domain.com SIP/2.0Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkseMax-Forwards: 70From: sip:user1@domain.com;tag=49583To: sip:user2@domain.comCall-ID: asd88asd77a@1.2.3.4CSeq: 1 MESSAGEContent-Type: text/plainContent-Length: 18user2, come here.

Header 字段含义解释:

Header

含义解释

举例

Call-ID

由本地设备(Client)天生,全局唯一,每次呼叫这个值唯一不变

Call-ID: asd88asd77a@1.2.3.4

From

表示要求的发起者

From: sip:user1@domain.com;tag=49583

To

表示要求的接管者

To: sip:user2@domain.com

Via

Via头域是被做事器插入request中,用来检讨路由环的,并且可以使response根据via找到返回的路

Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse

Max-Forwards

用于表示这个包最多可以传送多少跳,每经由一跳都会减一档Max-Forwards==0系统会返回483。
默认为70

Max-Forwards: 70

Contact

包含源的URI信息,用来给相应方直接和源建立连接用

Contact: sip:192.168.100.1:1111

Content-Type

指明体的类型 (SDP会话描述协议)

Content-Type: text/plain;Content-Type: application/sdp; Content-Type: application/cpim;

Content-Length

指明体的字节大小

Content-Length: 18

四、SIP举例

这里举两个例子:

MESSAGE(Pager Mode)REGISTER4.1、MESSAGE(Pager Model)

以User1发送MESSAGE给user2为例:

步骤1:User1发送MESSAGE要求到代理做事器

MESSAGE sip:user2@domain.com SIP/2.0Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkseMax-Forwards: 70From: sip:user1@domain.com;tag=49583To: sip:user2@domain.comCall-ID: asd88asd77a@1.2.3.4CSeq: 1 MESSAGEContent-Type: text/plainContent-Length: 18user2, come here.步骤2:代理做事器转发User1的MESSAGE要求给USER2

代理做事器收到步骤1要求,到数据库中查找User2(注册过程中天生数据库),随后天生步骤2的数据。

MESSAGE sip:user2@domain.com SIP/2.0Via: SIP/2.0/TCP proxy.domain.com;branch=z9hG4bK123dsghdsVia: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse; received=1.2.3.4Max-Forwards: 69From: sip:user1@domain.com;tag=49394To: sip:user2@domain.comCall-ID: asd88asd77a@1.2.3.4CSeq: 1 MESSAGEContent-Type: text/plainContent-Length: 18user2, come here.步骤3:User2收到User1的后,回答200 OK给代理做事器

直接回应(200-OK) 没有Body,也不携带Contact头域

SIP/2.0 200 OKVia: SIP/2.0/TCP proxy.domain.com;branch=z9hG4bK123dsghds; received=192.0.2.1Via: SIP/2.0/TCP user1pc.domain.com;;branch=z9hG4bK776sgdkse; received=1.2.3.4From: sip:user1@domain.com;tag=49394To: sip:user2@domain.com;tag=ab8asdasd9Call-ID: asd88asd77a@1.2.3.4CSeq: 1 MESSAGEContent-Length: 0步骤4:代理做事器转发200 OK回答给User1

代理做事器收到回答后,去掉最顶真个Via,转发如下给User1

SIP/2.0 200 OKVia: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse; received=1.2.3.4From: sip:user1@domain.com;;tag=49394To: sip:user2@domain.com;tag=ab8asdasd9Call-ID: asd88asd77a@1.2.3.4CSeq: 1 MESSAGEContent-Length: 04.2、REGISTER

首先举例一个非鉴权注册。

4.2.1 非鉴权注册

192.168.2.161机器发送注册给192.168.2.89做事器:

REGISTER sip:192.168.2.89 SIP/2.0Via: SIP/2.0/UDP 192.168.2.161:10586Max-Forwards: 70From: <sip:01062237496@192.168.2.89>;tag=ca04c1391af3429491f2c4dfbe5e1b2e;epid=4f2e395931To: <sip:01062237496@192.168.2.89>Call-ID: da56b0fab5c54398b16c0d9f9c0ffcf2@192.168.2.161CSeq: 1 REGISTERContact: <sip:192.168.2.161:10586>;methods="INVITE, MESSAGE, INFO, SUBSCRIBE, OPTIONS, BYE, CANCEL, NOTIFY, ACK, REFER"User-Agent: RTC/1.2.4949 (BOL SIP Phone 1005)Event: registrationAllow-Events: presenceContent-Length: 0

当注册成功(回送200 OK)时,做事器发送的res参考如下:

SIP/2.0 200 OKVia: SIP/2.0/UDP 192.168.2.161:10586From: <sip:01062237496@192.168.2.89>;tag=ca04c1391af3429491f2c4dfbe5e1b2e;epid=4f2e395931To: <sip:01062237496@192.168.2.89>;tag=-00834-14d0805b62bc026dCall-ID: da56b0fab5c54398b16c0d9f9c0ffcf2@192.168.2.161CSeq: 1 REGISTERAllow: INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,INFO,UPDATE,PRACK,REFER,SUBSCRIBE,NOTIFY,MESSAGEContact: sip:192.168.2.161:10586Content-Length: 0Expires: 36004.2.2 鉴权注册

当须要鉴权注册时

要求端192.168.2.161发送注册给192.168.2.89做事器做事器对192.168.2.161发送“401 Unauthorized”信息给要求端,提示要求端须要带上鉴权信息重新注册要求端带上鉴权信息后(带有“Authorization”头字段)重新向做事器注册做事器验证鉴权头的精确性,如果鉴权成功,给要求端发送200 OK。
若失落败,连续发送401。

要求端192.168.2.161发送注册给192.168.2.89做事器

REGISTER sip:192.168.2.89 SIP/2.0Via: SIP/2.0/UDP 192.168.2.161:8021Max-Forwards: 70From: <sip:01062237493@192.168.2.89>;tag=efca469543ce4788a6a6a2c7b66cd01f;epid=de4504430dTo: <sip:01062237493@192.168.2.89>Call-ID: c88a247a74b54a8c9e676bdde3bba6c9@192.168.2.161CSeq: 1 REGISTERContact: <sip:192.168.2.161:8021>;methods="INVITE, MESSAGE, INFO, SUBSCRIBE, OPTIONS, BYE, CANCEL, NOTIFY, ACK, REFER"User-Agent: RTC/1.2.4949 (BOL SIP Phone 1005)Event: registrationAllow-Events: presenceContent-Length: 0

做事器对192.168.2.161发送401 Unauthorized信息给要求端,提示要求端须要带上鉴权信息重新注册:

SIP/2.0 401 UnauthorizedVia: SIP/2.0/UDP 192.168.2.161:8021From: <sip:01062237493@192.168.2.89>;tag=efca469543ce4788a6a6a2c7b66cd01f;epid=de4504430dTo: <sip:01062237493@192.168.2.89>;tag=-001893-38ba013ba3dde36eCall-ID: c88a247a74b54a8c9e676bdde3bba6c9@192.168.2.161CSeq: 1 REGISTERAllow: INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,INFO,UPDATE,PRACK,REFER,SUBSCRIBE,NOTIFY,MESSAGEContact: <sip:192.168.2.89:14010>Content-Length: 0WWW-Authenticate: Digest realm="192.168.2.89", qop="auth", nonce="e17d377c3d2d9c343e26576a7fd04738481dfc10", opaque="", stale=FALSE, algorithm=MD5

要求端192.168.2.161通过Authorization头字段带上鉴权头信息,发送一个新的REGISTER:

REGISTER sip:192.168.2.89 SIP/2.0Via: SIP/2.0/UDP 192.168.2.161:8021Max-Forwards: 70From: <sip:01062237493@192.168.2.89>;tag=efca469543ce4788a6a6a2c7b66cd01f;epid=de4504430dTo: <sip:01062237493@192.168.2.89>Call-ID: c88a247a74b54a8c9e676bdde3bba6c9@192.168.2.161CSeq: 2 REGISTERContact: <sip:192.168.2.161:8021>;methods="INVITE, MESSAGE, INFO, SUBSCRIBE, OPTIONS, BYE, CANCEL, NOTIFY, ACK, REFER"User-Agent: RTC/1.2.4949 (BOL SIP Phone 1005)Authorization: Digest username="01062237493", realm="192.168.2.89", qop=auth, algorithm=MD5, uri="sip:192.168.2.89", nonce="e17d377c3d2d9c343e26576a7fd04738481dfc10", nc=00000001, cnonce="12660455546344082314666316435946", response="f57e47ce03162293b9ced07362ce2b79"Event: registrationAllow-Events: presenceContent-Length: 0

做事器验证鉴权头的精确性,如果鉴权成功,给要求端发送200 OK。
若失落败,连续发送401

SIP/2.0 200 OKVia: SIP/2.0/UDP 192.168.2.161:8021From: <sip:01062237493@192.168.2.89>;tag=efca469543ce4788a6a6a2c7b66cd01f;epid=de4504430dTo: <sip:01062237493@192.168.2.89>;tag=-001894-a5eb977c8969aa51Call-ID: c88a247a74b54a8c9e676bdde3bba6c9@192.168.2.161CSeq: 2 REGISTERAllow: INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,INFO,UPDATE,PRACK,REFER,SUBSCRIBE,NOTIFY,MESSAGEContact: sip:192.168.2.161:8021Content-Length: 0Expires: 3600(xiaxveliang)

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除,如需转载请保留原文地址:http://www.baanla.com/xyj/92601.html

XML地图 | 自定链接

Copyright 2005-20203 www.baidu.com 版权所有 | 琼ICP备2023011765号-4 | 统计代码

声明:本站所有内容均只可用于学习参考,信息与图片素材来源于互联网,如内容侵权与违规,请与本站联系,将在三个工作日内处理,联系邮箱:123456789@qq.com