一、核心概念:什么是 ippass
?
ippass
是嵌入式模组AT指令中用于设置PPP/IPCP参数的一个选项。它的全称是 IP Pass Through ,但其核心功能是在IPCP协商阶段,指定模组向网络侧(如运营商GGSN/P-GW)请求的IP地址类型。
它决定了模组是"被动接受"网络分配的IP地址,还是"主动请求"一个特定的、有价值的IP地址类型。
二、原理:IPCP协商与地址分配
要理解 ippass
,必须先了解PPP拨号的过程,尤其是 IPCP(Internet Protocol Control Protocol) 阶段。
-
PPP链路建立:模组通过LCP协议与运营商网络建立物理链路连接。
-
PAP/CHAP认证:模组发送用户名和密码进行身份验证。
-
IPCP协商(关键阶段) :这是模组和网络侧服务器协商网络层参数的阶段。其中最重要的一项就是IP地址的分配。
-
ippass
的作用点 :正是在这个IPCP协商阶段,模组会向网络发送一个 IPCP配置请求 数据包。这个请求包里包含了一个"请求的IP地址"字段。ippass
参数的值,就直接填充在这个字段里。
三、ippass
的不同取值及其原理和作用
ippass
通常有以下几个取值,每个取值都代表了不同的请求策略:
1. ippass=0
(或默认行为)
-
原理 :模组在IPCP请求的"请求的IP地址"字段中填充 0.0.0.0。
-
作用 :这是一种"我不关心IP地址"或"请给我任意一个IP地址"的谦逊请求。它告诉网络侧:"请直接给我分配一个你能分配的任何地址,我不做指定"。
-
结果 :网络侧(GGSN/P-GW)会无条件地从其地址池中分配一个IP地址给模组。这个地址大概率是一个内网私网IP地址(如 10.x.x.x, 172.16.x.x, 192.168.x.x)。
-
优缺点:
-
优点:分配成功率高,连接建立快。
-
缺点:获得的可能是私网IP,设备无法被公网直接访问,对于需要远程直连的设备(如监控、服务器)是致命的。
-
2. ippass=1
-
原理 :模组在IPCP请求的"请求的IP地址"字段中填充它上一次拨号成功时获得的IP地址。
-
作用:尝试"续租"上一次的IP地址。这可以提高获取到相同IP的概率,但并非绝对。
-
结果:取决于运营商策略。如果该IP未被占用且策略允许,可能会再次获得;否则,网络会分配一个新地址。
3. ippass=2
(最常用且最重要的模式)
-
原理 :模组在IPCP请求的"请求的IP地址"字段中填充一个非法的、错误的IP地址 ,例如一个全0地址(0.0.0.0)的变体,或者一个明显无效的地址。这是一种明确的信号。
-
作用 :强制要求网络侧分配一个公网IP地址 。其逻辑是:由于模组请求了一个无效的地址,网络侧无法满足这个"具体"的请求,根据协议规范,它必须拒绝这个请求,并附带上一个它认为有效的、可分配的地址 作为回应。而运营商网络在回应时,通常会选择分配一个公网IP地址。
-
结果 :极大提高了获取到公网IP地址的概率。这是很多物联网应用为了实现远程穿透NAT而必须设置的参数。
-
注意 :这并非100%保证,最终分配什么地址仍取决于运营商的政策和当前地址池的状况。但在大多数情况下,这是获取公网IP的有效手段。
四、实际应用场景与AT指令示例
假设你使用一个4G模组进行拨号。
场景1:仅要求能上网,不要求被访问(如数据上报设备)
- 不设置
ippass
,采用默认行为(通常是ippass=0
),获取一个私网IP。设备可以主动访问外网,但外网无法直接访问设备。
场景2:要求设备能被公网直接访问(如DTU、视频监控、远程桌面)
- 在
CGDCONT
指令的最后一个参数设置ippass=2
,强制模组在IPCP协商中请求公网IP。
总结
参数值 | 原理 | 作用与结果 | 适用场景 |
---|---|---|---|
0 | 请求0.0.0.0 ,表示"任意地址" |
网络分配一个地址,通常是私网IP | 仅需出站连接的应用(如传感器数据上报) |
1 | 请求上一次成功获取的IP地址 | 尝试获取相同IP,成功率取决于运营商 | 对IP稳定性有一般要求的场景 |
2 | 请求一个无效的IP地址,强制网络返回一个有效地址作为替代 | 极大概率获取到公网IP | 需要入站连接的应用(如服务器、监控、P2P) |
核心要点 :ippass
是一个在PPP/IPCP协商阶段使用的策略参数 ,它通过改变模组"请求IP"的行为,来影响 运营商网络最终"分配IP"的决策,是嵌入式开发中实现公网IP获取的关键技术点之一。