SIP 协议原理及应用精解

SIP 协议原理及应用精解

本文介绍 SIP(会话发起协议)的定位、消息格式、典型呼叫流程及与 SDP、IMS 的关系,适合需要理解 VoIP/IMS 信令或做 SIP 开发的读者。读完可掌握 SIP 基本概念、六类常用方法、响应码、SDP 结构及与 H.323、VoLTE 的对比。


目录

  1. [SIP 概述](#SIP 概述)
  2. [SIP 原理简介](#SIP 原理简介)
  3. [SIP 消息格式与响应码](#SIP 消息格式与响应码)
  4. 典型呼叫流程
  5. [SIP 与 H.323](#SIP 与 H.323)
  6. [SDP 协议](#SDP 协议)
  7. [SIP 与 IMS/VoLTE](#SIP 与 IMS/VoLTE)
  8. [开源 SIP 协议栈简介](#开源 SIP 协议栈简介)
  9. 常见问题与排错
  10. 小结
  11. 术语与速查

一、SIP 概述

SIP(Session Initiation Protocol,会话发起协议) 由 IETF 提出,是 IP 电话与多媒体会话的信令控制协议。其主要目的是:

  • 解决 IP 网中的信令控制
  • 实现与软交换的通信
  • 构成下一代增值业务平台,为电信、银行、金融等行业提供更好的增值业务

SIP 独立于底层网络传输协议和媒体 工作。它规定一个或多个参与方的终端设备如何建立、修改和中断连接,而不论是语音、视频、数据或基于 Web 的内容。
媒体
信令
建立后
SIP 信令
RTP/RTCP 媒体
终端A
终端B

协议速查

项目 说明
标准 IETF RFC 3261 及系列(2543 已废弃)
传输 通常 UDP/TCP,端口默认 5060(非加密)、5061(TLS)
特点 文本协议、请求-响应、与 HTTP 类似(方法 + 状态码)
媒体 不承载媒体,媒体由 SDP 协商后经 RTP 等传输

二、SIP 原理简介

2.1 基本原理

  • SIP 是 IETF 提出并主持研究的、支持多媒体会话信令控制协议 ,作用在于建立、修改、释放多媒体会话。
  • 当会话一端向另一端发出建立多媒体会话的邀请 时,必须在 SIP 的请求消息中给出描述会话特征的信息。
  • 在 SIP 中:
    • 用户代理客户:UAC(User Agent Client)
    • 用户代理服务器:UAS(User Agent Server)

定位与局限

  • SIP 不定义 要建立的会话的类型,只定义如何管理会话
  • SIP 既不是会话描述协议,也不提供会议控制功能;为描述消息内容的负载和特点 ,SIP 使用 SDP(Session Description Protocol,会话描述协议) 来描述终端设备的特点。

2.2 会话构成

SIP 会话涉及四个主要组件,通过携带 SDP(用于定义消息的内容和特点)的消息完成会话。

组件 作用
SIP 用户代理(UA) 终端用户设备(手机、多媒体手持设备、PC、PDA 等),用于创建和管理 SIP 会话。UAC 发出消息,UAS 对消息进行响应。
SIP 注册服务器 存放域内所有用户代理位置的数据库。在 SIP 通信中检索参与方的 IP 地址等信息,并提供给 SIP 代理服务器。
SIP 代理服务器 接受 UA 的会话请求,向注册服务器查询收件方 UA 的地址,将会话邀请转发给收件方 UA(同域)或转发给其他代理(跨域)。
SIP 重定向服务器 允许代理服务器将会话邀请定向到外部域。可与注册服务器、代理服务器部署在同一硬件上。

组件协作关系

  1. INVITE 2. 查询位置 3. 返回地址 4. 转发 INVITE 或
    302 重定向
    UAC 主叫
    代理服务器
    注册服务器
    UAS 被叫
    重定向服务器

关系概览

  • UAC 向代理发送请求;代理向注册服务器查询被叫位置,再转发给被叫 UA 或下一跳代理/重定向服务器。
  • 重定向服务器返回 3xx,由代理或 UAC 向新地址再发 INVITE。

2.3 SIP 结构与常用方法

常用 SIP 请求方法 共六种:

方法 用途
INVITE 邀请用户参与会话。消息体为会话描述(通常用 SDP),包含主叫可接收/发送的媒体类型及参数。
ACK 对 INVITE 的最终应答的确认,仅与 INVITE 配合使用。可带消息体。
BYE 结束本次呼叫,主叫或被叫均可发送,相当于挂机。
CANCEL 取消尚未完成的请求。CANCEL 与被取消请求具有相同的 Call-ID、To、From、Cseq。UAC/UAS 均可发送。
REGISTER UAC 将 To 头中的地址注册到注册服务器。UAC 启动后以组播等方式发送 REGISTER。注册有有效期,到期删除,故需定时重新注册。
OPTIONS 查询 UAS 的能力(支持的方法、会话描述协议等)。

| SUBSCRIBE / NOTIFY | 事件订阅与通知(如 Presence、消息等待)。 |

| REFER | 引用/转接,要求对方向第三方发起请求。 |

| INFO | 带内传递应用层信息(非会话描述)。 |


三、SIP 消息格式与响应码

3.1 消息类型与结构

SIP 消息分为请求响应两类。

  • 请求 :首行为 Request-Line ,格式为 方法 SP 请求-URI SP SIP/2.0,例如 INVITE sip:bob@example.com SIP/2.0
  • 响应 :首行为 Status-Line ,格式为 SIP/2.0 SP 状态码 SP 原因短语,例如 SIP/2.0 200 OK

首行之后为若干 Header 行(与 HTTP 类似),空行后为可选 Body(如 SDP)。常见头部如下。

头部 含义 示例
Via 经过的路径,用于响应回传 Via: SIP/2.0/UDP pc1.example.com;branch=z9hG4bK776
From 主叫标识 From: "Alice" <sip:alice@example.com>
To 被叫标识 To: <sip:bob@example.com>
Call-ID 呼叫唯一标识 Call-ID: a1b2c3@pc1.example.com
CSeq 序号,请求与对应响应一致 CSeq: 1 INVITE
Contact 后续请求可直接发往的 URI Contact: <sip:alice@192.168.1.1:5060>
Content-Type 消息体类型 Content-Type: application/sdp
Max-Forwards 最大转发次数,防环 Max-Forwards: 70

3.2 响应码速查

范围 类型 常见码
1xx 临时响应 100 Trying(处理中)、180 Ringing(振铃)、183 Session Progress(带 SDP 的进展)
2xx 成功 200 OK(成功)
3xx 重定向 301 Moved Permanently、302 Moved Temporarily、380 Alternative Service
4xx 客户端错误 400 Bad Request、401 Unauthorized、404 Not Found、408 Request Timeout、486 Busy Here
5xx 服务器错误 500 Server Internal Error、503 Service Unavailable
6xx 全局失败 600 Busy Everywhere、603 Decline、604 Does Not Exist Anywhere

3.3 INVITE 请求示例(简化)

便于对「真实报文长什么样」有直观印象:

text 复制代码
INVITE sip:bob@example.com SIP/2.0
Via: SIP/2.0/UDP 192.168.1.1:5060;branch=z9hG4bK776asdhds
Max-Forwards: 70
To: <sip:bob@example.com>
From: "Alice" <sip:alice@example.com>;tag=1928301774
Call-ID: a84b4c76e66710@192.168.1.1
CSeq: 1 INVITE
Contact: <sip:alice@192.168.1.1:5060>
Content-Type: application/sdp
Content-Length: 142

v=0
o=alice 2890844526 2890844526 IN IP4 192.168.1.1
s=-
c=IN IP4 192.168.1.1
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000

四、典型呼叫流程

一次成功呼叫的简化信令顺序如下(主叫 A、被叫 B,经代理 P)。
被叫 UA 代理 主叫 UA 被叫 UA 代理 主叫 UA 媒体流 (RTP) 建立 INVITE (SDP offer) INVITE (SDP offer) 100 Trying 100 Trying 180 Ringing 180 Ringing 200 OK (SDP answer) 200 OK (SDP answer) ACK ACK BYE BYE 200 OK 200 OK

要点

  • INVITE 携带 SDP offer(主叫支持的媒体);200 OK 携带 SDP answer(被叫选择的媒体);ACK 确认后双方按 SDP 建立 RTP 等媒体流。
  • BYE 由任一方发起,对方回 200 OK 即释放会话。

五、SIP 与 H.323

  • H.323SIP 分别代表通信领域互联网两大阵营的建议。
  • H.323:把 IP 电话视为传统电话,只是传输从电路交换变为分组交换,协议相对复杂。
  • SIP :把 IP 电话视为互联网上的一个应用,与 FTP、E-mail 等并列,但增加了信令与 QoS 要求;协议相对简单、灵活。

两者支持的业务基本相同,都使用 RTP 作为媒体传输协议。随着 VoIP 与 NGN 发展,由 H.323 向 SIP 演进成为趋势。

对比简表

维度 H.323 SIP
提出方 ITU-T(电信) IETF(互联网)
设计思路 把 IP 电话当传统电话 把 IP 电话当互联网应用
复杂度 较复杂(ASN.1 编码等) 相对简单(文本、类 HTTP)
信令 H.225、H.245 等 SIP + SDP
媒体 RTP/RTCP RTP/RTCP
扩展性 偏重电信规范 易扩展,与 Web 融合好

六、SDP 协议

(SDP 在 RFC 4566 中更新,RFC 2327 已被取代。)

6.1 定义与作用

SDP(Session Description Protocol,会话描述协议)RFC 2327 中首次定义,现由 RFC 4566 更新,用于描述多媒体会话,支持会话通告、会话邀请及其他形式的多媒体会话启动。

  • SDP 描述的信息封装在传送协议中发送。
  • 典型传送协议包括:SAP(Session Announcement Protocol)、SIP、RTSP、HTTP、以及采用 MIME 的 E-mail。
  • 采用 SIP 传送时,数据包格式为「头部 + 文本净荷 」:头部为 SIP 呼叫控制信息,文本净荷为 SDP 描述的媒体信息。若用 E-mail 或 HTTP,MIME 内容类型为 application/sdp

SDP 传递的是多媒体会话的媒体流信息 ,目的有二:一是告知某会话存在 ,二是给出参与该会话所必需的信息

6.2 格式与结构

  • SDP 会话描述为纯文本 ,采用 UTF-8 编码的 ISO 10646 字符集。
  • 由多行文本组成,每行格式:<type>=<value>
    • <type>:单字符,区分大小写。
    • <value>:结构化文本串,格式依赖 <type>,区分大小写;可由多个空格分隔的字段组成,或为自由文本。
    • 「=」两侧不允许有空格。

会话描述包括两部分:

部分 起始行 内容
会话级描述 v= 适用于整个会话和所有媒体流的信息。
媒体级描述 m= 仅适用于该媒体流的信息。

6.3 SDP 字段速查

类型 含义 示例
v= 版本 v=0
o= 发起方与会话标识 o=alice 2890844526 2890844526 IN IP4 host.example.com
s= 会话名 s=Session SDP
t= 时间 t=0 0
m= 媒体行(类型、端口、传输、格式) m=audio 49170 RTP/AVP 0
c= 连接信息(IP 等) c=IN IP4 192.168.1.1
a= 属性 a=rtpmap:0 PCMU/8000、a=sendrecv

媒体行 m= 格式:m=<media> <port> <proto> <fmt> ...,如 m=audio 49170 RTP/AVP 0 表示音频、端口 49170、RTP/AVP、负载类型 0(PCMU)。

6.4 SDP 示例(简化)

text 复制代码
v=0
o=alice 2890844526 2890844526 IN IP4 192.168.1.1
s=-
c=IN IP4 192.168.1.1
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 51372 RTP/AVP 31
a=rtpmap:31 H261/90000

七、SIP 与 IMS/VoLTE

在 4G/5G 网络中,IMS(IP Multimedia Subsystem) 负责提供语音、视频等多媒体业务;VoLTE/VoNR 的会话控制信令即基于 SIP

  • IMS 中 SIP 用于注册(REGISTER)、会话建立(INVITE/200/ACK)、会话释放(BYE) 等,与本文所述原理一致。
  • 差异在于:IMS 引入 CSCF (Call Session Control Function,如 P-CSCF、I-CSCF、S-CSCF)、HSS 等网元,并常与 Diameter 配合做鉴权、计费;SIP 消息在 UE 与 P-CSCF 间可能经 TLSIPSec 保护。

终端
P-CSCF
I-CSCF
S-CSCF
HSS
应用服务器


八、开源 SIP 协议栈简介

在 SIP 时代,开源协议栈众多(SIP 相对 H.323 更简单、灵活)。以下为较有代表性的五个开源项目对比(基于原书归纳):

协议栈 特点
OPAL 发展潜力大
VOCAL 较完善
sipX 兼容性好
ReSIProcate 较稳定
oSIP 小巧、快速

选型时需根据应用场景选择合适的协议栈进行研究和开发。


九、常见问题与排错

9.1 用 Wireshark 抓 SIP

  • 抓包前:确认 SIP 走的是 UDP/TCP 的 5060(或 5061 TLS);若为 TLS,需在 Wireshark 中配置解密(如 RSA 密钥)才能看到明文 SIP。
  • 选择接口:在「捕获」里选择连接 SIP 设备/软交换的网卡;多网卡时选实际跑流量的接口。
  • 捕获过滤(Capture Filter) :可先不设,抓全后再用显示过滤;若流量大,可设 udp port 5060tcp port 5060 只抓 SIP 端口。
  • 抓包后:在「文件」→「导出」可导出为 pcap/pcapng,便于复现或发给他人分析。

9.2 Wireshark 显示过滤(Display Filter)

过滤条件 含义
sip 只显示 SIP 报文
sip.Method == "INVITE" 只看 INVITE 请求
sip.Status-Code == 200 只看 200 响应
sip.Status-Code >= 400 只看错误响应(4xx/5xx/6xx)
sip.Call-ID == "xxx" 按 Call-ID 跟踪单次呼叫(需替换为实际 Call-ID)
`sip.Method == "INVITE"
udp.port == 5060 按端口(若未解析为 SIP 可用)
  • 在报文详情里右键某字段(如 Call-ID)→「应用为过滤器」→「选中」,可自动生成对应过滤条件。
  • 跟踪单次呼叫 :在一条 INVITE 上右键 →「Follow」→「UDP Stream」或「TCP Stream」,可看该会话所有 SIP;再结合 RTP 流(rtprtp.payload)可对照信令与媒体。

9.3 典型 4xx 响应与排查思路

响应码 含义 常见原因 排查建议
400 Bad Request 请求格式错误 头部缺失/错误、Body 与 Content-Length 不符、非法字符 对照 RFC 3261 检查请求行与头部;看 Wireshark 里服务器返回的 Reason-Phrase 或 Body 中是否有细节
401 Unauthorized 需要认证 未带或错误的 Authorization / Proxy-Authorization 检查 REGISTER/INVITE 是否带正确的鉴权信息;对 401 的 WWW-Authenticate 做 鉴权重试
404 Not Found 用户/路由不可达 被叫未注册、AOR 错误、路由/域名解析不到 查注册服务器上被叫是否在线;核对 Request-URI 与 To;查 DNS 与路由
408 Request Timeout 对方未在时限内响应 对端无响应、网络丢包或延迟大 查对端是否存活、防火墙/NAT、重传与超时配置
486 Busy Here 被叫忙 被叫拒接或占线 业务层逻辑;可考虑转语音信箱或排队
488 Not Acceptable Here 媒体协商不通过 SDP 与对端能力不匹配(编解码、端口等) 对照 SDP offer/answer,检查 m=、a=、编解码是否被对端支持;检查防火墙是否放行 RTP 端口
  • 5xx(如 503 Service Unavailable):多为服务器/代理过载或不可用,查服务状态与上游节点。
  • 6xx(如 603 Decline):被叫明确拒绝,属业务行为;600 Busy Everywhere 表示多方忙。

9.4 其他排错要点

  • 只抓到 SIP 看不到 RTP :SIP 与 RTP 端口不同,显示过滤用 sip || rtp;RTP 端口由 SDP 的 m=c= 决定,确认该端口未被防火墙/NAT 阻断。
  • INVITE 无 200/ACK:可能是 4xx/5xx 未到达主叫、或中间代理改写/丢弃;按 Call-ID 在 Wireshark 里跟踪整条路径,看最后一条响应是谁、是否被中间节点改写。
  • 注册失败(REGISTER 401/403):检查域名/Realm、用户名与密码、是否需携带正确的 Contact 与 Expires;TLS 时检查证书与域名是否匹配。

小结

SIP 是 IP 多媒体会话的信令控制协议 :负责建立、修改、释放 会话,不承载媒体本身;媒体由 SDP 协商后经 RTP 等传输。其特点包括:文本协议、请求-响应、与 HTTP 类似;通过 UA、注册、代理、重定向四类组件与 INVITE/ACK/BYE 等方法和 1xx~6xx 响应码完成呼叫。SDP 描述会话与媒体(v=/o=/m=/a= 等),常与 SIP 一起用于 VoIP、IMS/VoLTE。理解 SIP 与 SDP,是从事软交换、IMS、VoIP 开发与运维的基础。


术语与速查

术语 英文 含义
SIP Session Initiation Protocol 会话发起协议,IETF 标准
UAC User Agent Client 用户代理客户,发起请求端
UAS User Agent Server 用户代理服务器,响应端
SDP Session Description Protocol 会话描述协议,描述媒体与能力
RTP Real-time Transport Protocol 实时传输协议,承载语音/视频
IMS IP Multimedia Subsystem IP 多媒体子系统,4G/5G 核心
VoLTE Voice over LTE 4G 语音
CSCF Call Session Control Function 呼叫会话控制功能(P/I/S-CSCF)

RFC 与规范

文档 内容
RFC 3261 SIP: Session Initiation Protocol(核心)
RFC 3263 SIP 服务器定位
RFC 3264 Offer/Answer 与 SDP
RFC 4566 SDP(取代 RFC 2327)
RFC 3550 RTP

参考资料:《网络协议本质论》第 16 章;RFC 3261、RFC 4566。

相关推荐
奔跑吧 android2 小时前
【车载Audio】【AudioHal 07】【高通音频架构】【从逻辑策略到物理执行】
音视频·audio·aosp·android15·8295·音频子系统
咚咚王者3 小时前
人工智能之视觉领域 计算机视觉 第十一章 视频基础操作
人工智能·计算机视觉·音视频
HaiLang_IT1 天前
数字媒体技术专业2026题目推荐:热门计算机视觉、图像与视频处理方向,含选题指南
计算机视觉·音视频·媒体
linux_cfan1 天前
从“线性观看”到“语义检索”:企业级视频知识库播放器选型指南 (2026版)
javascript·学习·音视频·html5
REDcker2 天前
从 SS7 到 VoLTE:核心信令协议栈与移动网络演进详解
开发语言·网络·sip·移动网络·volte·ss7·七号信令
憧憬成为原神糕手2 天前
音视频学习一
学习·音视频·视频编解码
不吃鱼的猫7483 天前
【ffplay 源码解析系列】02-核心数据结构详解
c++·ffmpeg·音视频
lili-felicity3 天前
进阶实战 Flutter for OpenHarmony:视频全屏播放系统 - 结合屏幕旋转
flutter·音视频
奔跑吧 android3 天前
【车载Audio】【AudioHal 06】【高通音频架构】【深入浅出 Android Audio HAL:从加载到函数指针绑定的全链路解析】
android·音视频·audioflinger·aosp13·8295·audiohal·高通音频架构