文章目录
- 一、语音技术的演进过程
- 二、SIP协议
-
- [2.1 服务器架构](#2.1 服务器架构)
- [2.2 帧格式](#2.2 帧格式)
- [2.3 register流程](#2.3 register流程)
-
- [2.3.1 digest摘要认证](#2.3.1 digest摘要认证)
- [2.4 通话流程](#2.4 通话流程)
-
- [2.4.1 事务(transcation)与会话(dialog)](#2.4.1 事务(transcation)与会话(dialog))
- [2.4.2 invite报文](#2.4.2 invite报文)
- [2.4.3 SDP协议](#2.4.3 SDP协议)
- 三、语音采集与RTP
-
- [3.1 RTP帧格式](#3.1 RTP帧格式)
- [3.2 PCM语音采样](#3.2 PCM语音采样)
- [3.3 G.711 协议标准](#3.3 G.711 协议标准)
- 四、SIP通话拓扑搭建
- 五、总结
一、语音技术的演进过程
语音通话技术历史悠久,从爱迪生发明电话,已经发展了100多年,已经从早期的模拟电话线发展到当下的VoIP技术,全IP化是趋势。
爱迪生电话 程控交换机PBX PSTN VoIP IPPBX
语音发展的趋势:
- 数字化
从早期的仅支持电话线通话,到ADSL电话线上网,再到电话线和网线分离,到今天的VoIP,网线上实现语音通话,基于IP的语音通话技术,多网融合,全IP化是趋势。
仅电话线 ADSL电话线上网 电话线和网线分离 网线承载语音VoIP
- 协议信令自动化
电话转接从一开始的人工接线员,到程控交换机PBX,再到基于IP的交换机IPPBX,实现信令和路由自动化。
总的来说VoIP是趋势,当下4G移动电话VoLTE也是VoIP的一个变种,底层技术是SIP协议,本文将详细介绍语音通话的底层技术SIP和RTP协议。
二、SIP协议
SIP(Session Initial Protocol),回话控制协议,基于UDP协议,端口号5060,RF3261 。可用作如下用途:
- 语音通话
- 视频通话
- 会议
语音通话中,SIP用于信令控制,实际语音流承载使用的是RTP协议。SIP和RTSP一样都是控制流,SIP用于语音电话,RTSP则用于视频流播放控制,这两者在摄像头中都有应用。

2.1 服务器架构
SIP协议中几个关键的逻辑服务器如下:

- 注册服务器
用于SIP客户端注册,将客户端(UA)的IP和电话号码进行绑定,以及进行一些认证的作用,校验密码是否正确。
- 代理服务器(proxy server)
代理服务器用于转发SIP协议报文,如上图客户端发来SIP协议经过代理服务器层层转发,最终到对方UA。
- UA(user agent)
用户代理,可以理解为SIP客户端,发起SIP请求和响应,可以接一个模拟POTS话机,代理模拟话机发起SIP请求等。
- 位置服务器
位置服务器负责向代理服务器提供服务器端的信息,其里面存储的是注册服务器收到的用户地址信息。
- 充定向服务器
重定向服务器不负责转发请求,只负责定位服务器端当前的地址,代理服务器接收到请求,将DNS域名解析的结果发送给重定向服务器,将定位到的服务器端当前位置返回给客户端代理服务器。和HTTP的重定向服务器一样,SIP重定向也可以起到负载均衡的作用。
2.2 帧格式
SIP、RTSP都和HTTP协议类似,是文本格式的协议以CRLF为一行结尾,也分:
-
请求行
-
message header
-
message body

-
SIP帧类型
帧类型即方法的定义如下,主要是register和通话的invite方法。

- SIP的错误码
和HTTP协议的错误码定义类似,
- 1xx:临时响应(处理中)
- 2xx:成功响应
- 3xx:重定向响应
- 4xx:客户端错误(请求问题)
- 5xx:服务器错误(服务端问题)
- 6xx:全局错误(呼叫无法完成)
常见错误码如下:
| SIP CODE | 描述 | 现象 | 解决方法 |
|---|---|---|---|
| 100 | Trying | 临时响应,表示请求正在处理中,但未完成。 | 无需操作,等待后续响应即可。 |
| 180 | Ringing | 被叫方已收到呼叫请求并开始振铃。 | 等待被叫方接听或超时。 |
| 200 | OK | 请求已成功完成(如呼叫接通、注册成功等)。 | 正常流程,无需处理。 |
| 301 | Moved Permanently | 被叫方已永久转移到新地址。 | 更新联系人地址,重新发起请求至新地址。 |
| 302 | Moved Temporarily | 被叫方临时转移至其他地址。 | 根据响应中的 Contact 头字段重试请求。 |
| 401 | Unauthorized | 请求缺乏有效认证信息(如用户名/密码错误)。 | 检查认证凭证(如 SIP 账户信息),重新发送带认证头的请求。 |
| 403 | Forbidden | 服务器理解请求,但拒绝执行(如权限不足)。 | 联系管理员确认权限配置,或检查请求合法性。 |
| 404 | Not Found | 请求的资源(如被叫号码)不存在。 | 检查被叫号码是否正确,或确认用户是否已注册。 |
| 408 | Request Timeout | 请求未在服务器规定时间内完成(如网络延迟或服务器过载)。 | 检查网络连接,调整超时参数,或重试请求。 |
| 480 | Temporarily Unavailable | 被叫方暂时不可用(如拒接、未注册或DND模式)。 | 等待被叫方恢复可用状态,或检查被叫设备状态。 |
| 486 | Busy Here | 被叫方正忙(如正在通话中)。 | 等待后重试,或启用呼叫等待功能。 |
| 487 | Request Terminated | 请求被取消(如主叫方主动挂断)。 | 正常终止流程,无需处理。 |
| 500 | Server Internal Error | 服务器内部错误(如配置错误或软件崩溃)。 | 联系服务器管理员检查日志,重启服务或修复配置。 |
| 503 | Service Unavailable | 服务器暂时无法处理请求(如维护或过载)。 | 等待服务器恢复,检查负载均衡或冗余配置。 |
| 504 | Server Timeout | 服务器未及时收到下游响应(如网关超时)。 | 检查网络链路或中继设备,调整超时设置。 |
| 603 | Decline | 被叫方明确拒绝呼叫(如手动拒接)。 | 确认被叫方意愿,或检查呼叫策略(如黑名单)。 |
- SIP地址信息
message header中关键的字段如下,主要路由的一些地址信息,而message body是sdp协议格式,一般通话的invite 报文中才有,SDP协议后文介绍。
| message header字段 | 说明 |
|---|---|
| call id | 通话的电话号码字符串 |
| Cseq | 报文序列号 |
| Content-Length | 消息体长度 |
| Content-Type | 消息体格式,application/sdp |
5个 地址信息,用于路由转发,类以太网路由转发报文处理,由于SIP协议需要在多级proxy server之间转发,proxy server和以太网报文转发中的路由器角色一样,那需要两个地址信息来表示源和目的地址信息,to和from就是目的地址,转发 中是不做改变的。uri:用来表示下一条地址信息,via是保存SIP中间转发过程中服务器列表信息,用于记录经过的路径,SIP响应报文可以根据via路径逐条返回,via字段每经过一个服务器就会加一条记录。另外多了一个conntact地址,用于响应端直接发起请求给源端,跳过中间的代理服务器。
| 地址信息 | 以太网 | SIP协议 |
|---|---|---|
| 下一跳地址 | dstMac | URI |
| 上一跳地址 | srcMAC | via |
| 源端地址 | srcIP | from/conntact |
| 目的地址 | dstIP | to |
2.3 register流程
register流程比较简单,分为需要认证和无需认证。
- 无需认证
对于无需认证,即不需要密码的注册流程,只需要发送两个报文,register报文后,服务器回复200 ok,表示注册成功。
UA register server register 200 ok UA register server
- 需要认证
需要认证的情况,注册时会有4个报文,在第一次register报文是不带认证信息,服务器收到后发送401/407 报文进行质询,然后客户端再发送带认证信息的报文,服务器认证通过发送200 ok报文,注册成功。
UA register server register 401 register(with auth) 200 ok UA register server
- register报文
如下帧格式,UA客户端:192.168.0.130;SIP服务器:192.168.0.178,注册报文详细内容如下.
-
register报文没有message body,只有request-line和message header
-
request-line的URI的方法是REGISTER,目的是服务器ip
-
via和from、connctact地址都是填充UA客户端的地址。
-
To地址是服务器地址

2.3.1 digest摘要认证
sip认证用户名和密码,使用digest摘要认证方式,这个和http认证方法类似。流程如下,服务器通过401质询报文,通过nonce发送一个随机字符串给客户端,客户端通过nonce字符串以及用户密码,使用md5摘要算法算出一个response字符串,服务器收到字符串使用同样的算法进行认证,因为md5摘要算法不可逆,密码信息使用密文在网络中传输。

2.4 通话流程
SIP通话流程如下:

1、主叫端发送invite报文,然后各proxy代理到被叫端
2、代理服务器在收到invite报文后会先回复一个临时响应100 Trying报文表示正在处理,然后发给下一跳。
3、被叫端回复180 Ring回铃音
4、被叫接听,回复200 ok
5、媒体流建立RTP流,通话建立
6、通话结束发送Bye报文
7、回复200 ok,通话正式断开。
2.4.1 事务(transcation)与会话(dialog)
语音回话管理和分层中有两个概念很重要,事务和会话。
- 事务
一个请求的所有响应称为事务,因为一个请求可能有多个临时响应。事务是SIP管理的最小单位。
- 会话
一次通话过程称为一个会话。

2.4.2 invite报文
invite报文格式如下,
主叫:192.168.0.130
被叫:192.168.0.178
服务器:192.168.0.178
各字段示例如下,INVITE报文的message body是SDP协议。


2.4.3 SDP协议
SDP(Session Description Protocol)会话描述协议,主要用于SIP、RTSP音视频会话建立过程传递会话信息。rfc4566文档。SDP约定格式内容如下,SDP参数格式如下,key-value对。
<type>=<value>
SDP定义的参数内容,如会话IP信、端口、电话号码,媒体类型、编码格式、采样率、帧率等信息。
Session description
v= (protocol version)
o= (originator and session identifier)
s= (session name)
i=* (session information)
u=* (URI of description)
e=* (email address)
p=* (phone number)
c=* (connection information -- not required if included in
all media)
b=* (zero or more bandwidth information lines)
One or more time descriptions ("t=" and "r=" lines; see below)
z=* (time zone adjustments)
k=* (encryption key)
a=* (zero or more session attribute lines)
Zero or more media descriptions
Time description
t= (time the session is active)
r=* (zero or more repeat times)
Media description, if present
m= (media name and transport address)
i=* (media title)
c=* (connection information -- optional if included at
session level)
b=* (zero or more bandwidth information lines)
k=* (encryption key)
a=* (zero or more media attribute lines)
SDP的示例:
v=0
o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
s=SDP Seminar
i=A Seminar on the session description protocol
u=http://www.example.com/seminars/sdp.pdf
e=j.doe@example.com (Jane Doe)
c=IN IP4 224.2.17.12/127
t=2873397496 2873404696
a=recvonly
m=audio 49170 RTP/AVP 0
m=video 51372 RTP/AVP 99
a=rtpmap:99 h263-1998/90000
SDP协议中a=可以传递扩展参数信息。语音流程中p=传递电话号码信息,ptime表示语音流打包间隔。
三、语音采集与RTP
3.1 RTP帧格式
语音流使用RTP报文传输,RTP帧格式如下,主要作用是给语音流加上播放时间戳 ,以及 序列号解决丢包乱序问题,SSRC则是用于流区分,同一个RTP报文中可以传输多条流信息。RTP载荷类型可以是G.711(SIP通话)、H.264(RTSP视频流)。

- RTCP帧格式
RTCP和RTP使用一组端口号,RTCP主要用于QOS和报文流量控制等作用,RTP报文本身没有流量控制作用。RTCP通常几秒中发送一个,将报文丢包信息通知对方。

3.2 PCM语音采样
PCM帧采样内容可以参考:音视频处理(二): 一文讲清楚音频处理流程:采样、压缩和播放_音频采样-CSDN博客
PCM量化的关键参数
- 采样率
- 位深
- 通道数

3.3 G.711 协议标准
语音通话采用的G.711标准,G.711 是一种标准格式,而非对应具体帧格式,定义了如下内容:
| 协议内容 | 值 |
|---|---|
| 采样率 | 8000 |
| 压缩格式 | PCMA/PCMU |
| RTP打包间隔 | 20ms,根据invite报文中的ptime而定 |
| RTP payload报文长度 | 160字节,8K的采样率,每个采样1Byte,20ms报文长度 |
| RTP报文总长度 | 214字节,payload(160) + 54字节头部 |
- PCMA和PCMU压缩格式
| 特性 | PCMU (G.711 μ律) | PCMA (G.711 A律) |
|---|---|---|
| 压缩特性 | μ律(15折线近似) | A律(13折线近似) |
| 主要使用地区 | 北美、日本 | 中国、欧洲 |
| 对小信号的处理 | 量化间隔相对较大 | 量化间隔更小,对小信号量化更精细 |
| 实现复杂度 | 相对简单 | 相对复杂 |
| 核心共同点 | 采样率:8 kHz;带宽需求:64 kbps;语音质量优良(MOS分约4.7) |
- 13折现近似法
其中PCMA使用13折线近似法来进行压缩,本质是非均匀量化,根据信号的大小采用不同的刻度,小信号更精准。下图的x是归一化的有音频信号。

段内编码,通过不同度量衡,8字节可以表示11字节的数据内容,不过采用近似法,属于有损编码。
- 编码格式
3折线法将整个输入信号的动态范围(-1 到 +1)划分为了 8(段)× 2(正负) × 16(段内等分) = 256个不同的量化间隔(量化级) 。因此,每个抽样值可以用8位二进制码(2^8=256)来唯一表示。这8位码(如 C1 C2 C3 C4 C5 C6 C7 C8)的编排非常有讲究:
极性码(C1) :最高位。表示抽样值的正负。1代表正极性,0代表负极性
段落码(C2 C3 C4):这3位码用来确定信号绝对值落在13折线(正半部分)的哪一段。3位二进制数正好可以表示8种状态,对应8个段落。
段内码(C5 C6 C7 C8) :这4位码用于确定信号绝对值在其所属的段落内,具体位于16个均匀量化等级中的哪一个。由于各段长度不同,不同段落的量化间隔(Δ)是不同的。例如,第1段的量化间隔 Δ1 = (1/128) / 16 = 1/2048(定义为1个最小量化单位),而第8段的量化间隔 Δ8 = (1/2) / 16 = 1/32 = 64Δ1。这正是非均匀量化的体现。
四、SIP通话拓扑搭建
服务器:minisipserver
5个客户端可以试用30天。
服务器端配置:
默认是有3个电话号码的,如下:

客户端:eyebeam
客户端配置:


五、总结
本文整体介绍语音通话的各个技术,详细介绍SIP注册、通话协议流程,简要介绍了RTP和音频编码相关技术。具体RTP和编码算法相关大家可以查找官方文档进行进一步学习,有什么问题可以评论区一起探讨。