4G/LTE - APN的简单理解(lte网络apn)
wptr33 2025-02-04 16:27 20 浏览
APN(Access Point Name) in LTE
APN 意指接入点名称。此乃一种网关(抑或锚定点),您的 UE(移动电话)与之相连,便能接入核心网络,从而获取多数数据服务。于本页之内,探讨 APN 的实际事宜。
How APN is assinged ?
APN如何分配给UE?基本上它是由网络根据 UE 的请求进行分配的。所以它是UE设置(用于请求)和网络配置的组合。由于双方都参与 APN 分配,因此该 APN 分配经常会导致各种问题,特别是对于测试 UE 而言。 (对于在实际网络中使用的商用手机,您不会发现太多问题,因为它们在您购买时已预先配置为完全匹配网络要求,但在许多测试情况下,您经常会看到确切的 APN 要求的情况UE 和网络未知。有些 UE 对测试设备的 APN 分配不匹配非常灵活/容忍,但有些 UE 对测试设备的 APN 分配非常挑剔,当网络分配与网络分配不完全匹配时,会表现出各种奇怪的行为。它正在期待。
因此,当您测试 UE (DUT) 进行大多数数据服务相关测试(例如,IP 吞吐量、浏览、IMS 等)时,您必须考虑 APN 分配的协议方面和 UE 侧 APN 设置。
Protocol aspect of APN assignment.
APN 分配协议的典型过程非常简单。它分为以下两个步骤。
- i) UE -> NW : PDN Connectivity Request // UE通常请求具有特定APN(或没有指定APN)的PDN
- ii) UE <- NW : Activate Default EPS Bearer Context Request // 网络始终指定特定的 APN
实际上,这两条 NAS 信息被嵌入到不同的 RRC 信息中。通常,您可能会看到以下两种携带这些 NAS 信息的 RRC 信息。
Case 1 : Assignment of default APN
在分配默认 APN 的情况下,通常涉及以下两个步骤。
i) RRC : RRC Connection Setup Complete + NAS : Attach Request + ESM : PDN Connectivity Request
ii) RRC : RRC Connection Reconfiguration + NAS : Attach Accept + NAS : Activate Default EPS Bearer Context Req
Case 2 : Assignment of additional APN
如果在默认 APN 后分配附加 APN,通常涉及以下两个步骤。
- i) RRC : ulinformationTransfer + ESM : PDN Connectivity Request
- ii) RRC : RRC Connection Reconfiguration + NAS : Activate Default EPS Bearer Context Req
APN in S1AP
以下是一些通过 S1AP 携带 APN 信息的消息示例。
UE Setting Aspect of APN Assignement
UE 上有特殊设置,您可以在其中添加或删除(定义)您自己的 APN。如何在 UE 端定义这些 APN 将极大地改变 UE 的行为。因此,在测试时,配置UE侧APN设置以匹配设备APN设置非常重要。但问题是..取决于UE,有些UE让您完全控制APN设置,但有些UE根本不给您任何控制或给您有限的控制能力。现代的商用手机一般都会根据插入的卡来自动匹配APN信息。
Why sometimes UE does not specify APN name in PDN Connectivity Request ?
Case 1 : UE不想在建立安全性之前发送这些信息
我认为这是最常见的情况,并且在默认承载设置中最常发生。 PDN 请求承载在“安全模式命令”过程之前发生的附加请求中。也就是说,UE不希望在没有任何安全保护的情况下发送这种信息。在这种情况下,预计 UE 发送 ESM 信息传输 transfer flat = 1的 PDN 连接请求。然后网络将在安全过程完成后发送 ESM 信息请求,然后 UE 将在 ESM 信息响应消息中通知它想要使用的 APN 名称。
NOTE : ESM信息传输标志的含义在3GPP 24.301-9.9.4.5中规定如下 :
- ESM信息传输标志信息元素的目的是指示ESM信息(即,协议配置选项或APN或两者)是否要被安全保护地传输。
值 0:不需要安全保护的 ESM 信息传输
值 1:需要安全保护的 ESM 信息传输
Case 2 : 意味着 UE 不关心网络分配哪个 APN
我不确定 3GPP 是否明确允许这样做,但我看到很多情况下,当 UE 未在 PDN 请求中指定 APN 名称时,UE 接受网络分配的任何 APN。
Case 3 : UE的BUG
我看到一些 UE 在 PDN 请求中省略 APN 名称而不设置 ESM 信息传输标志的情况。在这种情况下,某些网络可能会拒绝 PDN 请求。
Common Issues and Challenges for APN related issues
APN的最大问题之一是3GPP中没有明确规定严格的规则、要求。许多详细行为取决于 UE 协议栈的实现和运营商的要求。最重要的因素是“UE侧期望和NW侧期望之间的匹配”。最大的问题是很难找到掌握这方面明确信息的合适人选。就我而言,我遇到的大多数问题都是由负责应用层测试(例如 IP 吞吐量、IMS 等)的 UE 制造商/工程师解决的,以下是最终的常见情况。
步骤 i) 我认为我们需要清楚了解 UE 端 APN 处理实现,您需要就此问题与您的无线协议工程师进行沟通。
步骤 ii)(经过很长时间(至少几天)才能从无线协议工程师那里获得任何反馈)。此协议实现由芯片组制造商实现。我们无法控制它。我们需要与芯片组制造商沟通以获取清晰的信息。
步骤 iii)(经过更长的时间才能从芯片组供应商那里获得任何回复)。芯片组制造商表示 APN 配置因每个运营商(网络运营商)而异。如果您从运营商那里获得清晰的问题描述,我们可能会修改我们的堆栈以解决问题。
步骤 iv)(UE 制造商与运营商沟通,也需要很长时间才能获得任何反馈)。运营商说“我们在我们的协议中指定我们需要这种和这种类型的 APN,您必须让它以任何方式工作。如果您在详细的协议层中遇到任何问题,那是您的问题。我们在协议序列方面没有任何明确的定义”。
在步骤 iv) 之后,返回到步骤 i),经过几次迭代但没有取得任何生产性进展后,验证工程师通常会放弃任何进一步的技术沟通,并尝试依赖如下临时方法。
方法1)不断改变UE侧APN设置参数,直至与特定测试设备配合使用
方法 2) 不断更改测试设备参数,直到其适用于特定的 UE 设置
有时,此种临时之法诚然奏效,然而其决然无法成为尽善尽美的解决之策。有人采用方法 1,有人采用方法 2。故而,即便运用相同的设备对同一个 UE 进行测试,倘若由两个不同之人执行测试,最终于 UE 和设备之上的配置亦会全然相异。另外,在某些 UE 当中,鉴于设备之限制,您仅能运用方法 1,而在其他一些情形之下,由于 UE 侧的限制,您仅可使用方法 2。因而,它们皆难以成为通用的解决之方。实言相告,我觉得此问题不会存有通用的解决之策,除非 3GPP 就此提出明晰的要求。当下,最为合理的举措乃是创建一个自身的明晰要求与检查清单,并协调每一个人(芯片组制造商、UE 制造商以及运营商)遵循检查清单中所定义的规则。就我个人而言,我认为运营商(网络运营商)最具执行此种举措的能力。
Check List
许多 APN 相关问题(例如 APN 名称)没有对错之分。这只是一个特定的规则(由开发人员或网络运营商设置)并严格遵守该规则的问题。因此,本节中的检查清单会询问您“您自己有这样或那样的规则吗?”
1. UE在什么情况下在PDN连接请求消息中设置APN名称?正如我在 APN 分配的协议方面提到的,在某些情况下,UE 指定 APN 名称,而在某些情况下,UE 不指定它。问题是“在您的 UE 中,何时在 PDN 连接请求中指定 APN 名称?”。
2. 当 UE 未在其 PDN 连接请求中指定 APN 名称时,UE 在激活默认 EPS 承载上下文请求中期望从网络获得什么 APN 名称?任何 APN 名称都可以吗?或者它是否需要任何特定的 APN 名称?
3. 如果 UE 在激活默认 EPS 承载上下文请求中期望来自网络的任何特定 APN 名称,则特定 APN 名称从何而来?是网络运营商的要求吗?或者是您在 UE APN 设置中指定的内容?
4. 如果 UE 发送 IP 类型 = IPv4v6 的 PDN 请求,并且网络在激活默认 EPS 承载上下文请求中分配 IPv4v6,但 RS(路由器请求)/RA(路由器广告)过程失败,UE 应如何反应?
希望 UE 放弃 IPv6 设置过程并仅坚持使用 IPv4,但我看到一些 UE 重试 PDN 请求过程,直到 RS/RA 成功。
注意:与APN名称问题不同,3GPP中有相对明确的要求。有关此问题的更多信息,请参阅 ESM 原因部分。
相关推荐
- redis的八种使用场景
-
前言:redis是我们工作开发中,经常要打交道的,下面对redis的使用场景做总结介绍也是对redis举报的功能做梳理。缓存Redis最常见的用途是作为缓存,用于加速应用程序的响应速度。...
- 基于Redis的3种分布式ID生成策略
-
在分布式系统设计中,全局唯一ID是一个基础而关键的组件。随着业务规模扩大和系统架构向微服务演进,传统的单机自增ID已无法满足需求。高并发、高可用的分布式ID生成方案成为构建可靠分布式系统的必要条件。R...
- 基于OpenWrt系统路由器的模式切换与网页设计
-
摘要:目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户、提升服务的目标。传统路由器自带的Luci界面提供了工厂模式的Web界面,用户可通过该界面配置路...
- 这篇文章教你看明白 nginx-ingress 控制器
-
主机nginx一般nginx做主机反向代理(网关)有以下配置...
- 如何用redis实现注册中心
-
一句话总结使用Redis实现注册中心:服务注册...
- 爱可可老师24小时热门分享(2020.5.10)
-
No1.看自己以前写的代码是种什么体验?No2.DooM-chip!国外网友SylvainLefebvre自制的无CPU、无操作码、无指令计数器...No3.我认为CS学位可以更好,如...
- Apportable:拯救程序员,IOS一秒变安卓
-
摘要:还在为了跨平台使用cocos2d-x吗,拯救objc程序员的奇葩来了,ApportableSDK:FreeAndroidsupportforcocos2d-iPhone。App...
- JAVA实现超买超卖方案汇总,那个最适合你,一篇文章彻底讲透
-
以下是几种Java实现超买超卖问题的核心解决方案及代码示例,针对高并发场景下的库存扣减问题:方案一:Redis原子操作+Lua脚本(推荐)//使用Redis+Lua保证原子性publicbo...
- 3月26日更新 快速施法自动施法可独立设置
-
2016年3月26日DOTA2有一个79.6MB的更新主要是针对自动施法和快速施法的调整本来内容不多不少朋友都有自动施法和快速施法的困扰英文更新日志一些视觉BUG修复就不翻译了主要翻译自动施...
- Redis 是如何提供服务的
-
在刚刚接触Redis的时候,最想要知道的是一个’setnameJhon’命令到达Redis服务器的时候,它是如何返回’OK’的?里面命令处理的流程如何,具体细节怎么样?你一定有问过自己...
- lua _G、_VERSION使用
-
到这里我们已经把lua基础库中的函数介绍完了,除了函数外基础库中还有两个常量,一个是_G,另一个是_VERSION。_G是基础库本身,指向自己,这个变量很有意思,可以无限引用自己,最后得到的还是自己,...
- China's top diplomat to chair third China-Pacific Island countries foreign ministers' meeting
-
BEIJING,May21(Xinhua)--ChineseForeignMinisterWangYi,alsoamemberofthePoliticalBureau...
- 移动工作交流工具Lua推出Insights数据分析产品
-
Lua是一个适用于各种职业人士的移动交流平台,它在今天推出了一项叫做Insights的全新功能。Insights是一个数据平台,客户可以在上面实时看到员工之间的交流情况,并分析这些情况对公司发展的影响...
- Redis 7新武器:用Redis Stack实现向量搜索的极限压测
-
当传统关系型数据库还在为向量相似度搜索的性能挣扎时,Redis7的RedisStack...
- Nginx/OpenResty详解,Nginx Lua编程,重定向与内部子请求
-
重定向与内部子请求Nginx的rewrite指令不仅可以在Nginx内部的server、location之间进行跳转,还可以进行外部链接的重定向。通过ngx_lua模块的Lua函数除了能实现Nginx...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)