当前位置: 首页 > article >正文

Linux ECM子网掩码常见问题排查

1 前言

本文主要描述模组ECM数据拨号方式下常见子网掩码相关问题定位排查方法。

2 ECM拨号简介

ECM (Ethernet Networking Control Model 以太网控制模型) 用于在设备和主机之间传输以太网数据包。在操作系统看来,CDC ECM设备就是一个虚拟以太网卡,包含标准网卡需要的MAC地址和IP地址。CDC ECM设备通常是一个以太网卡,用于连接LAN或者是WLAN。当客户主机发起ECM拨号的请求时,模块相当于一个路由器,模块内部会调用相应的服务实现WWAN拨号。在拨号成功后,模块内部会启动DHCP server等功能。客户端应用系统 通过DHCP client 服务,获取模块DHCP server分配的IP 。客户主机调用DHCP等脚本实现把模块从网络侧获取到的IP和DNS配置到本机,实现上网。

2.1 ECM拨号基本业务模型

模组内部WAN口提供无线上网服务,LAN口用于接入host数据。LAN口可以是USB口,以太网口或WLAN口。这些LAN口挂住同一个网桥下面,位于同一局域网之内。基于网桥会对应启动一个DHCP服务器,为与LAN口连接的上位机自动分配IP地址。该网桥下的数据的默认路由配置为经过对应的WAN口,这样访问外网的数据会从WAN口出去。

  上位机在ECM拨号完成后启动dhcp client程序获取IP地址,子网掩码,网关等信息,使用这些信息配置对应的网口,默认路由,dns server。

2.2 子网掩码

子网掩码是一个32位地址,是与IP地址结合使用的一种技术。它的主要作用有两个,一是用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。二是用于将一个大的IP网络划分为若干小的子网络。

   IP地址,子网掩码,该子网对应的网络地址及广播地址的关系如下:假设IP地址为ip,子网掩码为mask, 则该子网的网络地址为(ip & mask),该子网对应的广播地址为(ip & mask) | (~mask),该子网对应的主机地址范围为(网络地址+1,广播地址-1)。Linux系统如果接收到一个IP数据包,目的IP地址为本机,但源IP地址为本机网口对应子网的网络地址或广播地址,不会将该IP数据包送给上层的应用程序。因此如果多个设备或模块之间要支持互通,并且这些设备规划成是在同一个局域网下,则他们的子网掩码应该配置成一样,并且保证设备的IP地址不是这个子网的网络地址或广播地址。

2.2.1 模块WAN口子网掩码自动计算

ECM拨号完成后,模组会将WAN口rmnet_data0 up起来,配置IP地址、子网掩码,并且配置默认路由。rmnet_data0配置的ip地址是数据拨号完成后网络侧分配的IP地址。子网掩码及网关默认情况下是根据IP地址自动计算出来的。

    子网掩码的计算规则如下:

/*------------------------------------------------------------------------

      If LSB is 1, then skip all 1's till 0 to generate netmask.

      For Example:

      IP      = 10.0.0.3        ( 0000 1010 0000 0000 0000 0000 0000 0011 )

      netmask = 255.255.255.248 ( 1111 1111 1111 1111 1111 1111 1111 1000 )

  

      If LSB is 0, then skip all 0's till 1 to genrate netmask.

      For Example:

      IP      = 10.0.0.8        ( 0000 1010 0000 0000 0000 0000 0000 1000 )

      netmask = 255.255.255.240 ( 1111 1111 1111 1111 1111 1111 1111 0000 )

    ------------------------------------------------------------------------*/

   网关的计算规则是IP地址+1后的地址如果为该子网的广播地址则将IP地址-1作为网关地址,否则将IP地址+1作为网关地址,具体如下:

