SIP协议参数详情

摘要:
只有在选择了用于到达下一跳的传输协议时,才能将Via报头字段值添加到请求消息中。请求消息类型填充在CSeq消息头中。当SIP端点发送请求时,数量会相应增加。SIP协议版本为SIP/2.0。第一行由SIP版本号和200响应消息组成。SIPURI是附加到IP地址的电话URI,表示

SIP消息结构

请求消息和响应消息都包括SIP消息头字段和SIP消息体字段;

SIP消息头主要用来指明本消息是有由谁发起和由谁接受,经过多少跳转等基本信息;

SIP消息体主要用来描述本次会话具体实现方式;

请求消息格式

SIP请求消息的格式,由SIP消息头和一组参数行组成

消息体定义:
  Call-ID:头字段是用来将消息分组的唯一性标识
  From:头字段是指示请求发起方的逻辑标识,它可能是用户的注册地址。From头字段包含一个URI和一个可选的显示名称
  CSeq:头字段用于标识事务并对事务进行排序。它由一个请求方法和一个序列号组成,请求方法必须与对应的请求消息类型一致
  Max-Fowords:头字段限定一个请求消息在到达目的地之前允许经过的最大跳数。它包含一个整数值,每经过一跳,这个值就被减一。如果在请求消息到达目的地之前该值变为零,那么请求将被拒绝并返回一个483(跳数过多)错误响应消息。
  Via:头字段定义SIP事务的下层(传输层)传输协议,并标识响应消息将要被发送的位置。只有当到达下一跳所用的传输协议被选定后,才能在请求消息中加入Via头字段值。
  expires:参数指出了该值中包含的URI地址的有效期。这个参数的值是以秒为单位计算的。如果没有提供该参数,那么URI地址的有效期由Expires头字段值来确定。

SIP请求消息实例:

INVITE sip:0109@127.0.0.1:5060;User=phone SIP/2.0
Call-ID:01E04633512400000@127.0.0.1
Via:SIP/2.0/UDP 127.0.0.1:5061
From:<sip:010203@127.0.0.1:5061;User=phone>;tag=29005358336B534F610A000
To:<sip:0109@127.0.0.1:5060;User=phone>
Contact: sip:010203@127.0.0.1:5061
CSeq:1 INVITE
Max-Forwards:70
Content-Type: application/SDP
Content-Length:168

v=0
o=UserA 2890844526 2890844526 IN IP4 here.com
s=Session SDP
c=IN IP4 192.0.0.1
t=0 0
m=audio 49172 RTP/AVP 0 8
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=sendonly

INVITE消息是其中一种SIP请求消息。
第一行由消息头和对端SIP实体的URI(通用资源标识)以及SIP版本号码组成。
SIP URI是电话URI,附在IP地址上,表示对端和端点收发SIP消息的端口的域。
“From”、“To”和“Contact”这三个SIP消息头属于电话URI。
当背靠背用户代理发出呼叫时,“From”消息头中的URI填写在“Via”消息头里。
请求消息类型填写在CSeq消息头里,并且当该SIP端点发送一个请求,号码就相应递增。
SIP协议版本为SIP/2.0。其中SDP被加入到INVITE消息内容里,在消息头里的Content-Length说明了SDP内容的长度。

INVITE请求消息详解:

INVITE sip:marconi@radio.org SIP/2.0

   请求方法、请求地址(Request-URI)、SIP版本号(目前都是SIP/2.0)
  请求地址一般就是被叫方地址,跟MSN中好友eMail地址类似

Via: SIP/2.0/UDP lab.high-voltage.org:5060;branch=z9hG4bKfw19b

  SIP版本号(2.0)、传输类型(UDP)、呼叫地址、
  branch是一随机码,它被看作传输标识
  Via字段中地址是消息发送方或代理转发方设备地址,一般由主机地址和端口号组成
  传输类型可以为UDP、TCP、TLS、SCTP

Max-Forwards: 70

  最大跳跃数,就是经过SIP服务器的跳跃次数,主要是防止循环跳跃
  每经过代理服务器,该整数减一

To: G. Marconi <sip:Marconi@radio.org>
From: Nikola Tesla <sip:n.tesla@high-voltage.org>;tag=76341

  表示请求消息的发送方和目标方
  如果里面有用户名标签,地址要求用尖括号包起来
  对于INVITE消息,可以在From字段中包含tag,它也是个随机码

Call-ID:123456789@lab.high-voltage.org

  呼叫ID是由本地设备生成的,全局唯一值。每次呼叫该值唯一不变
  对于用户代理发送INVITE消息,本地将生成From tag和Call-ID全局唯一码,被叫方代理则生成To tag全局唯一码。这三个随机码做为整个对话中对话标识(dialog indentifier)在通话双方使用。

