会话发起协议-SIP
什么是 SIP 协议?
定义: SIP会话发起协议是基于 IP 的电话应用程序的信令协议。信令协议为通信提供控制层,例如语音呼叫的建立和释放。
SIP架构
最简单的,SIP 架构由 SIP 用户代理和服务器组成。
用户代理是通信的端点。用户代理的示例有软件电话、IP 电话或移动电话。需要 SIP 服务器来定位其他用户代理。此外,SIP服务器还可以提供其他服务,例如计费和SIP转发。
SIP 协议基础知识
SIP 是一种应用层协议,与 HTTP 等基于文本的应用层协议非常相似。事实上,它也使用请求和响应消息事务和标头字段。下面显示了用户代理 A 向用户代理 B 发起的呼叫的请求和响应消息事务。
对于传输,SIP 可以在 TCP、UDP 或 SCTP 传输层协议上运行。以下是 SIP 请求消息示例。
INVITE sip:0097239287044@sip.cybercity.dk SIP/2.0
Via: SIP/2.0/UDP 192.168.1.2:5060;branch=z9hG4bKnp85213694-430aa1de192.168.1.2;rport
From: "arik" <sip:voi18062@sip.****.dk>;tag=51449dc
To: <sip:0097239287044@sip.****.dk>
Call-ID: 85216695-42dcdb1d@192.168.1.2
CSeq: 1 INVITE
User-Agent: Nero SIPPS IP Phone Version 2.0.51.16
Expires: 120
Accept: application/sdp
Content-Type: application/sdp
Content-Length: 270
Contact: <sip:voi18062@192.168.1.2>
Max-Forwards: 70
Allow: INVITE, ACK, CANCEL, BYE, REFER, OPTIONS, NOTIFY, INFO
为了进行比较,这里有一个 HTTP 请求消息
GET /download.html HTTP/1.1
Host: www.ethereal.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040113
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.ethereal.com/development.html
SIP 请求方法
SIP 借用了 HTTP 的 Method 字段来同样确定请求的类型。SIP 有 14 种方法请求类型。最常用的方法是语音呼叫期间使用的 INVITE、ACK、BYE 和 REGISTER。SIP 请求消息的第一行包括方法类型和请求 URI(请求的当前目的地)。
SIP请求方法表
SIP 请求标头
标头字段用于配置 SIP 请求消息。以下是请求消息的一些常见标头。还有更多可用的标头。
常见的SIP请求头
SIP 寻址和 SIP URI
To、From 和 Contact 标头字段中使用的 SIP URI 表示用户的 SIP 号码。它与电子邮件地址非常相似。它由三个部分组成<protocol:user@gateway>。该协议可以是 sip 或 sips,其中后者使用 TLS 进行保护。该用户是SIP网关或服务器上的唯一用户。
SIP 响应状态代码
再次与 HTTP 类似,SIP 响应提供状态代码来指示 SIP 请求的结果。下面列出了常见的 SIP 响应状态码。
常见 SIP 响应状态代码
SIP 消息正文内容和 SDP
SIP 与内容无关。尽管它以语音呼叫信令而闻名,但它也用于建立消息传递、视频会议、短信等会话。SIP 消息正文确定正在建立的媒体会话的类型。消息正文通常包含在 SIP 邀请请求中,作为初始会话建立的一部分。
会话描述协议 (SDP) 是一种用于 VoIP 的特殊内容类型。内容类型指定为 application/sdp。在以下 SIP Invite 消息中,SDP 指定 VoIP 呼叫可用的语音编解码器。
带有 SDP 消息正文的 SIP 邀请
INVITE sip:0097239287044@sip.cybercity.dk SIP/2.0
Via: SIP/2.0/UDP 192.168.1.2:5060;branch=z9hG4bKnp85213694-430aa1de192.168.1.2;rport
From: "arik" <sip:voi18062@sip.cybercity.dk>;tag=51449dc
To: <sip:0097239287044@sip.cybercity.dk>
Call-ID: 85216695-42dcdb1d@192.168.1.2
CSeq: 1 INVITE
User-Agent: Nero SIPPS IP Phone Version 2.0.51.16
Expires: 120
Accept: application/sdp
Content-Type: application/sdp
Content-Length: 270
Contact: <sip:voi18062@192.168.1.2>
Max-Forwards: 70
Allow: INVITE, ACK, CANCEL, BYE, REFER, OPTIONS, NOTIFY, INFO
v=0
o=SIPPS 85214742 85214739 IN IP4 192.168.1.2
s=SIP call
c=IN IP4 192.168.1.2
t=0 0
m=audio 30000 RTP/AVP 0 8 97 2 3
a=rtpmap:0 pcmu/8000
a=rtpmap:8 pcma/8000
a=rtpmap:97 iLBC/8000
a=rtpmap:2 G726-32/8000
a=rtpmap:3 GSM/8000
a=fmtp:97 mode=20
a=sendrecv
SIP VoIP 会话呼叫流程
现在我们已经掌握了基础知识,让我们将所有内容放在一起以建立 SIP 呼叫流程以建立 VoIP 呼叫。建立呼叫有四个基本部分:注册、呼叫建立、VoIP 呼叫和呼叫终止。
A:注册
当用户代理(例如软件电话)启动时,它需要向 SIP 服务器注册才能被其他用户代理找到。SIP 注册请求消息用于此目的。它通过“To”和“From”SIP URI 提供位置绑定。或者,可以通过“联系人”字段提供附加绑定。
SIP注册消息
REGISTER sip:sip.cybercity.dk SIP/2.0
Via: SIP/2.0/UDP 192.168.1.2;branch=z9hG4bKnp151248737-46ea715e192.168.1.2;rport
From: <sip:voi18063@sip.cybercity.dk>;tag=903df0a
To: <sip:voi18063@sip.cybercity.dk>
Call-ID: 578222729-4665d775@578222732-4665d772
Contact: <sip:voi18063@192.168.1.2:5060;line=9c7d2dbd8822013c>;expires=1200;q=0.500
Expires: 1200
CSeq: 68 REGISTER
Content-Length: 0
Max-Forwards: 70
User-Agent: Nero SIPPS IP Phone Version 2.0.51.16
B:呼叫建立
呼叫建立就是奇迹发生的地方。这里有几个步骤,所以让我们按顺序一一介绍。
- SIP 邀请请求- SIP 邀请开始呼叫建立尝试。此消息包含被叫方(To 字段中的 SIP URI)。该信息从呼叫者发送到 SIP 服务器,在该服务器中查找被呼叫者。在较大的网络中,如果被叫方不在本地,SIP 服务器可能需要咨询其他 SIP 服务器。一旦找到被叫方,就会转发邀请。对于 VoIP,邀请还包括带有 VoIP 呼叫参数的 SDP 消息正文。
- SIP 响应 100(尝试) - 此消息从 SIP 服务器发送到被叫方以确认邀请请求。
- SIP 响应 180(振铃) - 此消息表明被叫方收到了邀请,并且他们的用户代理正在提醒用户。
- SIP 响应 200(确定) - 用户接听时,会发回 200 响应以确认呼叫。此外,被叫方还发送带有其 VoIP 呼叫参数的 SDP 消息正文。由于此消息和来自呼叫者的初始邀请,已发生 VoIP 呼叫参数的交换和协商。
- SIP Ack 请求- 最后,呼叫者通过返回给被叫者的 Ack 请求进行确认。然后,被叫方向主叫方发起 VoIP 呼叫。
C:网络电话呼叫
VoIP 呼叫本身使用 RTP实时传输协议在用户代理之间传输。该协议用于通过 IP 网络传送音频和视频数据。附加协议 RTCP(RTP 控制协议)用于为 RTP 传输提供统计和控制。我们将在即将发布的博客中介绍 RTP 和 RTCP。
- 03-31
- 03-31
- 03-31
- 03-31
- 03-31
- 03-24
- 03-24
- 03-24
- 02-17
- 11-11
- 10-21
- 09-23
- 08-02
- 07-24
- 07-18
- 07-15