/*------------------------------------------------------------------------

    Generate Server IP by adding 1 to IP address.

    If by adding 1 the host address becomes broadcast address

    then subtract 1 to generate server address.

    For Example (Subtract):

    IP      =  10.0.0.10       (0000 1010 0000 0000 0000 0000 0000 1010)

    netmask =  255.255.255.252 (1111 1111 1111 1111 1111 1111 1111 1100)

    Server  =  10.0.0.9        (0000 1010 0000 0000 0000 0000 0000 1001)

    For Example (Addition):

    IP      =  10.0.0.11       (0000 1010 0000 0000 0000 0000 0000 1011)

    netmask =  255.255.255.248 (1111 1111 1111 1111 1111 1111 1111 1000)

    Server  =  10.0.0.12       (0000 1010 0000 0000 0000 0000 0000 1100)

  ------------------------------------------------------------------------*/

2.2.2 模块WAN口子网掩码人工配置

根据IP地址自动计算子网掩码能满足正常的模块上网需求。但在专网应用场景,多个模块之间要求互通,自动计算子网掩码会导致这些模块不在同一个子网内,影响模块之间的互通。这种情况下需要将这些模块统一配置成相同的子网掩码,保证这些模块在同一个子网范围内。

可以使用AT指令配置模块WAN口的子网掩码。

2.2.3 上位机网口的子网掩码配置

正常情况下上位机网口的子网掩码是采用dhcp方式从模块获取的。

3 常见子网掩码问题定位

3.1 专网环境下模组之间无法通信

问题现象:专网环境下多个模块之间存在某2个模块之间无法ping通,例如A可以ping通C,B可以ping通C,但A无法ping通B

问题排查:这种情况下需要检查模块A和B的IP地址和子网掩码配置。检查A的IP对于B来说是否是B所在子网的正常的主机地址,同时检查B的IP对于A来说是否是A所在子网的正常的主机地址。如果不是对应子网的主机地址,就存在ping不通的现象。

  例如,对于192.168.200.72及192.168.200.73,对应的网络地址、广播地址如下:

由于192.168.200.72对于192.168.200.73来说是网络地址,而不是主机地址,192.168.200.73设备接收到来自192.168.200.72设备的数据包后,不会将数据包送给上层的应用程序,从而出现ping不通的现象。

问题解决方案:对于专网允许设备之间互相访问这种应用场景,需要取消模块wan口自动计算子网掩码,根据网络实际情况使用命令AT命令固定配置模块wan口的子网掩码。

3.2 上位机网口的子网掩码配置问题

问题现象:非IPPASS模式下上位机无法ping通模块内部bridge0的IP地址。

问题排查:检查上位机网口的IP地址和子网掩码配置,是否与模块内部bridge0的IP地址配置和子网掩码配置一致,确认上位机网口与模块内部bridge0是否处于同一个子网下。

问题解决方案:如果出现不一致的情况,可以使用命令AT命令配置dhcp广播的子网掩码,修改成一致。


http://www.kler.cn/a/585485.html

相关文章:

  • Jenkins 集成DingDing 推送
  • qt+opengl 播放yuv视频
  • 类和对象:
  • 【服务器知识】Nginx路由匹配规则说明
  • Kotlin关键字`when`的详细用法
  • NLP技术介绍
  • SpringBoot + ResponseBodyEmitter 实时异步流式推送,优雅!
  • FreeRTOS之信号量
  • GaussDB高安全—全密态数据库
  • Git常用操作之GitLab
  • 【MySQL】第十八弹---数据库管理基础:视图操作与用户权限管理指南
  • 芯谷D8563TS实时时钟/日历芯片详解可替代PCF8563
  • 【Java 基础(人话版)】进制转换
  • 爬虫基础之爬取豆瓣同城信息(保存为csv excel 数据库)
  • 【计算机网络】第八版和第七版的主要区别,附PDF
  • Chatbox通过百炼调用DeepSeek
  • Qt项目中集成第三方模块的.pri文件
  • hadoop集群配置-ssh无密登陆
  • 数据结构-栈(详解)
  • 【瞎折腾/Dify】使用docker离线部署Dify