SIP 消息
SIP消息有两种类型 - 请求和响应。
请求的开始行包含定义请求的方法,以及定义请求发送位置的Request-URI。
类似地,响应的开始行包含响应代码。
请求方法
SIP请求是用于建立通信的代码。为了补充它们,存在 SIP响应,其通常指示请求是成功还是失败。
这些称为方法的SIP请求使得SIP消息可行。
方法可以被认为是SIP请求,因为它们请求由另一个用户代理或服务器采取的特定动作。
方法分为两种类型 -
核心方法
扩展方法
核心方法
下面讨论六种核心方法。
INVITE
INVITE用于发起与用户代理的会话。换句话说,INVITE方法用于在用户代理之间建立媒体会话。
INVITE可以在消息正文中包含呼叫者的媒体信息。
如果INVITE已经接收到成功响应(2xx)或者已经发送了ACK,则认为会话被建立。
成功的INVITE请求在两个用户代理之间建立对话,其继续,直到发送BYE以终止会话。
在已建立的对话中发送的INVITE被称为 re-INVITE 。
Re-INVITE用于更改会话特征或刷新对话框的状态。
INVITE示例
以下代码显示如何使用INVITE。
INVITE sips:Bob@TMC.com SIP/2.0 Via: SIP/2.0/TLS client.ANC.com:5061;branch = z9hG4bK74bf9 Max-Forwards: 70 From: Alice<sips:Alice@TTP.com>;tag = 1234567 To: Bob<sips:Bob@TMC.com> Call-ID: 12345601@192.168.2.1 CSeq: 1 INVITE Contact: <sips:Alice@client.ANC.com> Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY Supported: replaces Content-Type: application/sdp Content-Length: ... v = 0 o = Alice 2890844526 2890844526 IN IP4 client.ANC.com s = Session SDP c = IN IP4 client.ANC.com t = 3034423619 0 m = audio 49170 RTP/AVP 0 a = rtpmap:0 PCMU/8000
BYE
BYE是用于终止已建立的会话的方法。 这是一个SIP请求,可以由主叫方或被叫方发送以结束会话。
它不能由代理服务器发送。
BYE请求通常绕过代理服务器端到端路由。
BYE不能发送到挂起的INVITE或未建立的会话。
REGISTER
REGISTER请求执行用户代理的注册。此请求由用户代理发送到注册服务器。
REGISTER请求可以被转发或代理,直到它到达指定域的权威注册器。
它在正在注册的用户的 To 头中携带AOR(记录地址)。
REGISTER请求包含时间段(3600秒)。
一个用户代理可以代表另一个用户代理发送REGISTER请求。 这称为第三方注册。 这里, From 标签包含代表 To 标头中标识的一方提交注册的一方的URI。
CANCEL
CANCEL用于终止未建立的会话。用户代理使用此请求取消之前发起的待处理呼叫尝试。
它可以由用户代理或代理服务器发送。
CANCEL是逐跳请求,即,它通过用户代理之间的元素并接收由下一个有状态元素产生的响应。
ACK
ACK用于确认对INVITE方法的最终响应。ACK总是向着INVITE的方向。如果在INVITE中不可用,ACK可以包含SDP主体(媒体特性)。
ACK可以不被用于修改已经在初始INVITE中发送的媒体描述。
接收ACK的状态代理必须确定ACK是否应当向下游转发到另一个代理或用户代理。
对于2xx响应,ACK是端到端的,但是对于所有其他最终响应,当涉及状态代理时,其工作在逐跳基础上。
OPTIONS
OPTIONS方法用于向用户代理或代理服务器查询其功能,并发现其当前可用性。 对请求的响应列出了用户代理或服务器的功能。 代理永远不会生成OPTIONS请求。
扩展方法
Subscribe
用户代理使用SUBSCRIBE来建立订阅,以获得关于特定事件的通知。
它包含一个 Expires 头字段,用于指示订阅的持续时间。
在该时间段过去之后,订阅将自动终止。
订阅在用户代理之间建立对话。
您可以在到期时间之前在对话框中发送另一个SUBSCRIBE再次重新订阅。
将收到来自用户的订阅的200 OK。
用户可以通过发送另一个SUBSCRIBE方法取消订阅,Expires值为0(零)。
NOTIFY
NOTIFY用于由用户代理获取特定事件的发生。通常,当订阅者和通知者之间存在订阅时,NOTIFY将在对话框中触发。
每个NOTIFY将得到200 OK响应,如果它被通知器接收。
NOTIFY包含指示事件的 Event 头字段和指示订阅当前状态的 subscriptionstate 头字段。
NOTIFY总是在订阅的开始和终止时发送。
PUBLISH
PUBLISH由用户代理用于向服务器发送事件状态信息。
当有多个事件信息来源时,PUBLISH是最有用的。
PUBLISH请求类似于NOTIFY,除了它不是在对话框中发送。
PUBLISH请求必须包含 Expires 头字段和 Min-Expires 头字段。
REFER
REFER由用户代理使用来引用另一个用户代理来访问对话框的URI。
REFER必须包含 Refer-To 标题。 这是REFER的必需标题。
REFER可以在对话框内部或外部发送。
A 202已接受将触发REFER请求,其指示其他用户代理已接受引用。
INFO
INFO由用户代理用来向与其建立媒体会话的另一用户代理发送呼叫信令信息。
这是一个端到端的请求。
代理将始终转发INFO请求。
UPDATE
如果会话未建立,UPDATE用于修改会话的状态。 用户可以使用UPDATE更改编解码器。
如果建立了会话,则使用重新邀请来改变/更新会话。
PRACK
PRACK用于确认接收到临时响应(1XX)的可靠传输。
通常,当客户端接收到包含 RSeq 可靠序列号和支持的:100rel 头部的临时响应时,PRACK就会生成。
PRACK在 rack 标题中包含(RSeq&amp; plus; CSeq)值。
PRACK方法适用于所有临时响应,除了100 Trying响应,其从未可靠地传送。
PRACK可以包含消息体; 它可以用于提供/应答交换。
MESSAGE
它用于使用SIP发送即时消息。IM通常包括从事文本会话的参与者实时交换的短消息。
MESSAGE可以在对话框内或对话框外发送。
MESSAGE的内容作为 MIME 附件在邮件正文中传送。
通常接收到 200 OK 响应以指示消息已在其目的地传送。