EC20CE-HDLG在Windows下使用时的网络配置问题

使用官方驱动v2.2.4。同一张sim卡,在手机上能获取到ipv6 ula地址,在ec20上windows只能获取到ipv4地址。我想让windows也能获取到ipv6 ula地址,该怎么做?或者告诉我哪些技术文档是关于这个的?至少整个协议栈是怎么样的?我看tcp/ip应用指导文档也没有提到相关的内容。

Case closed.

自己研究了一番,大致明白是PDP上下文的问题。打算讲讲解决思路。
我不是搞通信的,所以下面很多术语可能会不准确/不符合行业惯例。

Anyway,模块作为一个完整的移动站MS,Mobile Station,此处指带有sim卡的模块),拥有通过空口拨号的能力。这是通过Packet Data Protocol协议完成的,拨号配置在专业上被称为一个PDP上下文。可以用多个PDP上下文同时向不同的网络(APN,接入点)进行拨号。

前已描述问题现象。而问题原因很简单,就是因为拨号配置只拨了ipv4。这可以通过AT+CGDCONT?语句来查询。
下面是我这边的测试结果。(记得crlf)

[16:07:21.919]发→◇at+cgdcont?
□
[16:07:21.923]收←◆at+cgdcont?
+CGDCONT: 1,"IP","CMNET","0.0.0.0",0,0,0,0
+CGDCONT: 2,"IPV4V6","IMS","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0,0
+CGDCONT: 3,"IPV4V6","CTWAP","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0,0
+CGDCONT: 4,"IPV4V6","SOS","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0,1

每一行代表一个拨号配置。各字段通过逗号分隔。根据Quectel_EC20_R2.1_AT_Commands_Manual_V1.0.pdf 章节10.2所述,语句含义如下:
<cid>,<PDP_type>,<APN>,<PDP_addr>,<data_comp>,<head_comp>[…]
其中<cid>是配置索引;<PDP_type>是拨号类型,可在“IP”、“PPP”、“IPV6” 、“IPV4V6”中选择;<APN>是接入点名称;<PDP_addr>是拨号时标明自身身份的地址,格式应与选择的拨号类型匹配,留空/忽略表示由使用模块一方(TE,Terminal Equipment,指使用MS通信的设备,此处指PC)在拨号时提供,或若无提供则向网络请求[1];<data_comp>表示PDP包数据段压缩启用标志;<head_comp>表示PDP数据包头部压缩启用标志。

那只需要将配置1改成双栈拨号就行了。不知道需不需要改正确的地址格式,总之我改的格式是配置2-4里面那样,看上去是仅ipv6地址。操作如下:

  1. 断开网络连接。在Windows上是在控制栏里的手机网络按钮,也可以通过向AT串口发AT+CGATT=0来实现。专业点的术语应该是“取消附加至网络”(?)。
  2. 修改PDP上下文。对于我的实例,我发送了at+cgdcont=1,"IPV4V6","CMNET","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0,0
  3. 重新连接网络。同样,控制栏里的按钮,或向AT串口发AT+CGATT=1

至此,拨号获得了ipv6 gua。问题解决。


附加内容:关于usbnet,以及TE如何使用MS提供的网络连接。

根据Quectel_EC2x&EG2x&EG9x&EM05_Series_QCFG_AT_Commands_Manual_V1.0.pdf 章节9.1,可以通过AT扩展命令集中的AT+QCFG="usbnet"命令来配置USB网卡类型。该值有4个选项,0对应RmNet模式、1对应ECM模式、2对应MBIM模式、3对应RNIDS模式。对于EC20CE-HDLG来说,移远方不推荐使用RNDIS模式,并且提供的Windows驱动v2.2也要求使用RmNet模式。Linux方无研究,不过貌似Linux主线有驱动,不用额外安装?

MS通过拨号获取到的地址(通过AT+CGPADDR查询)和TE所获得的网卡地址不同,合理推测MS创建了一个局域网,将TE接入进来,自身作为网关,下发ip,并转发ip包。

希望能帮到遇到同样问题的各位,也希望各位能指正我的理解中的错误。


  1. 按我的理解,这个参数应该是在自己已经拥有一个合法的离线分配的ip地址的时候向网络注册自己用的,这样这个ip就能被路由了 ↩︎