1. VoLTE基础与网络架构:IMS核心网、EPC网络、SIP协议栈、RTP/RTCP协议
各位同学,咱们今天聊VoLTE。说实话,这个技术刚出来那会儿,我也有点懵。传统的电路域语音多简单啊,一根线通到底。VoLTE呢?绕来绕去,又是IMS又是EPC的。但搞懂了之后你会发现,它其实就那几块东西拼起来的。
我个人习惯把VoLTE拆成三个层面来看:接入层、承载层、控制层。接入层管你怎么连上网络,承载层管数据怎么传,控制层管通话怎么建立和拆除。嗯,这样一拆,思路就清晰了。
1.1 IMS核心网——VoLTE的大脑
IMS,全称IP Multimedia Subsystem,说白了就是一套基于SIP协议的会话控制系统。VoLTE通话能不能打通,全看IMS的脸色。
IMS里最重要的几个网元,我列一下:
- CSCF(呼叫会话控制功能):这是IMS的核心,分P-CSCF、I-CSCF、S-CSCF三种。P-CSCF是用户接入IMS的第一道门,S-CSCF负责实际的会话控制。
- HSS(归属用户服务器):存用户签约数据的地方。你开通了VoLTE没?HSS说了算。
- MGCF(媒体网关控制功能):负责IMS和传统PSTN网络互通。老网络还没退网,得靠它搭桥。
- MRF(媒体资源功能):提供彩铃、会议桥等媒体资源。
重要概念:IMS是一个"归属地控制"的网络。什么意思?你漫游到外地,但会话控制还是由你家那边的S-CSCF负责。我在项目中遇到过,用户投诉漫游时VoLTE注册失败,查了半天发现是HSS里签约数据没配好。嗯,这种坑踩过一次就记住了。
1.2 EPC网络——VoLTE的骨架
EPC,Evolved Packet Core,4G时代的核心网。VoLTE的语音数据包,就是通过EPC来传输的。你想想看,语音数据本质上也是IP包,跟上网数据没啥区别,只是优先级更高。
EPC的关键网元:
| 网元 | 全称 | 作用 |
|---|---|---|
| MME | Mobility Management Entity | 移动性管理、寻呼、鉴权 |
| S-GW | Serving Gateway | 用户面数据转发、锚点 |
| P-GW | Packet Data Network Gateway | 连接外部PDN、IP地址分配 |
| PCRF | Policy and Charging Rules Function | 策略控制、QoS管理 |
这里有个关键点:VoLTE通话需要建立专用承载。普通上网走默认承载,QoS等级低。VoLTE语音走专用承载,QCI=1,优先级最高。我曾经调试过一个案例,用户打电话时声音断断续续,抓包一看,语音包居然走了默认承载,跟下载流量抢带宽去了。后来查出来是PCRF策略配置有误。
避坑指南:EPC网络里,S-GW和P-GW的部署方式要特别注意。合设还是分设?分设时S1-U接口的传输时延能不能满足VoLTE要求?我曾经见过一个项目,S-GW和P-GW跨省部署,单向时延超过50ms,语音质量直接崩了。
1.3 SIP协议栈——VoLTE的语言
SIP,Session Initiation Protocol,是IMS的"官方语言"。VoLTE通话的建立、修改、释放,全靠SIP消息来沟通。
SIP协议栈长什么样?我画个图你就明白了。
SIP消息的格式,说白了就是文本协议。抓个包看看:
INVITE sip:user2@ims.example.com SIP/2.0
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK74b43
Max-Forwards: 70
From: <sip:user1@ims.example.com>;tag=12345
To: <sip:user2@ims.example.com>
Call-ID: abcdef123456@192.168.1.100
CSeq: 1 INVITE
Contact: <sip:user1@192.168.1.100:5060>
Content-Type: application/sdp
Content-Length: 142
v=0
o=user1 2890844526 2890844526 IN IP4 192.168.1.100
s=-
c=IN IP4 192.168.1.100
t=0 0
m=audio 49170 RTP/AVP 97
a=rtpmap:97 AMR-WB/16000
看到了吗?SIP消息里嵌着SDP(Session Description Protocol),用来协商媒体参数。比如上面这个例子,协商的是AMR-WB编码,16kHz采样率。这就是VoLTE高清语音的秘密。
个人经验:调试SIP信令时,我最常用的工具是Wireshark。过滤条件设成"sip",然后看INVITE和200 OK的SDP部分。有一次排查"电话接通后听不到对方声音"的问题,发现是SDP里协商的IP地址是内网地址,RTP流根本出不去。嗯,NAT穿越的问题,老生常谈了。
1.4 RTP/RTCP协议——VoLTE的血肉
SIP负责把电话"打通",但真正传语音数据的是RTP(Real-time Transport Protocol)。RTCP(RTP Control Protocol)则负责监控传输质量。
RTP包的结构很简单:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| synchronization source (SSRC) identifier |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
| contributing source (CSRC) identifiers |
| .... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
VoLTE里,RTP的payload通常是AMR或AMR-WB编码的语音帧。每个RTP包携带20ms的语音数据。为什么是20ms?这是语音编码的"帧长",也是延迟和带宽的折中方案。
RTCP呢?它定期发送报告,告诉对端:我收到了多少包,丢了多少,抖动多大。RTCP的SR(Sender Report)和RR(Receiver Report)是排查语音质量问题的重要依据。
关键指标:VoLTE语音质量好不好,看这几个RTCP参数就够了:
- 丢包率:超过3%就会明显感觉到声音断续
- 抖动:超过50ms,语音就会"一卡一卡"的
- 往返时延:超过200ms,通话体验就很差了
我记得有一次帮运营商排查VoLTE语音质量问题。用户投诉说"打电话像在跟外星人通话",声音断断续续还带回声。我抓了RTP流一看,丢包率高达8%,抖动100ms以上。再查下去,发现是基站侧传输链路带宽不足,语音包和视频包抢资源。后来做了QoS保障,问题就解决了。
注意:RTP的SSRC字段很重要。每个RTP流都有一个唯一的SSRC标识。如果两个通话用了相同的SSRC,接收端就会混淆。我在现网遇到过这种奇葩问题,排查了三天才发现是某个厂商的终端SSRC生成算法有bug。
好了,VoLTE的基础架构就聊到这儿。IMS是大脑,EPC是骨架,SIP是语言,RTP/RTCP是血肉。四者缺一不可。搞懂了这些,后面的内容就好理解了。
学习建议:别光看书,动手抓包。装个Wireshark,找个支持VoLTE的手机,打个电话,看看SIP信令怎么交互的,RTP包长什么样。实践出真知,这话一点不假。