SIP INVITE流程

 我们知道在SIP协议的流程中,SIP会话过程是非常重要的。那么对于请求和回复的内容,我们来详细了解一下这些方面的内容吧。那么通过SIP INVITE而发出的一些字段含义我们来着重讲解一下吧。

  SIP INVITE

  主叫方Tesla首先发起INVITE 消息到被叫方Marconi。INVITE 消息包含会话类型和一些呼叫所必须的参数。会话类型可能是单纯的语音,也可能是网络会议所用的多媒体视频,还可能是游戏会话。下面是消息体范例,我们来详细分析各个字段的意义。

  INVITE sip:[email protected] 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

  From: Nikola Tesla ;tag=76341

  <=表示请求消息的发送方和目标方

  <=如果里面有用户名标签,地址要求用尖括号包起来

  <=对于 INVITE 消息,可以在 From 字段中包含 tag,它也是个随机码

  Call-ID: [email protected]

  <=呼叫ID是由本地设备生成的,全局唯一值。每次呼叫该值唯一不变

  <=对于用户代理发送INVITE消息,本地将生成From tag和Call-ID全局唯一码,被叫方代理则生成To tag全局唯一码。这三个随机码做为整个对话中对话标识(dialog indentifier)在通话双方使用。

  CSeq: 1 SIP INVITE

  <=CSeq,又叫命令队列(Command Seqence),每发送一个新的请求,该数自动加1

  * 以上几个字段是所有 SIP 消息体所必须的,其它头字段有些是可选的,有些在特定请求也是必须

  Subject: About That Power Outage...

  Contact:

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

  Content-Type: application/sdp

  Content-Length: 158

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

  v=0    <=SDP版本号,目前都是 0

  o=Tesla 2890844526 2890844526 IN IP4 lab.high-voltage.org    <=主叫源地址,类型等

  s=Phone Call    <=主题

  c=IN IP4 100.101.102.103    <=连接

  t=0 0    <= 时间戳

  m=audio 49170 RTP/AVP 0   <=媒体

  a=rtpmap:0 PCMU/8000    <=媒体属性

  <=从上面 SDP 消息体我们可以得出下面信息

  <=连接 IP 地址:100.101.102.103

  <=媒体格式:audio

  <=端口号:49170

  <=媒体传输类型:RTP

  <=媒体编码:PCM u Law

  <=采样率:8000 Hz

  180 Ringing

当被叫方接收到SIP INVITE请求消息后,将回复 180 Ringing。顾名思义,就是发回铃音,提示主叫方电话已连接上了,正等待被叫应答。被叫方接收到 INVITE 消息后也会发生响铃或者其它有呼入提示,这由被叫方设定(我们可以把它想象成我们自己设定手机铃声)。对于 180 响应又被称为“消息及时响应”,它是一种用来测试被叫状态的一种响应。因此它所包含的信息不多,具体 180 响应消息如下:

  SIP/2.0 180 Ringing

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

  ;received=100.101.102.103    <=这里增加一个 received 参数,标识接收方 IP 地址

  To: G. Marconi ;tag=a53e42   <=上已提到,To tag 做为被叫方标识

  From: Nikola Tesla ;tag=76341  <=要求很发送方 From tag 一致

  Call-ID: [email protected]

  CSeq: 1 INVITE

  Contact:

  Content-Length: 0

  <=对于 180 Ringing 响应,基本上就是将 INVITE 的 Via、To、From、Call-ID 和 CSeq 内容复制过来,对于首行标出 SIP 版本号,响应代码(180)和动作原因(reason phrase)

  <=注意这里 From 和 To 地址,因为它们用来指定呼叫方向,因此这里的 200 OK 响应并没有将地址对调,仍然保持原样。一点不同的是 To 头字段添加了由被叫方 Marconi 生成的 tag 标识

  200 Ok

  SIP INVITE被叫响铃后,如果被叫用户 Marconi 接起电话,则发出 200 OK 响应。这个响应除了做为接通指示之外,还有一个功能是用来指定被叫允许的连接媒体格式,让主叫方确认是否可以接收该媒体。

  消息体如下

  SIP/2.0 200 OK

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

  ;received=100.101.102.103

  To: G. Marconi ;tag=a53e42

  From: Nikola Tesla ;tag=76341

  Call-ID: [email protected]

  CSeq: 1 INVITE

  Contact:

  Content-Type: application/sdp

  Content-Length: 155

  <=头字段部分基本同上

  v=0

  o=Marconi 2890844528 2890844528 IN IP4 tower.radio.org

  s=Phone Call

  c=IN IP4 200.201.202.203

  t=0 0

  m=audio 60000 RTP/AVP 0

  a=rtpmap:0 PCMU/8000

  <=从上面 SDP 消息体我们可以得出下面信息

  <=终端 IP 地址:200.201.202.203

  <=媒体格式:audio

  <=端口号:60000

  <=媒体传输类型:RTP

  <=媒体编码:PCM u Law

  <=采样率:8000 Hz

  ACK

  SIP INVITE通话前最后一步是主叫方确认 200 OK响应。该项确认证明连接被允许,即将使用另一种协议开始媒体连接。这另一种协议是上面在 SDP 消息段中所协商好的 RTP 格式。该 ACK 响应内容如下:

  ACK sip:[email protected] SIP/2.0

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

  Max-Forwards: 70

  To: G. Marconi ;tag=a53e42

  From: Nikola Tesla ;tag=76341

  Call-ID: [email protected]

  CSeq: 1 ACK

  Content-Length: 0


你可能感兴趣的:(音视频.传输.SIP)