常见问题解答

1、什么是注网和拨号?

在蜂窝无线通信中,设备想要上网,需要完成两个重要的步骤:网络附着(Attach)和PDN连接建立。而我们常说的"注网"其实就是指设备发起网络附着的过程,"拨号"则指的是PDN连接建立的过程,也叫建立一路承载。"拨号"过程,除了建立PDN连接,拿到核心网的分配的IP,其实还完成了这个IP地址与LWIP网络协议栈的绑定,相当于让设备有了一张"网卡"。

设备发起网络附着的目的,其实是告知网络自己的身份,同时由网络来验证设备身份的合法性,如果验证通过,则完成设备在网络上的登记过程。此时设备还无法进行网络业务。

我们知道,手机和电脑想要上网,都必须有一个属于自己的IP地址才行,这是因为IP地址唯一标识每个设备,就像每个家庭都有一个唯一的门牌号或者地址。没有IP地址,网络就无法知道设备在哪里,自然也无法将信息准确地传送给你。而模组想要获取IP地址,就需要在网络侧完成身份验证登记后,向网络请求建立PDN连接,即所谓的"拨号"。当模组完成PDN连接建立后,网络侧会分配一个IP地址给设备,相当于建立了一条上网通道,此时模组就可以使用这个IP来上网了。

2、设备在2G/3G和4G网络下的注网和拨号是否一样,如果不一样,有什么区别?

设备在2G和3G网络下的注网和拨号过程差异不大,流程上基本是一致的。但是到4G网络时,注网拨号和2G/3G下差异就很大了。除了信令本身差异较大之外,对用户来说,主要差异如下:

2G/3G网络下,设备的注网和拨号是两个独立的过程,设备必须先完成网络注册,然后再发起PDN连接建立。而到LTE网络中,设备的注网过程,其实包含了PDN连接建立,注网过程中建立一路PDN连接的过程,我们称之为"建立默认承载"。也就是说,设备在LTE网络中,注网成功时其实就已经建立了一路PDN连接,并拿到了核心网分配的IP地址。

按照上述说明,是不是意味着LTE网络下,设备注网成功,就可以直接上网了呢?其实是不行的。这是因为设备在LTE网络上注册成功后,虽然已经建立了一路默认承载,拿到了核心网下发的IP,但是这个IP地址没有绑定到"网卡",TCP/IP协议栈拿不到这个IP,无法进行网络业务。所以必须进行"拨号"操作。

3、什么是APN?

APN(Access Point Name,接入点名称)是移动网络中非常重要的概念,它定义了设备如何通过运营商的网络访问外部网络(通常是互联网),以及访问什么样的网络资源。

4、为什么要配置APN?

APN是终端入网时必须配置的一个参数,因为他决定了设备如何通过运营商的网络访问外部网络,以及访问什么样的网络资源。如果没有配置APN或者配置了错误的APN,可能导致设备注网失败或者拨号失败。

5、为什么有的卡不配置APN甚至配置错误的APN,设备也能正常注网和拨号?

这是因为当地的运营商基站有APN自动纠错功能,即终端在进行网络注册时,如果没有配置APN或者配置了错误的APN,运营商的基站会在注网过程中自动纠正并下发一个正确的APN给终端,此时终端会选择接受并使用该APN继续入网。该功能依赖于运营商的基站是否支持,并不是所有运营商都支持。

目前在中国境内,大部分地区的基站都有此功能,也有一些没有。由于我们无法提前确认哪些基站有这个功能,因此我们不建议用户依赖运营商基站的APN自动纠错功能,最好在使用时,主动配置正确的APN。

6、哪些情况下,用户必须配置APN?

下面列出了几种必须配置APN的情况:

  • 有的运营商在一些区域的基站没有APN自动纠错功能,此时如果终端设备没有配置APN或者配置了错误的APN,会导致终端设备注网失败。
  • 对于一些特殊的SIM卡,比如专网卡,如果没有配置APN,会导致终端设备注网失败,在小区上发起附着请求(Attach Request)时就会被拒绝。这种特殊的SIM卡,必须要配置APN。
  • 还有一类特殊的SIM卡,既可以连接公共网络(比如互联网),也可以连接专网。其连接不同网络的方式就是通过配置不同的APN来实现。

我们建议用户,无论使用的是什么SIM卡,都主动去配置正确的APN。

7、如何确认SIM卡的APN信息?

可以和运营商进行确认。

8、如何配置注网APN,是否需要重启,是否掉电保存,是否每次开机都要配置?

  • 如何配置注网APN

    通过dataCall.setPDPContext接口配置,并且profileID参数必须为1。具体的接口使用说明请参考QuecPython官网WIKI说明部分的APN配置与获取功能

  • 配置后是否需要重启

    有两种方式可以使配置生效:

    方式1:重启设备。

    方式2:进行一次CFUN0/1切换。

  • 配置的APN等参数是否支持掉电保存

    支持。

  • 是否每次开机都要配置

    不需要。针对同一张单运营商的卡,只需要配置一次即可。

