📅  最后修改于: 2020-10-29 03:48:26             🧑  作者: Mango
SIP消息有两种类型-请求和响应。
请求的开头行包含定义请求的方法和定义请求发送位置的Request-URI。
同样,响应的开始行包含响应代码。
SIP请求是用于建立通信的代码。为了补充它们,有一些SIP响应通常指示请求是成功还是失败。
这些被称为“方法”的SIP请求使SIP消息可行。
方法可以视为SIP请求,因为它们请求其他用户代理或服务器采取的特定操作。
方法分为两种类型-
核心方法
扩展方法
有以下六种核心方法。
INVITE用于发起与用户代理的会话。换句话说,INVITE方法用于在用户代理之间建立媒体会话。
INVITE可以在消息正文中包含呼叫者的媒体信息。
如果INVITE已收到成功响应(2xx)或已发送ACK,则认为会话已建立。
成功的INVITE请求将在两个用户代理之间建立一个对话,该对话将一直持续到发送BYE终止会话为止。
在已建立的对话框中发送的INVITE称为re-INVITE 。
Re-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;tag = 1234567
To: Bob
Call-ID: 12345601@192.168.2.1
CSeq: 1 INVITE
Contact:
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是用于终止已建立会话的方法。这是一个SIP请求,可以由呼叫者或被呼叫者发送以结束会话。
它不能由代理服务器发送。
BYE请求通常绕过代理服务器端到端路由。
无法将BYE发送到待处理的INVITE或未建立的会话。
REGISTER请求执行用户代理的注册。该请求由用户代理发送到注册服务器。
REGISTER请求可以转发或代理,直到到达指定域的权威注册机构为止。
它在正在注册的用户的To标头中携带AOR(记录地址)。
REGISTER请求包含时间段(3600秒)。
一个用户代理可以代表另一个用户代理发送REGISTER请求。这就是所谓的第三方注册。在这里, From标记包含代表To头中标识的参与方提交注册的参与方的URI。
CANCEL用于终止未建立的会话。用户代理使用此请求来取消较早启动的未决呼叫尝试。
它可以由用户代理或代理服务器发送。
CANCEL是逐跳请求,即,它经过用户代理之间的元素并接收由下一个有状态元素生成的响应。
ACK用于确认对INVITE方法的最终响应。 ACK总是朝INVITE的方向前进。如果INVITE中不可用,则ACK可能包含SDP主体(媒体特征)。
ACK不能用于修改在初始INVITE中已经发送的媒体描述。
接收到ACK的有状态代理必须确定是否应将ACK下游转发给另一个代理或用户代理。
对于2xx响应,ACK是端对端的,但是对于所有其他最终响应,当涉及到有状态代理时,它将逐跳运行。
OPTIONS方法用于查询用户代理或代理服务器的功能,并发现其当前可用性。对请求的响应列出了用户代理或服务器的功能。代理永远不会生成OPTIONS请求。
用户代理使用SUBSCRIBE来建立订阅,以获取有关特定事件的通知。
它包含一个Expires标头字段,指示订阅的持续时间。
时间段过后,订阅将自动终止。
订阅将在用户代理之间建立一个对话框。
您可以通过在过期时间之前在对话框中发送另一个SUBSCRIBE来再次重新订阅。
从用户那里收到200 OK的订阅。
用户可以通过发送另一个Expires值为0(零)的SUBSCRIBE方法来取消订阅。
用户代理使用NOTIFY来获取特定事件的发生。通常,当订阅者和通知者之间存在订阅时,将在对话框中触发NOTIFY。
如果通知程序收到每个NOTIFY通知,则将获得200 OK响应。
NOTIFY包含一个指示事件的事件头字段和一个指示订阅的当前状态的subscriptionstate头字段。
通知始终在订阅的开始和结束时发送。
用户代理使用PUBLISH将事件状态信息发送到服务器。
当事件信息有多个来源时,发布最有用。
PUBLISH请求类似于NOTIFY,不同之处在于它不是在对话框中发送的。
PUBLISH请求必须包含Expires标头字段和Min-Expires标头字段。
用户代理使用REFER引用另一个用户代理来访问对话框的URI。
REFER必须包含Refer-To标头。这是REFER的必需标头。
可以在对话框内部或外部发送参考。
“ 202已接受”将触发REFER请求,该请求指示其他用户代理已接受参考。
用户代理使用INFO向与之建立媒体会话的另一个用户代理发送呼叫信令信息。
这是一个端到端的请求。
代理将始终转发INFO请求。
如果未建立会话,则使用UPDATE修改会话的状态。用户可以使用UPDATE更改编解码器。
如果建立了会话,则使用重新邀请来更改/更新会话。
PRACK用于确认已收到临时响应(1XX)的可靠传输。
通常,PRACK由客户端收到包含RSeq可靠序列号和support:100rel标头的临时响应时生成。
PRACK在机架标题中包含(RSeq+ CSeq)值。
PRACK方法适用于除100 Trying响应之外的所有临时响应,后者永远不会可靠地传输。
PRACK可能包含消息正文;它可以用于报价/答案交换。
它用于使用SIP发送即时消息。 IM通常由参与文本对话的参与者实时交换的短消息组成。
MESSAGE可以在对话框内或对话框外发送。
MESSAGE的内容作为MIME附件包含在消息主体中。
通常会收到200 OK响应,以指示该消息已在其目的地传递。