对话启动协定

会话发起协议（Session Initiation Protocol，缩写SIP）是一个由IETF  MMUSIC工作组开发的协议，作为标准被提议用于建立，修改和终止包括视频，语音，即时通信，在线游戏和虚拟现实等多种多媒体元素在内的交互式用户会话。2000年11月，SIP被正式批准成为3GPP信号协议之一，并成为IMS体系结构的一个永久单元。SIP与H.323一样，是用于VoIP最主要的信令协议之一。

**协议设计**
SIP最早由Henning Schulzrinne和Mark Handley于1996年所设计. SIP的设计目标之一是提供类似公用交换电话网（PSTN）中呼叫处理功能的扩展集。在这个扩展集中，实现类似日常电话的操作：拨号，振铃，回铃音或者忙音，只是实现方式和术语有所不同。
SIP也实现了许多七号信令系统（SS7）中更高级的呼叫处理功能，尽管这两个协议相差很远。SS7是一个高度集中处理的协议，其特点表现为高复杂度的中心网络结构和无智能的哑终端（传统的电话机）。SIP则是一个点对点协议，所以它只需要一个相对简单的（因此也高度可扩展的）核心网络，而将处理工作下放给连接在网络边缘的智能端点（装有硬件或软件的终端设备）。SIP的许多功能在端点中实现，这与传统的SS7将其在网络核心设备实现的作法大异其趣。
尽管有许多其它的VoIP信号协议存在，SIP的特点在于它的支持者植根于IP团体而不是电信产业。SIP最初由IETF标准化和管理，而H.323VoIP协议则从传统上与ITU有着更多的联系。尽管如此，这两个组织对两个协议在某些方面都相互认可。
SIP与许多其它的协议协同工作，仅仅涉及通信会话的信令部分（control message）。SIP报文内容传送会话描述协议（SDP），SDP协议描述了会话所使用流媒体细节，如：使用哪个IP端口，采用哪种编解码器等等。SIP的一个典型用途是：SIP“会话”传输一些简单的经过封包的实时传输协议流。RTP本身才是语音或视频的载体。
第一个被提议的标准版本（SIP 2.0）在RFC 2543中定义。在RFC 3261中对这个协议有更深入的解释，尽管目前许多装置仍然是参考以前的过渡版本而实现的。注意现在的版本还是2.0。
SIP同HTTP相似并采用了后者的一些设计原则：SIP报文是人类可读的，并且也是采取请求-应答的流程。SIP的倡导者宣称它比H.323简单。但是，有些人则保留地认为尽管SIP的原始目标很简单，现在它已经演变得跟H.323一样复杂了。SIP借用了许多HTTP状态码，如常见的'404 not found'。SIP的发起者说：曾经在网络上出现的急速革新和应用发展的历史将同样发生在电话产业上。SIP和H.323对语音通信毫无限制，能够传输从语音到视频的任何通信会话，甚至未来还没有设想的应用。

**SIP网络单元**

**用户代理（User Agent）**
SIP用户代理是一个SIP逻辑网络端点，用于创建、发送、接收SIP消息并管理一个SIP会话。SIP用户代理又可分为用户代理客户端UAC（User Agent Client）和用户代理服务端UAS（User Agent Server）。UAC创建并发送SIP请求，UAS接收处理SIP请求，发送SIP响应。

**代理服务器（Proxy）**
SIP代理服务器（PROXY）在网络上位于SIP UAC和UAS之间，用于帮助UAC和UAS间的消息路由。PROXY也可以执行路由策略控制（比如，检查SIP消息的合法性，确认消息是否被路由允许）。PROXY在转发SIP消息时，可能根据需要修改SIP消息的某些部分。

**注册服务器（Register）**
SIP注册服务器用于接收SIP注册请求，并保存发送注册请求的UA的位置信息。