9、SIM卡可以识别,但是无法注网是什么原因?

这种情况相对比较复杂,参考前面一个章节《网络异常处理》中的模组网络注册失败部分,这里仅列出比较常见的几种原因:

  • 没接射频天线或者射频天线性能差。
  • 该SIM卡需要配置APN才能注册到网络,但是用户没有配置APN。
  • 该SIM卡存在机卡绑定的情况。需要用户联系运营商给该SIM卡解绑,或者更换新的SIM卡。
  • 测试地点没有该SIM卡对应的运营商网络覆盖。
  • 该SIM卡只支持特定频段网络。
  • 该SIM卡只支持特定的网络制式。
  • 设备硬件问题,比如硬件设计问题导致干扰大、模组射频相关器件损坏等。

10、什么是多运营商SIM卡,有什么使用注意事项?

我们正常使用的SIM卡里面一般都只有一家运营商的配置信息,比如中国移动的SIM卡,那卡里面就只有中国移动运营商配置信息,我们将这些信息的集合称之为一个profile。而有的SIM卡,内置了多家运营商的profile文件,即这种SIM卡可以支持多家运营商网络,这种SIM卡就是多运营商卡。

这种多运营商卡一般都是开机时先默认使用其中一个运营商的profile信息去搜网并注网。如果一定时间内没有注网成功,这种SIM卡就会自动进行运营商profile的切换,然后尝试使用新切换的这个profile去搜网并注网。当然,有的SIM卡,在使用当前profile已经注网拨号成功的情况下,也有可能发生profile的切换,具体还是要和这种SIM卡的运营商去确认哪些情况下会发生切换卡内运营商的行为。

需要说明的是,这种SIM卡中,每一个profile都对应一个唯一的IMSI。当SIM卡切换profile时,SIM的IMSI也是随之改变的。每次profile切换时,设备如果是处于联网状态,都会导致设备与网络连接暂时断开,直到使用新的运营商profile注网拨号成功。

11、无线网卡激活成功,但是无法进行网络业务可能是什么原因?

一般有下面两种情况可能会导致这种问题:

  • SIM卡欠费了。有的SIM卡在欠费时,模组使用这张SIM卡也能成功注册到网络,并成功激活蜂窝无线网卡,但是运营商会限制模组进行网络通信。

  • 用户这张SIM卡支持通过特定的APN接入到特殊的网络,并且用户配置的也是接入特殊网络的APN,此时设备接入的是特殊网络,并非互联网。用户可能在这种情况下进行了访问互联网的操作,那么就会出现访问失败的情况。

12、使用蜂窝无线网卡的自动重连功能,模组正常运行过程中因为一些原因导致网络连接断开,后面自动重连成功后,Socket、HTTP和MQTT这些功能需要重新初始化吗?

首先我们需要知道,模组因为网络异常导致连接断开后,如果自动重连成功,那蜂窝无线网卡的IP地址已经发生了变化。此时Socket、HTTP和MQTT这些功能处理情况如下:

  • Socket

    在创建soket对象时,系统会默认自动为其绑定蜂窝无线网卡的当前IP。当峰窝无线网卡的IP地址变化后,之前的socekt失效,需要用户先关闭之前socket,然后重新创建一个socket对象,才能正常使用。

  • HTTP

    HTTP是基于socket实现的一种短连接服务,每一次调用HTTP的方法,其实都重新创建了一个socket对象。因此自动重连功能对HTTP功能没有影响,用户可直接使用。

    HTTP方法中创建的socket对象,在用户获取响应后(response.text & response.content & response.json),系统会自动关闭socket对象,如果用户没有获取响应,则需要用户主动调用接口response.close关闭连接,才可以关闭socket对象。

  • MQTT

    QuecPython的MQTT客户端具备自动重连功能,即当MQTT客户端发现网络连接断开后,在模组的蜂窝无线网卡自动重连时,MQTT客户端会自动重新初始化,并自动按照之前的订阅信息重新订阅相关Topic。因此在蜂窝无线网卡自动重连后,用户不需要重新初始化MQTT客户端,可以继续正常使用。

相关推荐
JaguarJack11 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo11 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack2 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理2 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1232 天前
matlab画图工具
开发语言·matlab
dustcell.2 天前
haproxy七层代理
java·开发语言·前端
norlan_jame2 天前
C-PHY与D-PHY差异
c语言·开发语言
多恩Stone2 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
QQ4022054962 天前
Python+django+vue3预制菜半成品配菜平台
开发语言·python·django
QQ5110082852 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php