简介:围绕“怎样在5G网络中打通国际长途”这一主题的技术解读文档,面向通信行业从业者、5G网络学习者与核心网研发工程师,帮助厘清5G国际语音漫游的主要机制与实现难点。压缩包内为单份docx格式文档,大小291KB,内容为成体系的架构讲解与流程分析。文档从漫游目的与运营商间连接方式入手,介绍5GS与EPS互通的漫游架构,逐一说明UE、AMF、NRF、AUSF、UDM、SEPP等网元在控制面和用户面的作用,解释基于服务架构与安全边缘保护代理如何保障漫游信令安全,并比较S8HR、N9HR、EPS回退与VoNR等语音方案,指出漫游场景下建议优先采用VoNR以降低呼叫建立延迟。针对紧急服务,还梳理了5GS本地拨打与回退EPS两种处理路径,以及VPLMN IMS获取用户标识的必要环节。已有220人学习,对希望系统掌握5G国际长途、漫游语音及紧急呼叫实现细节的读者,是一份结构清晰、可直接用于学习的参考资料。
1. 怎样在5G网络中打通国际长途:不是加个00就能通的事
很多刚接触5G语音的工程师,第一次在实验室里拨国际长途,加完00听到忙音,第一反应是测试SIM卡余额不足。实际上5G网络不直接承载语音,呼叫要交给IMS域的VoNR或EPS Fallback处理,到了网络边界还要经过国际关口局。这里我按自己做项目的顺序拆这条链路:先讲清5G承载语音的两种形态,再给出一套可落地的SIP中继方案,最后把几次翻车记录整理成排查清单。无论你是做5G行业终端、企业总机还是运营商级长转业务,看完至少知道该在哪些节点上查信令。
2. 5G语音承载与国际关口局:为什么直接拨号常常失败
2.1 VoNR与EPS Fallback:5G网络里语音的两种真实形态
在5G SA网络里,没有传统意义的MSC交换机。AMF和SMF负责移动性和会话管理,UPF转发数据包,语音呼叫控制则落在IMS域。你可以把5G网络理解成一个高速通道,语音呼叫的控制信令由终端发给P-CSCF,媒体流也通过专用QoS Flow传输。这里有一个容易忽视的点:5G核心网默认只建立默认数据承载,语音必须额外建立专用承载,否则RTP包会跟着普通数据一起排队,拥塞时丢包率飙升。
VoNR模式下,终端注册在5G NR上,语音使用5QI=1的专用承载。这个承载的资源类型是GBR(保证比特率),配置了固定带宽和调度周期。参数大致如下(不同运营商略有差异):
| 参数 | VoNR语音承载 | 说明 |
|---|---|---|
| 5QI | 1 | GBR,优先级2 |
| ARP | 1~2 | 抢占与保持优先级 |
| MBR/GBR | 依据编解码速率 | 常见语音速率 32~88 kbps |
| Packet Delay Budget | 100 ms | 端到端预算 |
| Packet Error Rate | 1e-2 | 丢包率预算 |
EPS Fallback则是当前大规模的商用选择。发起呼叫时网络发现5G侧没有配置语音承载或覆盖不够,就把终端切换到LTE,随后在LTE上建立QCI=1的VoLTE承载。也就是说,你的5G手机虽然顶部信号标是5G,但通话时实际在4G链路上跑。很多人在实验室看到手机从5G跳到4G,以为掉网,其实这是正常流程。
从信令上看,一次5G国际长途呼出大概经历这几步:
- 终端发起业务请求,AMF根据UE能力和覆盖选择直接建立VoNR,或执行EPS Fallback。
- 建立语音专用承载(5QI=1或QCI=1)。
- 终端通过这个承载向IMS发送SIP INVITE。
- IMS完成呼叫权限检查、号码分析,将呼叫路由到国际关口局。
- 国际关口局把信令转换成对端要求的协议,送往海外目的地。
所以如果你只在5G核心网里搜“国际长途”,会什么都搜不到。问题往往出现在IMS的号码分析、路由配置或签约数据里。这也就是为什么很多从传统交换转过来的工程师,一开始会对着5G网络架构懵圈。
2.2 国际关口局的号码分析规则
国际长途路由的核心是“号首分析”。几乎每个运营商都有一个“Dial Plan”,决定什么样的被叫号码送到哪里。国际呼出通常有三种格式:
- 国际长途接入码+国家码+有效号码,例如 00 + 1 + 4085550100。
- 加号格式 +1 4085550100,一般出现在终端UI和SIP P-Asserted-Identity里。
- 美国/加拿大地区还常见011,用于北美长途。
在5G/IMS网络中,号码分析一般放在S-CSCF或出口SBC上。被叫以00开头时,IMS会把它转给国际关口局;如果是01/02等本地前缀,则走到本地局向。很多初学配置会在国际关口局侧把00当成被叫的一部分传到上游,结果上游收到“001”,认为非法国家码,直接拒绝。
我一般的做法是:在IMS侧去掉国际接入码,只把“国家码+国内有效号码”传给国际关口局;关口局侧再根据对端要求决定是否加号。比如用户拨00 1 4085550100,传到中继时是14085550100;如果协议栈要求E.164格式,再统一在前面加个+号。
主叫号码也需要变换。国内用户主叫通常是+86开头,但有些国际上游会对主叫做白名单校验,要求必须是“8613800001234”或“13800001234”这种完整数字。你必须在路由规则里加一个“主叫号码变换”步骤,否则中继会回403或486。
简化理解就是一张局向表:
| 被叫前缀(1~/00/011) | 目的局向 | 号码变换 |
|---|---|---|
| 00+国家码+有效号 | 国际关口A | 去00,按对端要求加或不加 |
| 011+北美号码 | 北美中继 | 011改为1 |
| 00+特定国家码 | 国际关口B | 专门经转某些地区 |
2.3 先确认业务形态,再选技术路线
不是所有“打通国际长途”的需求都需要碰5G核心网。做方案前,我会先问三个问题,你也能用它们筛掉一堆不合适的方案:
- 是要给个人终端开通国际长途权限吗?如果是,必须由运营商在HSS/UDM签约数据里开放业务,并配置IMS路由。你想自己搭一套,几乎不可能。
- 是企业总机/呼叫中心,员工用5G手机打电话?这种情况通常不需要直接和IMS交互,企业侧软交换通过SIP中继对接国际供应商即可,5G网络只是接入层。这也是最常见、最容易自己控制成本的方式。
- 是运营商或虚拟运营商之间互通?那要走IPX网络,用SIP-I/T协议互联,背后是对等结算和互联质量保障。
三者成本差异巨大。个人终端按分钟计费,企业SIP中继通常有月租+套餐分钟,运营商IPX则是双边结算。如果只是想让某个5G物联网终端能呼出国际号码,直接找运营商开一个“国际长途权限”套餐就够了;如果企业有几十个分机,那中继方案更灵活。选错路线,后面的配置难度会差一个数量级。
这里顺便解释一个常见误解:有人觉得“在5G核心网里加个路由,国际长途就通了”。实际上5G核心网本身不处理号码业务,号码分析在IMS。即使你最终用SIP中继,也要让终端先把呼叫给软交换,软交换再做出口路由。5G网络的价值是提供稳定、低时延、可区分业务优先级的通道,而不是替代业务平台。
3. 打通国际长途的三种主流落地路径及其适用场景
3.1 个人终端:IMS签约、VoLTE国际漫游和呼叫回源
个人终端路径,最典型的场景是某个行业用户拿着5G手机出国出差,要在漫游地打回中国或拨打第三国。这时语音漫游有两种模式:归属路由(S8HR)和本地旁路(LBO)。
S8HR模式下,漫游地网络只提供无线接入,语音呼叫通过IPX送回归属地IMS,归属地IMS再根据签约路由到国际长途局。好处是费率、权限和录音都在归属网络管控下,符合很多企业的“统一通信”需求。坏处是语音路径长,时延增加约50~150ms,遇到国际链路波动会影响体验。
LBO模式下,漫游地网络直接帮用户接续国际呼叫,不送回归属地。这种模式时延低,但归属网络难以控制。一般运营商只在漫游合作条款里允许LBO时启用,否则默认走S8HR。
对于企业内部系统,如果用的是5G专网+定制终端,还需要确保终端IMS参数正确。比如APN需要支持“ims”这个专有APN,并开启“IMS 语音”开关。很多定制终端为了省电默认关闭VoLTE/VoNR,导致根本无法注册到IMS。这时候信号显示“5G”,但通话会直接回到2G/3G,在国际漫游地甚至无服务。排查优先级很高。
3.2 企业SIP中继:自己控制路由,成本与灵活性平衡
企业要自己掌握路由和号码策略,最简单的落地方式就是SIP中继。典型架构是:5G手机经企业Wi-Fi/固网或运营商专网接入软交换,软交换注册或对接国际中继供应商。这里5G手机不是直接打IMS,而是通过SIP话机/PBX功能把呼叫交给软交换。
在做这个方案时,需要跟供应商确认以下参数:
- 中继IP和端口,以及传输协议。国内常用UDP,海外有些平台主推TLS,要提前确认。
- 编解码列表。G.711是最稳的,G.729省带宽,但很多上游平台转码成本高,会限制并发。
- DTMF协议。大部分平台要求RFC2833,但少数老平台只支持带内DTMF,发传真时更明显。
- 号码格式要求。有的平台要求被叫去掉加号,有的要求加号,有的要求国家码前补0。
- 注册方式。推荐用IP白名单,不用SIP注册,减少认证失败带来的不确定性。
中继的容量也要设计。一般供应商会给你“通道数”和“CPS(每秒新建呼叫)”。比如10并发,意思是同时最多10路通话;CPS=5,表示每秒最多发起5个呼叫。如果你的呼叫中心大量短通话,并发不高但每秒钟呼叫次数很高,就会触发CPS限流。解决方案是在软交换的拨号方案里增加呼叫速率控制,避免脉冲式呼叫。
SIP中继适合绝大多数中大型企业,尤其是已经部署了IPPBX或软交换的场景。它能够和5G专网共存:终端通过5G CPE接入企业内网,软交换通过互联网/专线接中继,整个链路不依赖运营商的特殊开放。如果需要对呼叫录音、IVR或者方控,也都由软交换完成,扩展性好。
3.3 运营商/虚拟运营商:IPX互联和SIP-I
运营商级国际长途和上面两种是不同体系。你要加入IPX网络,在连到全球对端的IP交换中心。IPX负责路由、QoS和隐私合规,而不是简单地两条SIP中继互指。实现上,一般在网络边界放置IBCF和TrGW。
IBCF负责信令面互通和业务控制,比如隐藏网络拓扑、做域间路由;TrGW负责媒体面,做NAT穿越和IP端口转换。协议上常用SIP-I,也就是在SIP消息里封装ISUP参数,保留端到端的计费和主被叫信息。很多对端运营商不接受裸SIP,也不接受非E.164格式的URI,所以在互联配置时需要严格遵循规范。
如果你是虚拟运营商或二级批发商,没能力直接对接IPX,那就找上游大型运营商或专门做国际接入的公司买“转接分钟”。此时你仍然需要做SIP-I转换吗?不一定。如果上游给你一个标准SIP中继接口,你还是走普通SIP trunk。但要知道,当对方抱怨“呼叫没有Charging Vector”或“没有ISUP转换”,说明你们之间需要一个边界网元做协议翻译,而不是在软交换里硬改SIP头。
第3章的核心判断是:个人卡找运营商,企业分机找中继,运营商找IPX。绝大多数读者落在第二个区间。
4. 最小可复现:用SIP中继把5G语音送到国际出口
4.1 准备软交换与中继参数:先找上游确认5件事
如果你决定走企业SIP中继路线,最小可复现环境通常需要一台安装FreeSWITCH的Linux主机、一个国际中继供应商测试账号。这里说的“最小”,是指把5G无线网络先放到一边,用SIP话机或模拟终端验证路由和号码格式,等这条链路通了再叠加5G接入。
开始前,向上游索要并记录以下参数:
- 对端IP和端口。通常是一个公网IP,端口5060。
- 传输协议。UDP还是TCP?要不要TLS。
- 注册配置。注册用户名(如果不采用IP白名单)。
- 被叫号码格式。是纯数字、带00还是带+。
- 主叫号码透传规则。上游是否校验主叫白名单,是否需要改成+86。
拿到这些后,不要着急配软交换,先用简单的SIP OPTIONS测试网络连通性,可以用sipsak:
sipsak -s sip:test@203.0.113.10 -H 203.0.113.10 -v如果收到“200 OK”,说明IP白名单和网络层没问题。这一步能省掉后期一半的排障时间。注意,203.0.113.10是文档保留示例地址,实际用供应商分配的地址替换。
4.2 配置FreeSWITCH网关和拨号方案
在FreeSWITCH里定义一个中继网关,写入conf/sip_profiles/external/gateway-intl.xml:
<gateway name="intl_trunk"> <!-- 上游中继IP和端口,按供应商实际调整 --> <param name="proxy" value="203.0.113.10:5060"/> <!-- 使用IP白名单,不注册 --> <param name="register" value="false"/> <!-- 从From头透传主叫号码 --> <param name="caller-id-in-from" value="true"/> <!-- 允许地址更新,配合NAT穿透 --> <param name="extension-in-contact" value="true"/> </gateway>逻辑说明:proxy决定INVITE被送到哪里;register=false关闭SIP注册,很多国际中继只认IP白名单,注册反而多一个401认证流程;caller-id-in-from=true让上层看到你的主叫格式,但部分供应商要求必须用P-Asserted-Identity,需要再配合全局其他配置。
然后加拨号方案,让所有00开头的号码走这个网关:
<extension name="intl_out"> <condition field="destination_number" expression="^00(\d+)$"> <!-- 去掉00前缀,将剩余数字透传给中继 --> <action application="set" data="effective_caller_id_number=${caller_id_number}"/> <action application="bridge" data="sofia/gateway/intl_trunk/$1"/> </condition> </extension>这里有三个细节值得展开。第一,$1是正则中括号捕获的完整数字,如果你的上游要求带00,就把bridge那行改成data="sofia/gateway/intl_trunk/00${1}"。第二,如果上游要求主叫变更为+86,可以在set前面再加一行:
<action application="set" data="effective_caller_id_number=+86${caller_id_number:2}"/>这是把原始主叫的前两位(通常是86或01)替换为+86。具体按运营商规范,不要盲目加。第三,如果你有多个中继做负载均衡,可以设置<param name="retries" value="2">或者用outbound代理组。
改完配置后,在控制台执行:
sofia profile external rescan或者重启FreeSWITCH。然后用sofia status gateway intl_trunk确认网关能看到SIP proxy地址。
4.3 拨测与信令抓包
在拨号方案生效后,用一个SIP话机或FreeSWITCH自带测试拨号。更简单的方法是在另一台机器上用SIP话机注册到软交换,然后拨00 1 4085550100。同时开启抓包:
sngrep -d eth0 host 203.0.113.10 and port 5060 -c-d指定网卡,host和port过滤出与中继之间的消息。拨号后,重点看第一个往外发的INVITE:
- Request-URI是否为中继要求的格式。
- From头主叫是否完整。
- Content-Length和SDP是否正常。
- 上游返回的响应是100/180/200还是4xx/5xx。
一个常见翻车现场是上游回“488 Not Acceptable Here”,说明SDP里的编解码与中继不重合。你需要在网关或dialplan里强制编解码。可以在dialplan里这样设置:
<action application="set" data="absolute_codec_string=G711a,PCMU"/>但一般建议在sip profile的codec-prefs和codec-string中调整。
如果回“403 Forbidden”,先检查IP白名单;如果找不到原因,用tcpdump抓看看是否被NAT改了端口。这里的经验是:不要一开始就怀疑5G网络,先把中继段跑通。等中继稳定了,再通过5G CPE、SBC接入,你会发现故障位置往往在接入侧。
5. 避坑:5G国际长途打不通的5个排查点
5.1 现象:5G手机一拨国际长途就立刻返回忙音
原因:IMS或MSC的号码分析表里没有“00”前缀的局向。很多企业做了5G数据业务升级,但语音呼叫分析还是沿用本地路由表。EPS Fallback后呼叫回到MSC,MSC看到00,发现无局向,直接释放。
解决:分别在IMS号码分析表和MSC号码分析表中增加“00”前缀,并指定国际出口局向,同时给主叫签约“长途/国际长途”权限。如果使用VoNR,还要检查UDM签约数据里的“基本业务”是否包含“所有电话业务”。
5.2 现象:国际长途能通但通话品质差,像隔了一层
原因:很可能是5G侧的语音专用承载没有建立,RTP包进入默认数据承载。比如5G终端注册了IMS,但网络侧没有下发5QI=1的QoS规则;或者上游中继用了G.729,而软交换用的是G.711,双方在转码时丢掉了部分媒体信息。
解决:先抓RTP流,看丢包和抖动。如果是承载问题,在PCF/AMF侧检查语音QoS规则,确认5QI=1的GBR和ARP配置正确。如果是编解码错位,在FreeSWITCH的网关配置里把编解码顺序调整为与上游一致,并禁止不必要的转码。
5.3 现象:呼叫建立时有单通,拨通后对方听不到你的声音
原因:常见于NAT/防火墙把SDP里的IP或端口改了。5G网络的CPE和企业防火墙都容易做SIP ALG,尤其是一些老旧防火墙,会把媒体面的私网IP替换成公网IP,但端口映射错误,导致RTP回不来。
解决:在防火墙上关闭SIP ALG;在FreeSWITCH中开启NAT穿透,配置apply-nat-across-ping、ext-rtp-ip等参数。对于5G CPE,尽量设置为“桥接模式”,不要让CPE做SIP代理。如果还不行,在边界加一台SBC做媒体代理。
5.4 现象:主叫显示号码被遮蔽,变为匿名或未知
原因:中继供应商在接续时屏蔽了主叫,或者你的SIP消息没有携带P-Asserted-Identity。很多国际中继校验主叫是否在TA(归属地)号段内,不在就自动隐藏。
解决:确认网关配置里caller-id-in-from是否开启;在dialplan中显式设置effective_caller_id_number。如果上游要求,用add-header添加P-Asserted-Identity头。需要说明的是,私自伪造主叫在大多数地区是非法的,你要确保主叫号码来自真实签约用户。
5.5 现象:平时正常,某段时间国际呼叫大规模失败,重启后恢复
原因:通常是上游CPS限流、并发超限,或者被反欺诈策略误杀。我们之前有一个自动化拨测脚本,每5秒拨一次,结果触发了中继风控,整批号码被封。脚本本身没问题,但缺少呼叫间隔控制。
解决:在拨号方案侧增加呼叫限速,比如在软交换上采用limit接口控制并发,或者在呼叫前置验证“令牌桶”。同时把单用户呼叫频率限制在每分钟1~2次,拨测时换多个测试号轮询。如果已经触发了,联系上游解封,并临时把CPS调低。
排查顺序上,我推荐“先中继后5G”:先用普通SIP话机发起国际呼叫,确认中继正常,再用5G终端接入。一旦中继正常而5G不通,就要去查IMS签约、EPS Fallback策略和专网路由。很多血泪经验表明,最容易出问题的是中间连接处。
6. 验证与优化:从呼叫成功率到回退策略
6.1 拨测脚本与验收指标
当链路打通后,不要急着大量放量。先用最小集验证三项指标:呼叫建立成功率、平均拨号延迟和掉话率。我习惯用一个本地脚本或SIPp场景反复拨测,记录INVITE的2xx响应和BYE原因码。如果测试环境没有SIPp,可以从软交换的CDR中统计:
grep -E "intl_trunk" /var/log/freeswitch/cdr.csv | awk -F',' '{print $4}' | sort | uniq -c这段只是示意,具体字段以你的CDR模板为准。关键是把每次呼叫的应答状态、时长和上游响应码留档。
常用的可验收指标可以这样设:
| 指标 | 目标参考值 | 检查方式 |
|---|---|---|
| 呼叫建立成功率 | >95% | 统计INVITE到183/180/200的比例 |
| PDD(拨号延迟) | <7秒 | 从呼叫建立到被叫振铃 |
| 掉话率 | <0.5% | 统计BYE原因码非正常释放 |
6.2 回退策略:VoNR优先还是EPS Fallback优先
关于5G网络侧,要做两件事:一是验证语音是否走了正确的承载。在终端或核心网测上确认通话时建立的是5QI=1而非默认承载。二是决定是始终启用VoNR还是优先EPS Fallback。我的建议是商用初期以EPS Fallback为主,因为LTE语音网络经受了多年考验;VoNR在覆盖连续性和互操作尚未完全优化时,容易在5G到4G切换时掉话。等网络侧把这些调优好,再把VoNR作为默认策略。
日常维护中,保留网关配置的快照,出问题先用sngrep保存pcap,再用CDR查趋势。曾经一位同事发现5G国际长途频繁断线,查了三天核心网,最后定位到是防火墙SIP ALG。从那以后,我每次新接手一个5G语音项目,第一件事就是检查边界设备有没有关闭SIP ALG。这是最便宜却最有效的优化之一。希望这些经验能帮到你。
本文还有配套的精品资源,点击获取