**SIP网络部件**
拥有传统的电话机外表，触感和形状的硬件，但使用SIP和RTP通信的终端和设备，已经有多家厂商可以供货。这些产品中有些可以通过电子配号（ENUM）来把现存的电话号码翻译成使用DNS的SIP地址，所以即使你的服务商运营的网络还只是为传统电话号码服务的PSTN（并且对你收费），你也可以通过这些电话网络呼叫其它的SIP用户。
现在，软件SIP终端已经非常常见。微软公司的Windows Messenger使用了SIP。2003年6月，苹果电脑宣布并向公众发布了测试版的iChat AV，一个新版的兼容AOL Instant Messenger并支持通过SIP进行音视频聊天的客户端。
SIP要想成为实用的服务同样需要代理和注册网络部件。尽管两个SIP终端可以不借由任何SIP基础设施的支持来进行通信（这也是为什幺SIP被称为点对点的协议），但是这种方式是不适于实际的公共服务。现在已经有了很多公司提供软交换系统（如Nortel，Sonus等许多公司）。其他的一些以Ubiquity Software和Dynamicsoft为首的公司已经实现了一些基于被提议的标准，建立在JavaJAIN规范上的产品。
来自RFC：
"SIP使用代理服务器（Proxy server）的部件来协助转发信令报文到目标用户目前网路位置，提供用户认证和授权服务，实现服务提供商的呼叫路由策略，和提供给用户各种附加功能。"
"SIP同样提供了注册功能以允许用户上传他们目前的联网位置供代理服务器使用。"
"因为注册动作在SIP协议中扮演重要的角色，掌控用户注册信息的 用户代理服务器有一个特殊的名字注册伺服器（registrar）。"
"有一个重要的概念，那就是各种SIP服务器之间的区别是逻辑上的，而不是物理上的。"

**即时消息（IM）和Presence**
一个基于SIP标准针对及时信息的扩展，被称为SIMPLE已经被提议并正在开发中。SIMPLE可以传递Presence信息：被叫用户是否有意愿加入对话？使用终端是否有能力加入对话？。Presence信息的角色如同MSN Messenger和AIM、等IM客户端中已普遍实现的好友状态功能。
已经有人在努力把基于SIP的VoIP和Jabber使用的XMPPpresence规范整合在一起。最著名的是将XMPP扩展到整合语音的Google Talk，它计划整合SIP。Gizmo工程，曾经实现了SIP，现在已经在他们的客户端和服务中加入了XMPP。

**商业应用**
用于搭载媒体流的实时传输协议（RTP）并不能简单的穿越NAT路由器。大部分SIP客户端可以通过STUN的协助穿越完全圆锥形和端口限制圆锥形NAT但对于对称的（symmetric）NAT还是有问题。
一些较新的带ALG功能的路由器，现在可以识别SIP通信并让其通过。RTP代理服务器，一种在上世纪九十年代普遍使用的类似于HTTP代理服务器的专用于SIP的线速处理器，可以启用CALEA并穿越老式的无法识别SIP的NAT设备。
正如它的发明者所预见的，SIP的点对点特性无法使用一些网络本身提供的服务。例如，网络不能很容易的支持合法的呼叫侦听（在美国由法律控制的窃听，CALEA）。紧急呼叫（在美国呼叫E911）难以路由。因为IP终端本身具有移动性，网络并没有任何定位的能力，要确定正确的公共服务应答点PSAP很困难。然而，当商业SIP服务商们正准备放弃时，一些实用的解决方案却在进行试验。由3GPP和3GPP2等公司开发的标准定义了基本SIP模型的一些应用，这些应用推动了商业化并支持了网络中心的能力，如CALEA。
Vonage和SIPphone等公司是消费SIP的先锋，他们拥有一个快速增长的用户基础。一些较大的公司，如AT&T和Level(3)也不甘示弱。传统的电信工业（包括朗讯科技和北电网络）现在都在集中开发基于SIP架构模型和扩展的系统，如3GPP的IP多媒体子系统（IMS）。
一些VoIP电话公司，如BroadVoice，允许用户使用它们自己的SIP设备，包括兼容SIP的电话机，AsteriskPBX，或者软电话。新的消费SIP设备市场正在继续膨胀。
开源团队开始提供越来越多的建立终端，代理和注册服务器所需的技术，既让这些技术走进了人们的日常生活，又加速了其向全球推广。 SIPfoundrydate=20110104200352 已经开发了多种SIP协议栈，客户端应用程序和SDK，还有一整套可以与市场上大部分由厂商销售的IP PBX实现相竞争的IP PBX解决方案。

**软件**
 SIP通信方案：
