SIP 会话初始协议

SIP

SIP(Session initialization Protocol,会话初始协议)是由IETF(Internet Engineering Task Force,因特网工程任务组)制定的多媒体通信协议。它是一个基于文本的应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。SIP 是一种源于互联网的IP 语音会话控制协议,具有灵活、易于实现、便于扩展等特点。^1

简介

SIP(Session Initiation Protocol)是一个应用层的信令控制协议。用于创建、修改和释放一个或多个参与者的会话。这些会话可以是Internet多媒体会议、IP电话或多媒体分发。会话的参与者可以通过组播(multicast)、网状单播(unicast)或两者的混合体进行通信。

SIP与负责语音质量的资源预留协议(RSVP)互操作。它还与若干个其他协议进行协作,包括负责定位的轻型目录访问协议(LDAP)、负责身份验证的远程身份验证拨入用户服务 (RADIUS) 以及负责实时传输的 RTP 等多个协议。 [2]随着计算机科学技术的进步,基于分组交换技术的IP数据网络以其便捷性和廉价性,取代了基于电路交换的传统电话网在通信领域的核心地位。SIP协议作为应用层信令控制协议,为多种即时通信业务提供完整的会话创建和会话更改服务,由此,SIP协议的安全性对于即时通信的安全起着至关重要的作用。

  • 压缩机制
    SIP 压缩机制主要是通过改变 SIP 消息的长度来降低时延。典型的 SIP 消息的大小由几百到几千字节,为了适合在窄带无线信道上传输,IMS对SIP进行了扩展,支持SIP消息的压缩。当无线信道一定时, 一条SIP消息所含帧数 k仅取决于消息大小。从时延模型可以看出,不仅影响 SIP 消息传输时延, 还影响SIP重传的概率, 对自适应的定时器来说,k还成了影响定时器初值的关键因素。

会话构成

SIP 会话使用多达四个主要组件:SIP 用户代理、SIP 注册服务器、SIP 代理服务器和 SIP 重定向服务器。这些系统通过传输包括了 SDP 协议(用于定义消息的内容和特点)的消息来完成 SIP 会话。下面概括性地介绍各个 SIP 组件及其在此过程中的作用。

  • 用户代理
    SIP 用户代理(User Agent,UA) 是终端用户设备,如用于创建和管理 SIP 会话的移动电话、多媒体手持设备、PC、PDA 等。用户代理客户机发出消息。用户代理服务器对消息进行响应。

  • 注册服务器
    SIP 注册服务器是包含域中所有用户代理的位置的数据库。在 SIP 通信中,这些服务器会检索出对方的 IP 地址和其他相关信息,并将其发送到 SIP 代理服务器。

  • 代理服务器
    SIP 代理服务器接受 SIP UA 的会话请求并查询 SIP 注册服务器,获取收件方 UA 的地址信息。然后,它将会话邀请信息直接转发给收件方 UA(如果它位于同一域中)或代理服务器(如果 UA 位于另一域中)。

  • 重定向服务器

SIP 重定向服务器允许 SIP 代理服务器将 SIP 会话邀请信息定向到外部域。SIP 重定向服务器可以与 SIP 注册服务器和 SIP 代理服务器同在一个硬件上。

SIP通过以下逻辑功能来完成通信:

  • 用户定位功能:确定参与通信的终端用户位置。
  • 用户通信能力协商功能:确定参与通信的媒体终端类型和具体参数。
  • 用户是否参与交互功能:确定某个终端是否加入某个特定会话中。
  • 建立呼叫和控制呼叫功能:包括向被叫“振铃”、确定主叫和被叫的呼叫参数、呼叫重定向、呼叫转移、终止呼叫等。

以下几个情景说明 SIP 组件之间如何进行协调以在同一域和不同域中的 UA 之间建立 SIP 会话:
在同一域中建立 SIP 会话
如图1所示,说明了在预订同一个 ISP 从而使用同一域的两个用户之间建立 SIP 会话的过程。用户 A 使用 SIP 电话。用户 B 有一台 PC,运行支持语音和视频的软客户程序。加电后,两个用户都在 ISP 网络中的 SIP 代理服务器上注册了他们的空闲情况和 IP 地址。用户 A 发起此呼叫,告诉 SIP 代理服务器要联系用户 B。然后,SIP 代理服务器向 SIP 注册服务器发出请求,要求提供用户 B 的 IP 地址,并收到用户 B 的 IP 地址。SIP 代理服务器转发用户 A 与用户 B 进行通信的邀请信息(使用 SDP),包括用户 A 要使用的媒体。用户 B 通知 SIP 代理服务器可以接受用户 A 的邀请,且已做好接收消息的准备。SIP 代理服务器将此消息传达给用户 A,从而建立 SIP 会话。然后,用户创建一个点到点 RTP 连接,实现用户间的交互通信。

软件

kamailio

Kamailio 是一款开源 SIP 服务器,每秒可处理数千个呼叫建立。Kamailio 可用于构建大型 VoIP 和实时通信平台,例如 presence、WebRTC、即时通讯和其他应用。此外,它还可以轻松扩展 SIP-to-PSTN 网关、PBX 系统或媒体服务器(例如 Asterisk、FreeSWITCH 或 SEMS)。

MicroSIP

调试经验: MicroSIP 的 ini 配置文件中 ICE=1 会导致拨号时带上 docker 虚拟网卡等虚拟接口信息,引起 SIP 信令中的 SDP 携带错误的 IP 地址,造成无法接通。需改为 ICE=0

配置路径

Windows 下配置文件位置:%APPDATA%\MicroSIP\microsip.ini
Linux (Wine) 下:~/.wine/drive_c/users/<user>/AppData/Roaming/MicroSIP/microsip.ini

[Network]
ICE=0          ; 改为0,禁用ICE,避免虚拟网卡干扰
; ICE=1  # 默认值,会导致 docker/vmnet 等虚拟接口被选为候选地址

排查方法

如果 MicroSIP 注册成功但呼叫无法接通(对方能看到来电但无声或无应答),检查:

  1. 打开 MicroSIP 设置 → 网络 → 关闭 ICE
  2. 或在 ini 文件中直接修改
  3. 如 SIP 日志显示 SDP 中有 192.168.x.x 之外的奇怪 IP(如 172.17.0.x docker 网段),就是 ICE 选了错误的网卡

参考文献

参考文献

苏ICP备19018690号-1