嵌入式模组拨号获取IP地址时,设置的ippass是什么原理,起到什么作用?

一、核心概念:什么是 ippass

ippass 是嵌入式模组AT指令中用于设置PPP/IPCP参数的一个选项。它的全称是 IP Pass Through ,但其核心功能是在IPCP协商阶段,指定模组向网络侧(如运营商GGSN/P-GW)请求的IP地址类型

它决定了模组是"被动接受"网络分配的IP地址,还是"主动请求"一个特定的、有价值的IP地址类型。

二、原理:IPCP协商与地址分配

要理解 ippass,必须先了解PPP拨号的过程,尤其是 IPCP(Internet Protocol Control Protocol) 阶段。

  1. PPP链路建立:模组通过LCP协议与运营商网络建立物理链路连接。

  2. PAP/CHAP认证:模组发送用户名和密码进行身份验证。

  3. IPCP协商(关键阶段) :这是模组和网络侧服务器协商网络层参数的阶段。其中最重要的一项就是IP地址的分配

  4. 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获取的关键技术点之一。

相关推荐
寰天柚子7 小时前
裸金属服务器深度解析:适用场景、选型指南与运维实践
服务器·网络·github
克莱斯勒ya8 小时前
服务器硬件配置
运维·服务器
春日见8 小时前
在虚拟机上面无法正启动机械臂的控制launch文件
linux·运维·服务器·人工智能·驱动开发·ubuntu
松涛和鸣9 小时前
Linux Makefile : From Basic Syntax to Multi-File Project Compilation
linux·运维·服务器·前端·windows·哈希算法
再睡一夏就好9 小时前
深入Linux线程:从轻量级进程到双TCB架构
linux·运维·服务器·c++·学习·架构·线程
云和数据.ChenGuang10 小时前
OpenEuler系统下RabbitMQ安装与基础配置教程
服务器·分布式·rabbitmq·ruby·数据库运维工程师·运维教程
工控小楠10 小时前
EtherNET IP转Profinet协议网关在智能仓储系统中的应用
服务器·网络·tcp/ip
gaize121310 小时前
如何编写一个简单的服务器应用程序?
服务器·云计算
studytosky10 小时前
Linux系统编程:深度解析 Linux 进程,从底层架构到内存模型
linux·运维·服务器·开发语言·架构·vim
Stella252111 小时前
实习日志|知识总结
linux·服务器·软件测试·数据库