**  3Com SIP PBX - 基于SIP的企业级IP电话应用套件date=20101225213208 
**  Asterisk开源SIP/IAX PBXdate=20110224084542 
**  Brekeke OnDO PBXdate=20201202061934 
**  Microsoft Office Live Communications Server
**  pbxnsip PBXdate=20180323070954 
**  Rostrvm Switchless - 使用SIP的呼叫中心架构date=20081203161805 
**  sipX - 开源的SIP PBXdate=20051210024955 （带商业支持 Pingteldate=20090504124430 .）
** FreeSWITCH开源软交换解决方案- SIP服务器：
**  Micromethod SIPMethod Platform
**  Ubiquity SIP应用服务器
**  3Com VCX IP电话模块：背靠背用户代理SIP PBXdate=20101225213208 
**  BEA WebLogic SIP服务器date=20080521161301 
**  Brekeke OnDO SIP服务器date=20201202061934 ，适用于Windows，Linux，和Mac OS X。用于个人和教育用途免费。
**  Cisco SIP代理服务器date=20070522054329 
**  Nortel SIP多媒体通信服务器5200fix-attempted=yes 
** IPTel.org 免费软件SIP Express Router路由器
**  Pingtel Call Manager（基于SIP Foundry开源）
**  FreeSWITCH开源软交换平台date=20130620165912 - SIP客户端：
**  ekigadate=20210204183554 : Ekiga是全功能的SIP和H.323兼容的VoIP、IP电话和视频会议应用程序，它允许您与远程用户通过使用SIP和H.323硬件或软件进行音频及视频通话。
**  GNOME Meeting: H323和SIP客户端（目前版本1.3-opal）for GNU/Linux。
** Gizmo Project: SIPphone.com提供，适用于Mac OS X，Windows和Linux。
**  sipXphone - 一个适用于Windows和Linux的SIP客户端date=20051210024955 
** PhoneGaim SIP免费软件，基于Gaim。
** X-Lite一个流行的Windows和Linux软电话，可以完全免费使用。
** eyeBeam与X-Lite出自于同一家公司，功能更为强大，需要付费使用。
** KCall一个使用Qt库的Linux软电话。
** KPhone一个使用Qt库的Linux软电话。
** Linphone一个使用GTK库的Linux软电话。
**  Pingtel SIP soft phone（单用户版，企业版和用于嵌入式的OEM版。OEM版嵌入到 Earthlink Vling服务中。）
**  SJPhonedate=20190102163440 一个免费的SIP客户端，可以运行在Mac OS X，Windows，PocketPC和Linux上。
** Jajah一个免费的Softphone，运行在Windows上，Mac OS X和Linux版本稍后推出。
**  OpenWengo一个开源的SIP客户端，运行在Windows和Linux上。Mac OS X和PocketPC版本稍后推出。
** SFLPhone一个开源的SIP客户端。
** ZAP一个开源的，基于XUL的SIP客户端。- SIP测试工具：
**  SFTFdate=20210309050807 : SIP论坛用户代理测试框架（开源；由SIP论坛编写）。
**  SIPpdate=20210310175021 :一个开源的SIP测试工具（用于功能和性能测试）。
**  Sipsak: sipsak是一个命令行工具，它能够发送简单的请求到SIP服务器（开源）。
**  带宽VoIP测试fix-attempted=yes ：Bandwidth.com提供了一个可以测试网络上SIP端口的工具。- SIP协议栈：
**  ReSIProcatedate=20080907104725 :开源SIP协议栈。
**  OPALdate=20200909002327 :开源的sip协议栈，同时支持H323和sip
**  VOCALdate=20201205180001 开源SIP协议栈
**  osipdate=20210306034125 开源SIP协议栈
**  sipx date=20110104200352 开源SIP协议栈
**  Sofia-SIPdate=20210224191710 一个小巧开源的SIP协议栈（RFC3261），支持WIN32平台
6种SIP协议栈各有千秋，OPAL有发展潜力，VOCAL比较完善，sipX兼容性好，ReSIProcate比较稳定，oSIP小巧而快速，Sofia-SIP简短、组件化到位。

**参见**
 Earthlink SIPshare- Media Gateway Control Protocol（MGCP）- IP多媒体子系统

**外部链接**
  SIP资讯date=20200627142418 -  ONsip.org –致力于基于SIP的VoIP解决方案的开源团体。-  Henning Schulzrinne合著者的SIP标准协议栈的页面。date=20210211013108 -  SIP论坛date=20210311113618 -  3NGfix-attempted=yes -  Packetizer的SIP信息站点date=20080516201916 -  汇思通信SIP论坛（中文简体版）永久失效连结date=20070407000456