安卓的多PDN连接
来源:互联网 发布:开源股票软件 python 编辑:程序博客网 时间:2024/05/24 02:53
PDN:公用数据网 Public Data Network
PDN连接过程是手机接入分组数据网的一个重要过程,其目的是在UE和分组数据网络间建立一个默认承载
PDP:分组数据协议 Packet Data Protocol
PDP上下文:PDP上下文是在MS和GSN节 点中存储的与SM有关的信息。这些信息也可以分为预订信息和位置信息两类。
静态和动态PDP地址:PDP地址是GPRS用户的网络层地址,与标准的网络层地址(如:IPv4地址、IPv6地址、X. 121地址)建立了临时或永久性的关联。
PDP附着(PDP-Attach):在PDP激活、PDP更新、PDP去激活之前的操作是PDP附着。PDP附着是让终端登录到PS域里,就是登记到SGSN/PDSN的数据库,同时在HLR里进行PS域的location update,此时是control-plane, 还没有流量,相当于拨号成功。
PDP激活(PDP-activation)就是开始进行数据流通了,也就是开始打开网页上网了,此时有userplane流量了。
如果是主从PDP的话,就只有1个地址(同一个PDP上下文)。如果都是主PDP的话,那就有多个地址。(多个PDP上下文)
PDP上下文标准解释不是很清楚,通俗点就是比方说你要用手机上手机网站,那你会用CMWAP这个PDP上下文,而当你把手机当猫用来连接互联网的时候,用的就是CMNET。大概意思就是为了满足不同需求,会分配给你不同的IP地址来接入不同的业务
主PDP上下文(Primary PDP):他们可以连接到不同的PDN;
从PDP上下文(Secondary PDP); 他们提供了到相同PDN的连接,但是具有不同的QOS。
一个Secondary PDP上下文总是和一个Primary PDP上下文关联的。PDP地址和接入点AP都是和Primary上下文一样的。因此Primary和关联的Secondary PDP上下文一起提供了到相同PDN的连接,但区别是具有不同的承诺QOS。
一个Primary PDP上下文可能有多个分配的Secondary上下文。
Primary PDP上下文必须在关联的Secondary上下文激活之前激活。任何的Secondary PDP上下文可以在保持的Primary上下文处于active的状态下进行激活。如果一个Primary PDP上下文去激活了,那也将去激活所有分配关联的Secondary PDP上下文。任何active的primary或secondary PDP上下文的QOS都可以由MS或网络侧发起的PDP context modification流程来修改。
APN
运营商
IP
承载
多连接
QCI:QoS Class Identifier
QCI (QoS Class Identifier)是一个标度值,用于衡量特定的提供给SDF(服务数据流)的包转发行为(如丢包率,包延迟预算),它同时应用于GBR和Non-GBR承载,用于指定访问节点内定义的控制承载级分组转发方式(如调度权重、接纳门限、队列管理门限、链路层协议配置等),这些都由运营商预先配置到接入网节点中
根据QoS的不同, 承载(Bearer)可以划分为两大类: GBR(Guranteed Bit Rate) 和 Non-GBR
一个连接就是建立到PDN的一个连接
建立到PDN的一个连接有可能建立多个承载
一个到PDN的连接对应一个主PDP上下文
一个承载对应一个PDP上下文
一个PDP上下文也对应一个IP地址
一个PDP地址就是分配的IP地址
一个PDP上下文也对应一个网络运营商
一个PDP上下文对应一种APN
一个PDP上下文携带有QOS profile信息
多连接就是在手机上建立多个并行的PS连接
即建立多个到PDN的连接
多个到PDN的连接就是多个主PDP和更多个从PDP
多个到PDN的连接意味着更多个承载和更多个QOS profile
但是多个PDN连接只对应多个PDP地址,多个IP地址,一个运营商(只能注册一个RAT下),多个APN
连接到不同的PDN网络对应的是不同的PS业务,因此不同的PDN对应不同的APN类型,即对应不同的APN。
浏览网页和发彩信属于不同的业务,如果不支持多PDN连接就会按照APN优先级去活低优先级的连接,重新建立高优先级的连接。如果是支持多PDN,则可同时进行两种业务。
log如下:
常见的PDP激活失败原因,即无法建立成功PDN连接的原因:
missing or unknown APN:由于未知APN导致会话激活失败
unknown PDP address or PDP type: 未知PDP address or PDP type导致会话激活失败
user authentication failed:用户鉴权失败导致会话激活失败
service option not supported:服务不支持导致会话激活失败的次数
requested service option not subscribed:请求的服务未签约导致会话激活
PDN相关的NV配置:
66008 modem/data/3gpp/lteps/auto_connect_def_pdn Auto Connect Def PDN
71595 modem/data/3gpp/lteps/attach_fallback_ip_type Specify Attach PDN dual IP Fall back IP type
67334 modem/data/3gpp/ignore_last_pdn_ia_timer Ignore Inactivity timer for last PDN
67248 data/3gpp/ds_3gpp_multi_pdn_same_apn 3GPP Multi PDN Same APN
70260 modem/data/3gpp/lteps/allow_def_lte_pdn_teardown Allow def PDN Teardown
70334 modem/data/3gpp/ps/remove_unused_pdn Remove unused pdn
71517 modem/data/3gpp/lteps/pdn_conn_limit_handling Enable/Disable PDN Conn Limit Handling
71520 modem/data/3gpp/global_throttling Enable/Disable PDP, PDN and service request throttling
71541 modem/data/3gpp/umts/enable_multi_pdn_dun Enable/Disable Multi-PDN DUN
72560 modem/data/3gpp/ps/reg_pdn_throttling Enable/Disable Regular PDN Throttling
73591 modem/data/3gpp/ps/enable_pdn_throttling_per_rat 3GPP Ignore Data Settings
另外efs中还有许多针对3gpp2的pdn的配置,如最大失败个数、鉴权等级等等。
建立数据连接时对于是否支持多连接(多PDN)的判定:
private boolean isOnlySingleDcAllowed(int rilRadioTech) {
int[] singleDcRats = mPhone.getContext().getResources().getIntArray(
com.android.internal.R.array.config_onlySingleDcAllowed);
boolean onlySingleDcAllowed = false;
if (Build.IS_DEBUGGABLE &&
SystemProperties.getBoolean("persist.telephony.test.singleDc", false)) {
onlySingleDcAllowed = true;
}
if (singleDcRats != null) {
for (int i=0; i < singleDcRats.length && onlySingleDcAllowed == false; i++) {
if (rilRadioTech == singleDcRats[i]) onlySingleDcAllowed = true;
}
}
if (DBG) log("isOnlySingleDcAllowed(" + rilRadioTech + "): " + onlySingleDcAllowed);
return onlySingleDcAllowed;
}
从config_onlySingleDcAllowed的配置来看,以下RAT是只支持单连接的:
<integer-array name="config_onlySingleDcAllowed">
<item>4</item> <!-- IS95A -->
<item>5</item> <!-- IS95B -->
<item>6</item> <!-- 1xRTT -->
<item>7</item> <!-- EVDO_0 -->
<item>8</item> <!-- EVDO_A -->
<item>12</item> <!-- EVDO_B -->
</integer-array>
在建立数据连接时,如果
isOnlySingleDcAllowed判定为true,即只支持单连接,则会判断是否有更高优先级的APN已经激活,如果有则不会去建立本次请求的数据连接,如果没有则会断开当前已经存在的连接再去请求本次数据连接。
如果判定为false,即可支持多个连接,则直接去建立新的连接。在建立数据的过程中判断如下:
//判断是否是只支持单pdn连接,即DataConnection对象只能有一个存在,判断依据为radioTech
if (isOnlySingleDcAllowed(radioTech)) {
//在只支持单连接的情况下,如果更高优先级的apnContext处于激活态,比如mms正在进行,default拨号将会被无视
if (isHigherPriorityApnContextActive(apnContext)) {
return false;
}
//说明当前请求apnContext是高优先级的,需要断开低优先级的连接
if (cleanUpAllConnections(true, Phone.REASON_SINGLE_PDN_ARBITRATION)) {
return false;
}
}
以上纯属个人学习总结,如有不对的地方,欢迎讨论指正。
PDN连接过程是手机接入分组数据网的一个重要过程,其目的是在UE和分组数据网络间建立一个默认承载
PDP:分组数据协议 Packet Data Protocol
PDP上下文:PDP上下文是在MS和GSN节 点中存储的与SM有关的信息。这些信息也可以分为预订信息和位置信息两类。
静态和动态PDP地址:PDP地址是GPRS用户的网络层地址,与标准的网络层地址(如:IPv4地址、IPv6地址、X. 121地址)建立了临时或永久性的关联。
PDP附着(PDP-Attach):在PDP激活、PDP更新、PDP去激活之前的操作是PDP附着。PDP附着是让终端登录到PS域里,就是登记到SGSN/PDSN的数据库,同时在HLR里进行PS域的location update,此时是control-plane, 还没有流量,相当于拨号成功。
PDP激活(PDP-activation)就是开始进行数据流通了,也就是开始打开网页上网了,此时有userplane流量了。
如果是主从PDP的话,就只有1个地址(同一个PDP上下文)。如果都是主PDP的话,那就有多个地址。(多个PDP上下文)
PDP上下文标准解释不是很清楚,通俗点就是比方说你要用手机上手机网站,那你会用CMWAP这个PDP上下文,而当你把手机当猫用来连接互联网的时候,用的就是CMNET。大概意思就是为了满足不同需求,会分配给你不同的IP地址来接入不同的业务
主PDP上下文(Primary PDP):他们可以连接到不同的PDN;
从PDP上下文(Secondary PDP); 他们提供了到相同PDN的连接,但是具有不同的QOS。
一个Secondary PDP上下文总是和一个Primary PDP上下文关联的。PDP地址和接入点AP都是和Primary上下文一样的。因此Primary和关联的Secondary PDP上下文一起提供了到相同PDN的连接,但区别是具有不同的承诺QOS。
一个Primary PDP上下文可能有多个分配的Secondary上下文。
Primary PDP上下文必须在关联的Secondary上下文激活之前激活。任何的Secondary PDP上下文可以在保持的Primary上下文处于active的状态下进行激活。如果一个Primary PDP上下文去激活了,那也将去激活所有分配关联的Secondary PDP上下文。任何active的primary或secondary PDP上下文的QOS都可以由MS或网络侧发起的PDP context modification流程来修改。
APN
运营商
IP
承载
多连接
QCI:QoS Class Identifier
QCI (QoS Class Identifier)是一个标度值,用于衡量特定的提供给SDF(服务数据流)的包转发行为(如丢包率,包延迟预算),它同时应用于GBR和Non-GBR承载,用于指定访问节点内定义的控制承载级分组转发方式(如调度权重、接纳门限、队列管理门限、链路层协议配置等),这些都由运营商预先配置到接入网节点中
根据QoS的不同, 承载(Bearer)可以划分为两大类: GBR(Guranteed Bit Rate) 和 Non-GBR
一个连接就是建立到PDN的一个连接
建立到PDN的一个连接有可能建立多个承载
一个到PDN的连接对应一个主PDP上下文
一个承载对应一个PDP上下文
一个PDP上下文也对应一个IP地址
一个PDP地址就是分配的IP地址
一个PDP上下文也对应一个网络运营商
一个PDP上下文对应一种APN
一个PDP上下文携带有QOS profile信息
多连接就是在手机上建立多个并行的PS连接
即建立多个到PDN的连接
多个到PDN的连接就是多个主PDP和更多个从PDP
多个到PDN的连接意味着更多个承载和更多个QOS profile
但是多个PDN连接只对应多个PDP地址,多个IP地址,一个运营商(只能注册一个RAT下),多个APN
连接到不同的PDN网络对应的是不同的PS业务,因此不同的PDN对应不同的APN类型,即对应不同的APN。
浏览网页和发彩信属于不同的业务,如果不支持多PDN连接就会按照APN优先级去活低优先级的连接,重新建立高优先级的连接。如果是支持多PDN,则可同时进行两种业务。
log如下:
事实上并没有default APN的连接,直接setup新的mms连接
常见的PDP激活失败原因,即无法建立成功PDN连接的原因:
missing or unknown APN:由于未知APN导致会话激活失败
unknown PDP address or PDP type: 未知PDP address or PDP type导致会话激活失败
user authentication failed:用户鉴权失败导致会话激活失败
service option not supported:服务不支持导致会话激活失败的次数
requested service option not subscribed:请求的服务未签约导致会话激活
PDN相关的NV配置:
66008 modem/data/3gpp/lteps/auto_connect_def_pdn Auto Connect Def PDN
71595 modem/data/3gpp/lteps/attach_fallback_ip_type Specify Attach PDN dual IP Fall back IP type
67334 modem/data/3gpp/ignore_last_pdn_ia_timer Ignore Inactivity timer for last PDN
67248 data/3gpp/ds_3gpp_multi_pdn_same_apn 3GPP Multi PDN Same APN
70260 modem/data/3gpp/lteps/allow_def_lte_pdn_teardown Allow def PDN Teardown
70334 modem/data/3gpp/ps/remove_unused_pdn Remove unused pdn
71517 modem/data/3gpp/lteps/pdn_conn_limit_handling Enable/Disable PDN Conn Limit Handling
71520 modem/data/3gpp/global_throttling Enable/Disable PDP, PDN and service request throttling
71541 modem/data/3gpp/umts/enable_multi_pdn_dun Enable/Disable Multi-PDN DUN
72560 modem/data/3gpp/ps/reg_pdn_throttling Enable/Disable Regular PDN Throttling
73591 modem/data/3gpp/ps/enable_pdn_throttling_per_rat 3GPP Ignore Data Settings
另外efs中还有许多针对3gpp2的pdn的配置,如最大失败个数、鉴权等级等等。
建立数据连接时对于是否支持多连接(多PDN)的判定:
private boolean isOnlySingleDcAllowed(int rilRadioTech) {
int[] singleDcRats = mPhone.getContext().getResources().getIntArray(
com.android.internal.R.array.config_onlySingleDcAllowed);
boolean onlySingleDcAllowed = false;
if (Build.IS_DEBUGGABLE &&
SystemProperties.getBoolean("persist.telephony.test.singleDc", false)) {
onlySingleDcAllowed = true;
}
if (singleDcRats != null) {
for (int i=0; i < singleDcRats.length && onlySingleDcAllowed == false; i++) {
if (rilRadioTech == singleDcRats[i]) onlySingleDcAllowed = true;
}
}
if (DBG) log("isOnlySingleDcAllowed(" + rilRadioTech + "): " + onlySingleDcAllowed);
return onlySingleDcAllowed;
}
从config_onlySingleDcAllowed的配置来看,以下RAT是只支持单连接的:
<integer-array name="config_onlySingleDcAllowed">
<item>4</item> <!-- IS95A -->
<item>5</item> <!-- IS95B -->
<item>6</item> <!-- 1xRTT -->
<item>7</item> <!-- EVDO_0 -->
<item>8</item> <!-- EVDO_A -->
<item>12</item> <!-- EVDO_B -->
</integer-array>
在建立数据连接时,如果
isOnlySingleDcAllowed判定为true,即只支持单连接,则会判断是否有更高优先级的APN已经激活,如果有则不会去建立本次请求的数据连接,如果没有则会断开当前已经存在的连接再去请求本次数据连接。
如果判定为false,即可支持多个连接,则直接去建立新的连接。在建立数据的过程中判断如下:
//判断是否是只支持单pdn连接,即DataConnection对象只能有一个存在,判断依据为radioTech
if (isOnlySingleDcAllowed(radioTech)) {
//在只支持单连接的情况下,如果更高优先级的apnContext处于激活态,比如mms正在进行,default拨号将会被无视
if (isHigherPriorityApnContextActive(apnContext)) {
return false;
}
//说明当前请求apnContext是高优先级的,需要断开低优先级的连接
if (cleanUpAllConnections(true, Phone.REASON_SINGLE_PDN_ARBITRATION)) {
return false;
}
}
以上纯属个人学习总结,如有不对的地方,欢迎讨论指正。
阅读全文
0 0
- 安卓的多PDN连接
- PDN连接的跨省重建
- 安卓的socket连接
- 安卓adb无法连接的问题
- 安卓连接网络
- Multiple PDN Connectivity
- APN 和 PDN 关系
- 安卓手机获取当前连接的WIFI相关信息
- 关于安卓4.0无法连接wifi的解决办法。
- 安卓手机获取当前连接的WIFI相关信息
- 关于安卓连接postgresql需要注意的问题
- 安卓手机如何查看已连接的WIFI密码
- 安卓 休眠 长连接和推送的可选实现
- (菜鸟)初学安卓遇到的问题(模拟器连接)
- java判断IOS还是安卓,跳转不同的连接
- 安卓 判断是否已连接上wifi的方法
- 一些关于XE8无法连接安卓手机的解决方法
- 安卓蓝牙设备连接仪器的数据交互
- SessionStateMode之Redis共享session
- 排序
- BZOJ 2225: [Spoj 2371]Another Longest Increasing CDQ
- PL0源码分析之占位
- <s:iterator>标签的使用
- 安卓的多PDN连接
- Eclipse去除js(JavaScript)验证错误
- 和天然呆恋爱是什么体验?
- Postgresql分布式插件plproxy
- centos7 安装软件
- Lucene学习总结之七:Lucene搜索过程解析(3)
- 系统学习深度学习(四十)--MS-CNN
- 逼格高又实用的Linux高级命令,开发运维都要懂
- 判断某个对象是否是空对象