第三章 IP协议栈配置:IP地址配置、子网掩码与网关、IP转发与路由、多播配置

好,咱们进入第三章。这一章讲的是IP协议栈的配置,说白了就是怎么让VxWorks里的网络协议栈“认识”网络,并且能正确地收发数据。我见过不少新手,甚至有些老手,在IP配置上栽跟头。其实核心就四个东西:IP地址、子网掩码、网关,还有路由转发。多播配置算是进阶内容,但实际项目中也很常见。

3.1 IP地址配置:别小看这个ifconfig

在VxWorks里配IP,最直接的方式就是用ifconfig命令。嗯,跟Linux很像,但细节上有些不同。我个人习惯在系统启动脚本里就把IP配好,省得后面手忙脚乱。

核心命令:

ifconfig eth0 inet 192.168.1.100 netmask 255.255.255.0 up

这里要注意几点:

  • 接口名:VxWorks里通常是eth0gei0这种,具体看BSP。我遇到过有人把gei0写成ge0,结果折腾了半天。
  • up参数:别忘了加。不加的话接口是down的,数据发不出去。
  • 持久化:ifconfig配的IP重启就丢了。要持久化,得写到usrNetInit.c或者启动脚本里。

如果你用的是VxWorks 7,还可以通过VSB(VxWorks Source Build)的配置界面来设IP。但我个人觉得,命令行更直接,调试时也方便。

小技巧:配完IP后,马上用ifconfig不带参数看一眼,确认配置生效了。我曾经在项目里发现配了IP但没生效,结果是网卡驱动没加载好。

3.2 子网掩码与网关:别让数据包迷路

子网掩码决定了你的设备能直接跟谁通信。说白了,就是判断目标IP是不是在同一个局域网里。

举个例子:

  • IP: 192.168.1.100
  • 掩码: 255.255.255.0
  • 那么192.168.1.0/24这个网段内的设备,可以直接通信。
  • 如果目标IP是192.168.2.1,那就得走网关。

网关配置也很简单:

route add default 192.168.1.1

这里有个坑——我曾经在项目里配了网关,但忘了配子网掩码。结果VxWorks默认用了A类掩码(255.0.0.0),导致所有IP都认为在同一个网段,数据包全走本地,网关根本没用上。嗯,排查了好久才发现。

警告:子网掩码和网关必须配套。掩码错了,网关就是摆设。建议配完后用netstat -r查看路由表,确认默认路由存在。

3.3 IP转发与路由:让设备当个“小路由器”

VxWorks默认是不转发IP包的。也就是说,它不会把从一个网口收到的数据包,转发到另一个网口。但有些场景下,比如你的设备有两个网口,一个连内网,一个连外网,你就得开启IP转发。

开启方式:

ipforward on

或者通过内核配置:

sysctl -w net.ipv4.ip_forward=1

我记得有个项目,设备需要同时连接两个子网。一开始没开转发,结果两个网口各自为政,数据根本不通。开了转发后,再配上静态路由,问题就解决了。

静态路由配置示例:

route add 10.0.0.0 255.0.0.0 192.168.1.2

这条命令的意思是:去往10.0.0.0/8网段的数据包,都发给192.168.1.2这个下一跳。

路由表查看:

netstat -r

输出会显示目标网络、网关、接口等信息。我习惯先看默认路由在不在,再看特定路由。

3.4 多播配置:组播其实没那么神秘

多播(组播)在工业通信里很常见,比如IEC 61850、PTP(精确时间协议)都用到了。VxWorks对多播的支持很成熟,但配置时有些细节要注意。

首先,要让设备加入一个多播组:

ifconfig eth0 multicast
route add 224.0.0.0 240.0.0.0 eth0

然后,应用程序里调用setsockopt加入组播组:

struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = inet_addr("224.0.0.1");
mreq.imr_interface.s_addr = inet_addr("192.168.1.100");
setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));

这里有个容易忽略的点——imr_interface要填本机IP,不是随便填的。我见过有人填了0.0.0.0,结果多播包收不到。

避坑指南:我曾经在项目里发现多播包能发出去,但收不到。排查了半天,发现是交换机没开启IGMP Snooping。嗯,有时候问题不在协议栈,而在网络设备上。

另外,VxWorks支持IGMP协议,默认是开启的。如果你不需要,可以关掉:

igmp off

但我不建议关,除非你明确知道自己在做什么。IGMP能帮助交换机优化多播转发,减少不必要的网络流量。

3.5 实战经验总结

好,这一章的内容差不多就这些。我最后总结几个要点:

  1. IP配置:ifconfig配完记得检查,别漏了up参数。
  2. 子网掩码:决定了通信范围,错了网关就废了。
  3. IP转发:默认关闭,多网口场景记得开启。
  4. 多播:加入组播组时,接口IP别填错。网络设备也可能有影响。

下一章我们会讲TCP/UDP传输层配置,那才是真正考验协议栈功底的地方。到时候见。