深度解析 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会话与网络切片,所有关于“上网”的控制逻辑,都汇聚于此。

小李明白,这一章他不可能一蹴而就。他决定采用循序渐进的方式,首先攻克最核心、最基础的部分。本篇文章,我们将跟随小李的脚步,完成两项关键任务:

  1. 理清脉络:深入理解从2G到5G,数据连接的核心概念(PDP Context, EPS Bearer, PDU Session)是如何演进的。

  2. 掌握实践:亲手实践并彻底搞懂被开发者誉为“上网三部曲”的三个核心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。他需要在模组中创建这个配置。

  1. 发送命令: AT+CGDCONT=1,"IPV4V6","cmiot"

  2. 模组响应: OK

  3. 解读: 他成功地在模组内部创建了一条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)。

小李的实践:

  1. 发送命令: AT+CGATT=1

  2. 模组响应: OK (注意:+CGATT是一个耗时操作,可能需要几秒钟才返回OK)

  3. 验证状态:

    • 发送命令: AT+CGATT?

    • 模组响应: +CGATT: 1

    • 解读: 1表示已经成功附着。

    • 同时,他也会观察到+CGREG+CEREG/+C5GREG的URC,状态变为15

+CGATT+CGREG的区别与联系:

这是一个常见的混淆点。+CREG是CS注册,+CGREG是PS注册。+CGATT触发PS附着动作。通常,AT+CGATT=1成功后,AT+CGREG?就会返回15。许多现代模组为了简化操作,在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) |

小李的实践:

  1. 发送命令: AT+CGACT=1,1

    • <state>=1: 表示“激活”。

    • <cid>=1: 表示要激活的是之前用+CGDCONT定义的1号上下文。

  2. 模组响应: OK (同样,这是耗时操作)。

  3. 最终验证:获取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,指定了要为哪个已激活的上下文进入数据模式。

  • 小李的实践:

    1. 发送命令: ATD*99***1#

    2. 模组响应: CONNECT

    3. 进入数据模式: 收到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,理解了其背后技术驱动力和不断丰富的功能内涵。

  • 我们通过“上网三部曲”的实战演练,掌握了最核心的数据连接建立流程

    1. AT+CGDCONT: 定义连接档案(APN, PDP类型等)。

    2. AT+CGATT: 附着到分组域网络。

    3. 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:这通常有以下几种可能:

  1. SIM卡套餐不支持:您使用的SIM卡套餐,可能没有开通您所填写的APN的访问权限。

  2. 漫游网络限制:您当前漫游到的运营商网络,不支持或不识别您归属网络的这个APN。

  3. 专网APN:某些专网APN有严格的地理位置或绑定限制,您可能不在允许的区域内。

  4. 模组或网络问题:极少数情况下,可能是模组固件或网络侧的配置问题。

最快的排查方法是,将这张SIM卡放入一部普通手机,看能否使用相同的APN正常上网。

Q5:在5G网络下,我还需要用AT+CGDCONT这些命令吗?

A5:是的,核心命令依然是这些,但“内涵”大大丰富了。在5G SA模式下,+CGDCONT命令会增加很多新的参数来定义一个PDU会话,例如:

  • <S-NSSAI>: 用于指定网络切片。

  • <SSC_mode>: 用于指定会话和业务连续性模式。

  • <Always-on_req>: 用于请求建立一个“永久在线”的PDU会话。

所以,虽然命令“外壳”没变,但要用好5G的新特性,就需要深入学习这些新增参数的含义。我们将在后续的文章中详细介绍。