会话发起协议-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"
To:
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:
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 号码。它与电子邮件地址非常相似。它由三个部分组成
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"
To:
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:
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:
To:
Call-ID: 578222729-4665d775@578222732-4665d772
Contact:
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。

- 07-21
- 07-21
- 07-14
- 07-14
- 07-07
- 07-07
- 06-23
- 06-23
- 04-14
- 02-17
- 11-11
- 10-21
- 09-23
- 08-02
- 07-24
- 07-18