CSeq: 1 INVITE

  CSeq,又叫命令队列(Command Seqence),每发送一个新的请求,该数自动加1
  * 以上几个字段是所有SIP消息体所必须的,其它头字段有些是可选的,有些在特定请求也是必须

Subject: About That Power Outage...
Contact: <sip:n.tesla@lab.high-voltage.org>

  Contact是INVITE消息所必须的,它用来路由到被叫设备地址,也称为用户代理(UA)

Content-Type: application/sdp
Content-Length: 158

  最后两位附属字段说明消息体类型以及字段长度

v=0   

  SDP版本号,目前都是0

o=Tesla 28908445262890844526 INIP4 lab.high-voltage.org   

  主叫源地址,类型等
s=Phone Call

响应消息结构

SIP响应消息实例:

SIP/2.0 200 OK
Content-Type:application/SDP
Via:SIP/2.0/UDP 127.0.0.1:5061
Call-ID:01EF351F8140000000000@127.0.0.1
CSeq:1 INVITE
From:<sip:010203@127.0.0.1:5061;User=phone>;tag=29005358336B534F610A000
To:<sip:0109@127.0.0.1:5060;User=phone>;tag=5358336B534F2900CD1B0000
Contact:<sip:0109@127.0.0.1:55061>
Content-Length:156

v=0
o=HuaweiSoftX3000 1073741824 1073741824 IN IP4 127.0.0.1
s=Sip Call
c=IN IP4 110.111.112.113
t=0 0
m=audio 5060 RTP/AVP 0
a=rtpmap:0 PCMU/8000

200 OK消息是SIP响应消息的一种。
第一行由SIP版本号和200响应消息组成。
SIP URI是电话URI,附在IP地址上,表示对端和端点收发SIP消息的端口的域。
“From”、“To”和“Contact”这三个SIP消息头属于电话URI。
当背靠背用户代理发出呼叫时,“From”消息头中的URI填写在“Via”消息头里。
请求消息类型填写在CSeq消息头里,并且当该SIP端点发送一个请求,号码就相应递增。
SIP协议版本为SIP/2.0。把SDP加入到INVITE消息内容里,在消息头里说明内容的长度。

免责声明:文章转载自《SIP协议参数详情》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ETL工具之Kettle的简单使用一(不同数据库之间的数据抽取-转换-加载)if的用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

c# 如何捕捉控制台程序的关闭事件。(转)

最近要做个控制台程序,在用户关闭程序的时候要做些处理,但控制台程序却没有WinForm的Closing或Closed事件,想想只能用API才捕捉消息来实现了,代码如下: 1using System; 2using System.Windows.Forms; 3using System.Diagnostics; 4using System.Runtime....

nc的基本用法

       nc(netcat) 被誉为网络安全界的‘瑞士军刀’,可以用于完成几乎涉及TCP、UDP或者Unix域套接字的任何事。它可以打开TCP连接,发送UDP报文,在任意的TCP和UDP端口监听,进行端口扫描,支持ipv6。不象telnet,nc能够更好地支持脚本,能够将错误消息分离到标准错误,而不是标准输出。nc有四种典型应用: 一、C/S模型 用...

SIP 认证

理解SIP的认证 1. 认证和加密    认证(Authorization)的作用在于表明自己是谁,即向别人证明自己是谁。而相关的概念是MD5,用于认证安全。注意MD5仅仅是个hash函数而已,并不是用于加密。因为hash函数处理后的数据没法进行反向恢复,这样子的话别人没法盗取你认证身份的口令。    加密(Encryption)的作用在于对想传输的数据进...

Android Looper详解

在Android下面也有多线程的概念,在C/C++中,子线程可以是一个函数, 一般都是一个带有循环的函数,来处理某些数据,优先线程只是一个复杂的运算过程,所以可能不需要while循环,运算完成,函数结束,线程就销毁。对于那 些需要控制的线程,一般我们都是和互斥锁相互关联,从而来控制线程的进度,一般我们创建子线程,一种线程是很常见的,那就是带有消息循环的线程...

分布式任务队列--Celery的学习笔记

一、Celery简介   Celery是一个简单,灵活,可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需的工具。它是一个任务队列,专注于实时处理,同时还支持任务调度。   所谓任务队列,是一个逻辑上的概念,可以将抽象中的任务发送到指定的执行任务的组件,任务队列可以跨线程或机器运行。   Celery是基于Python开发的分布式异步消息任...

Zookeeper和Dubbo介绍

引言  RPC介绍 之 远程调用 Remote Procedure Call 远程过程调用,是分布式架构的核心,按响应方式分如下两种: 同步调用:客户端调用服务方方法,等待直到服务方返回结果或者超时,再继续自己的操作。 异步调用:客户端把消息发送给中间件,不再等待服务端返回,直接继续自己的操作。 需要注意的是RPC并不是一个具体的技术,而是指整个网络...