深度解析 3GPP TS 27.007:10 Commands for packet domain (Part 1 - 核心概念与“上网三部曲”)
本文技术原理深度参考了3GPP TS 27.007 V19.4.0 (2025-09) Release 19 规范中,关于“10 Commands for packet domain”的核心章节。鉴于本章内容极其庞大和核心,我们将分多个部分进行深度剖析。本文为Part 1,将聚焦于分组域通信最根本的两大基石:核心概念的演进,以及被誉为“上网三部曲”的最关键命令流程。
写在前面:小李的终极目标——让“天眼”开口传数据
在经历了对AT命令语法、模组身份识别、网络状态监控和设备本体控制等一系列学习后,我们的主角——物联网工程师小李,终于来到了他此行目的的核心地带。他的“天眼”追踪器项目,所有前期的准备工作,都是为了这最后,也是最关键的一步:通过分组域(Packet Domain),将采集到的数据,发送到云端服务器。
这就是AT命令集的心脏与灵魂——第十章:Commands for packet domain。
这一章是整部TS 27.007规范中篇幅最长、内容最密集、技术演进最复杂的章节。它详细定义了设备如何从一个孤立的个体,转变为互联网世界的一个节点。从2G/GPRS时代的PDP上下文,到4G/EPS的承载(Bearer),再到5G时代的PDU会话与网络切片,所有关于“上网”的控制逻辑,都汇聚于此。
小李明白,这一章他不可能一蹴而就。他决定采用循序渐进的方式,首先攻克最核心、最基础的部分。本篇文章,我们将跟随小李的脚步,完成两项关键任务:
-
理清脉络:深入理解从2G到5G,数据连接的核心概念(PDP Context, EPS Bearer, PDU Session)是如何演进的。
-
掌握实践:亲手实践并彻底搞懂被开发者誉为“上网三部曲”的三个核心AT命令:
+CGDCONT(定义)、+CGATT(附着)和+CGACT(激活)。
掌握了这部分内容,就等于掌握了让任何蜂窝设备接入互联网的通用钥匙。这是每一位物联网开发者都必须精通的核心技能。
1. 概念进化论:从PDP上下文到PDU会话
在敲下任何命令之前,小李首先要理清术语。第10章开篇就强调了其定义的广泛性。
Packet Domain MTs vary widely in functionality. … For easy reading the term PDP context is used for PDP contexts in UMTS/GPRS as well as PDN/default EPS bearers and traffic flows in EPS.
规范为了行文方便,有时会用最古老的术语“PDP context”来泛指所有代际的数据连接会话。但作为一名严谨的工程师,小李必须清楚它们之间的区别与演进关系。
1.1 2G/3G时代:PDP Context (分组数据协议上下文)
这是“上网”概念的起点。在GPRS和UMTS网络中,当一个设备想要连接互联网时,它必须与网络协商建立一个“PDP Context”。
可以把它想象成一张**“互联网通行证申请表”**。这张表上记录了这次数据连接的所有关键信息:
-
要去哪个“大门”出去? → APN (Access Point Name)
-
分配到的IP地址是多少? → PDP Address
-
服务质量(QoS)要求是怎样的? → 带宽、时延等。
AT+CGDCONT这个命令,最初就是为了填写这张“申请表”而生的。
1.2 4G/LTE时代:EPS Bearer (演进的分组系统承载)
进入4G时代,为了支持更丰富的业务和更精细化的QoS,PDP Context的概念演进为了EPS Bearer。
According to 3GPP TS 23.401, there is a 1 to 1 mapping between active EPS bearer context and active PDP context:
- An active default EPS bearer context is associated with an active non secondary PDP context.
- An active dedicated EPS bearer context is associated with an active secondary PDP context.
这里的核心思想是**“承载(Bearer)”**。一个到APN的数据连接(称为PDN Connection)不再是单一的通道,而是由至少一个“默认承载”和零个或多个“专用承载”组成。
-
默认承载 (Default Bearer): 就像一条高速公路的普通车道。设备附着网络后,首先建立的就是默认承载,它提供“尽力而为”(Best Effort)的连接,保证你“能上网”。一个PDN Connection只有一个默认承载。
-
专用承载 (Dedicated Bearer): 就像高速公路的VIP/ETC车道。当需要高质量服务时(如VoLTE通话),网络会为这个特定业务建立一个专用的承载,提供有保障的QoS(Guaranteed Bit Rate, GBR)。一个PDN Connection可以有多个专用承载。
在AT命令层面,+CGDCONT定义的“非次要PDP上下文”(non secondary PDP context)就对应了4G的默认承载。而“次要PDP上下文”(secondary PDP context,通过+CGDSCONT定义)则对应了专用承载。
1.3 5G时代:PDU Session (协议数据单元会话)
5G带来了万物互联的愿景,数据连接的形式也变得更加多样化。EPS Bearer的概念进一步演进为PDU Session。
According to 3GPP TS 23.501 and 3GPP TS 24.501 there exists a one to one mapping between a 5GS PDU session and an EPS PDN connection. A 5GS PDU session is a set of QoS flows…
PDU会话是5G数据连接的核心,它带来了几个革命性的变化:
-
会话类型多样化 (PDU Session Type): 不再局限于IP协议,还原生支持**以太网(Ethernet)和非结构化(Unstructured)**数据传输,为工业互联网等场景打开了大门。
-
QoS模型精细化 (QoS Flow): 承载(Bearer)的概念被更细粒度的**“QoS流”**所取代。一个PDU会话可以包含多个QoS流,每个流都有自己独立的QoS参数(如5QI, GFBR等),可以更灵活地匹配上层应用的需求。
-
网络切片 (Network Slicing): 每个PDU会话都必须与一个S-NSSAI (Single Network Slice Selection Assistance Information) 关联。S-NSSAI是网络切片的标识,这意味着5G的数据连接是“生而切片”的,可以为不同行业(如车联网、智能电网)提供逻辑上隔离的、端到端QoS保障的虚拟专网。
在AT命令层面,这些新特性都通过为+CGDCONT等老命令增加新参数来体现,例如<S-NSSAI>, <SSC_mode>等。
小李的总结:
他画了一张演进图:
PDP Context (2G/3G) → EPS Bearer (4G) → PDU Session (5G)
本质都是定义一个数据连接,但内涵越来越丰富,能力越来越强大。而AT命令则通过不断“打补丁”、增加参数的方式,顽强地跟上了时代的步伐。
2. “上网三部曲”:+CGDCONT, +CGATT, +CGACT 实战
理论学习完毕,小李终于要开始编码实践了。他将设备上网的流程总结为经典的三部曲。
2.1 第一部曲:AT+CGDCONT - 定义“我是谁,要去哪”
这是数据连接的第一步,也是最关键的配置步骤。+CGDCONT (Define PDP Context) 的作用是在模组中创建一条或多条数据连接的“配置档案”。
Description
The set command specifies PDP context parameter values for a PDP context identified by the (local) context identification parameter,
…
Table 111: +CGDCONT parameter command syntax (核心参数简化版)
| Command | Possible response(s) |
| :--- | :--- |
| +CGDCONT=<cid>[,<PDP_type>[,<APN>[,...]]]| |
| +CGDCONT?| [+CGDCONT: <cid>,<PDP_type>,<APN>,...] … |
| +CGDCONT=?| +CGDCONT: (range of supported <cid>s),<PDP_type>,... |
关键参数详解:
-
<cid>(Context Identifier): 上下文ID。这是你在本地为这条“配置档案”起的一个编号(如1, 2, 3…)。后续所有针对这条连接的操作,都将使用这个ID。 -
<PDP_type>: 协议数据单元类型。定义了这条数据连接承载的是什么类型的网络协议。-
"IP": 只支持IPv4。 -
"IPV6": 只支持IPv6。 -
"IPV4V6": 强烈推荐,表示UE具备双栈能力,可以同时获取IPv4和IPv6地址。 -
"Ethernet"/"Unstructured": 5G新增的类型,用于非IP数据传输。
-
-
<APN>(Access Point Name): 接入点名称。这是一个字符串,是UE访问外部数据网络的逻辑入口。对于物联网卡,APN通常由运营商指定,例如中国移动的"cmiot",中国电信的"ctnet"。
小李的实践:
“天眼”项目使用的是一张中国移动的物联网卡,APN为cmiot。他需要在模组中创建这个配置。
-
发送命令:
AT+CGDCONT=1,"IPV4V6","cmiot" -
模组响应:
OK -
解读: 他成功地在模组内部创建了一条ID为
1的配置档案。这份档案的规定是:当激活这条连接时,请使用IPV4V6双栈协议,去连接名为cmiot的这个网络接入点。
重要提示: +CGDCONT只是一个静态定义动作,它不产生任何网络信令,也不消耗任何流量。它就像是在电脑上“新建一个拨号连接”,但还没有点击“连接”按钮。
2.2 第二部曲:AT+CGATT - 向数据网络“报到”
在激活数据连接之前,设备必须先“附着”(Attach)到分组域网络上。这就像你想进一个俱乐部的大门,得先在门口登记,成为会员。
Description
The set command is used to attach the MT to, or detach the MT from, the Packet Domain service.
Table 119: +CGATT parameter command syntax
| Command | Possible Response(s) |
| :--- | :--- |
|+CGATT=<state>| +CME ERROR: <err> |
|+CGATT?| +CGATT: <state> |
|+CGATT=?| +CGATT: (list of supported <state>s) |
参数<state>的含义:
-
1: 附着 (Attach) 到分组域网络。 -
0: 从分组域网络去附着 (Detach)。
小李的实践:
-
发送命令:
AT+CGATT=1 -
模组响应:
OK(注意:+CGATT是一个耗时操作,可能需要几秒钟才返回OK) -
验证状态:
-
发送命令:
AT+CGATT? -
模组响应:
+CGATT: 1 -
解读:
1表示已经成功附着。 -
同时,他也会观察到
+CGREG或+CEREG/+C5GREG的URC,状态变为1或5。
-
+CGATT与+CGREG的区别与联系:
这是一个常见的混淆点。+CREG是CS注册,+CGREG是PS注册。+CGATT是触发PS附着的动作。通常,AT+CGATT=1成功后,AT+CGREG?就会返回1或5。许多现代模组为了简化操作,在AT+CFUN=1后会自动进行附着,这一步有时可以省略,但显式地执行AT+CGATT=1并检查其状态,是更健壮的编程方式。
2.3 第三部曲:AT+CGACT - 正式“接通水管”
完成了定义和附着,现在是万事俱备,只欠东风。+CGACT (PDP Context Activate) 命令就是去执行激活操作,让模组真正从网络获取IP地址,打通数据链路。
Description
The set command is used to activate or deactivate the specified PDP context(s).
Table 120: +CGACT parameter command syntax
| Command | Possible Response(s) |
| :--- | :--- |
|+CGACT=[<state>[,<cid>...]]| +CME ERROR: <err> |
|+CGACT?| [+CGACT: <cid>,<state>] … |
|+CGACT=?| +CGACT: (list of supported <state>s) |
小李的实践:
-
发送命令:
AT+CGACT=1,1-
<state>=1: 表示“激活”。 -
<cid>=1: 表示要激活的是之前用+CGDCONT定义的1号上下文。
-
-
模组响应:
OK(同样,这是耗时操作)。 -
最终验证:获取IP地址!
激活成功与否,最直接的证据就是看是否获取到了IP地址。
AT+CGPADDR(Show PDP Address) 命令用于此目的。-
发送命令:
AT+CGPADDR=1 -
模组响应:
+CGPADDR: 1,"10.12.34.56","2409:8a00:1234:5678::1" -
解读: 成功了!1号上下文获取到了IPv4地址
10.12.34.56和一个IPv6地址。至此,数据链路已经完全建立。
-
至此,“上网三部曲”全部完成。“天眼”追踪器已经成功地接入了互联网。
4. 最后一步:从命令模式到数据模式
三部曲完成后,设备虽然已经有了IP地址,但AT命令所在的串口仍然处于“命令模式”。这意味着MCU发给模组的,仍然被当作AT命令来解析。要发送真正的TCP/IP数据包,需要将这个通道切换为“数据模式”。
The V.250 ‘D’ (Dial) command causes the MT to enter the V.250 online data state and, with the TE, to start the specified layer 2 protocol.
虽然第十章主要定义了+CG...命令,但进入数据模式,最经典、最通用的方法,仍然是借用第六章的ATD命令,并使用一种特殊的“号码”。
-
命令:
ATD*99***<cid>#-
*99#是业界约定俗成的用于发起分组数据连接的拨号串。 -
***<cid>部分,例如***1,指定了要为哪个已激活的上下文进入数据模式。
-
-
小李的实践:
-
发送命令:
ATD*99***1# -
模组响应:
CONNECT -
进入数据模式: 收到
CONNECT后,串口的行为就发生了根本性的变化。它不再解析AT命令,而是变成了一个透明的数据通道。MCU可以通过这个通道,运行PPP协议(Point-to-Point Protocol),然后在其上建立标准的TCP/IP协议栈,进行Socket通信。
-
至此,小李的MCU终于可以向云端send()出第一个数据包了!
总结
在本文中,我们跟随小李的脚步,系统地梳理了3GPP TS 27.007第十章的开篇内容,这是所有分组数据业务的基础。
-
我们厘清了数据连接核心概念的演进,从2G的PDP Context,到4G的EPS Bearer,再到5G的PDU Session,理解了其背后技术驱动力和不断丰富的功能内涵。
-
我们通过“上网三部曲”的实战演练,掌握了最核心的数据连接建立流程:
-
AT+CGDCONT: 定义连接档案(APN, PDP类型等)。 -
AT+CGATT: 附着到分组域网络。 -
AT+CGACT: 激活上下文,获取IP地址。
-
-
我们还明确了最后“临门一脚”的关键:通过**
ATD*99...#** 将命令通道切换为数据通道,为上层TCP/IP协议栈的运行铺平道路。
掌握了“上网三部曲”,小李已经具备了让任何物联网设备接入互联网的基本能力。但这仅仅是开始,如何根据业务需求,为数据连接申请不同的服务质量(QoS)?如何处理网络发起的连接请求?如何在5G网络中玩转网络切片?这些更高级的话题,我们将在本章的后续部分(Part 2, Part 3…)中继续与小李一同探索。
FAQ:快速问答
Q1:PS附着(Attach, +CGATT)和PDP上下文激活(Activate, +CGACT)到底是什么关系?
A1:可以把它们比作“进入大楼”和“打开办公室的门”:
-
PS附着 (
+CGATT):是你作为合法员工,刷工卡进入公司大楼的过程。成功后,你在公司的安保系统里就是“已进入”状态,公司知道你来了。在网络中,UE附着成功后,核心网知道了这个UE已经入网,并为其建立了信令连接,可以进行位置管理等。 -
PDP/PDU会话激活 (
+CGACT):是你用钥匙打开你自己的办公室门,并打开电脑开始上网。这需要你有访问特定办公室(APN/DNN)的权限。成功后,你才真正获得了连接到公司内网或互联网的IP地址。
总结:附着是前提,是设备在分组域的“签到”;激活是具体业务的开启,是获取IP地址建立数据通道的动作。必须先附着,才能激活。
Q2:为什么有的教程里,直接ATD*99***1#就可以上网,没有+CGACT这一步?
A2:这是一种简化的、兼容老式软件的“ Modem兼容模式”(在10.2节中定义)。在这种模式下,ATD命令不仅触发了进入数据状态,还隐式地触发了+CGACT的激活过程。对于新的、功能更全的应用,强烈建议使用显式的+CGATT → +CGACT → ATD...流程,因为这样每一步的状态都清晰可控,便于调试和错误处理。
Q3:+CGDCONT可以定义多个AT+CGDCONT=1,...和AT+CGDCONT=2,...,有什么用?
A3:可以,而且非常有用。定义多个
-
AT+CGDCONT=1,"IPV4V6","cmiot": 用于连接公共物联网平台。 -
AT+CGDCONT=2,"IPV4V6","corp.private.net": 用于连接企业内网,进行远程维护和管理。 -
AT+CGDCONT=3,"IPV4V6","ims": 用于VoLTE/VoNR业务。
设备可以根据应用需求,选择性地激活(+CGACT)其中的一个或多个上下文,实现业务的隔离和并行。
Q4:如果+CGACT=1,1失败,返回了+CME ERROR: Missing or unknown APN,但我确认我的APN字符串是正确的,可能是什么原因?
A4:这通常有以下几种可能:
-
SIM卡套餐不支持:您使用的SIM卡套餐,可能没有开通您所填写的APN的访问权限。
-
漫游网络限制:您当前漫游到的运营商网络,不支持或不识别您归属网络的这个APN。
-
专网APN:某些专网APN有严格的地理位置或绑定限制,您可能不在允许的区域内。
-
模组或网络问题:极少数情况下,可能是模组固件或网络侧的配置问题。
最快的排查方法是,将这张SIM卡放入一部普通手机,看能否使用相同的APN正常上网。
Q5:在5G网络下,我还需要用AT+CGDCONT这些命令吗?
A5:是的,核心命令依然是这些,但“内涵”大大丰富了。在5G SA模式下,+CGDCONT命令会增加很多新的参数来定义一个PDU会话,例如:
-
<S-NSSAI>: 用于指定网络切片。 -
<SSC_mode>: 用于指定会话和业务连续性模式。 -
<Always-on_req>: 用于请求建立一个“永久在线”的PDU会话。
所以,虽然命令“外壳”没变,但要用好5G的新特性,就需要深入学习这些新增参数的含义。我们将在后续的文章中详细介绍。