2、嵌入式网络基础回顾:TCP/IP协议栈分层模型,MAC地址、IP地址、端口号的概念,ARP协议工作原理

各位同学好,我是你们的老朋友。今天咱们正式进入嵌入式网络摄像头协议栈移植的第一课——先把网络基础夯实了。

说实话,我见过太多工程师一上来就撸代码,结果遇到网络不通、丢包、死机,排查好几天才发现是基础概念没搞清。嗯,咱们不犯这个错。今天的内容虽然基础,但都是硬通货。

2.1 TCP/IP协议栈分层模型——为什么非要分层?

先问大家一个问题:你写一个网络摄像头程序,数据从摄像头传感器出来,经过编码、打包、发送,到接收端解码显示,中间要处理多少件事?

数据怎么拆包?怎么保证不丢?怎么知道发给谁?怎么知道对方收到了?如果所有逻辑揉在一起,代码会变成一锅粥。

所以,TCP/IP协议栈采用了分层模型。说白了,就是各司其职,每层只干自己的活

标准模型分四层,我习惯用一张表来记:

层级 名称 核心职责 常见协议
第4层 应用层 用户数据怎么表示、怎么交互 HTTP、RTSP、MQTT
第3层 传输层 端到端可靠传输、流量控制 TCP、UDP
第2层 网络层 寻址、路由选择 IP、ICMP、ARP
第1层 链路层 物理介质访问、帧封装 以太网、Wi-Fi

你想想看,每一层都给上一层提供服务,同时隐藏实现细节。比如应用层只管发数据,不用管数据怎么拆成帧、怎么在网线上跑。这就是分层的好处。

我的经验:在嵌入式平台上移植协议栈时,我建议你重点关注第2层和第3层的接口。很多坑都出在这里——比如链路层驱动没写好,上层再牛也白搭。

2.2 MAC地址、IP地址、端口号——三个核心标识

这三个概念,我当年刚学时也容易搞混。后来我用一个比喻就记住了:

  • MAC地址 = 你的身份证号(全球唯一,出厂就定死了)
  • IP地址 = 你现在的住址(可以变,搬家就换)
  • 端口号 = 你家的门牌号(区分不同服务)

咱们一个一个说。

MAC地址

MAC地址是48位的,通常写成6组十六进制数,比如 00:1A:2B:3C:4D:5E。它烧录在网卡的ROM里,理论上全球唯一。

我在项目中遇到过一件事:某批摄像头MAC地址冲突了,导致局域网内两台设备反复掉线。排查了两天才发现是供应商烧录时搞错了。所以,MAC地址虽然叫“物理地址”,但实际是可以改的——很多嵌入式系统里,我们会在启动时从EEPROM读取并设置MAC。

IP地址

IP地址是逻辑地址,IPv4是32位的,比如 192.168.1.100。它分为网络号和主机号两部分。

在嵌入式网络摄像头里,IP地址通常有两种获取方式:

  • 静态IP:手动配置,适合固定场景
  • DHCP:自动获取,适合灵活部署

我个人习惯在产品出厂时默认用DHCP,同时保留静态IP的配置接口。这样用户拿到手就能用,高级用户也可以自己改。

端口号

端口号是16位的,范围0~65535。其中0~1023是知名端口,比如HTTP用80,RTSP用554。

你想想看,一个摄像头只有一个IP地址,但它可能同时提供视频流(RTSP端口554)、网页管理(HTTP端口80)、固件升级(自定义端口8080)。怎么区分?靠端口号。

一句话总结:MAC地址找设备,IP地址找网络位置,端口号找具体服务。三者缺一不可。

2.3 ARP协议工作原理——IP地址怎么变成MAC地址?

好,现在问题来了:你知道了对方的IP地址,但数据在链路上传输时,靠的是MAC地址。怎么把IP地址映射成MAC地址?

这就是ARP协议(地址解析协议)干的事。

ARP的工作流程

假设设备A(IP: 192.168.1.10)要发数据给设备B(IP: 192.168.1.20),但A不知道B的MAC地址。流程如下:

  1. A发送ARP请求:广播一个帧,问“谁的IP是192.168.1.20?请告诉我你的MAC地址”。这个广播帧的目标MAC是全F(FF:FF:FF:FF:FF:FF),局域网内所有设备都能收到。
  2. B回应ARP应答:B收到后,发现问的是自己,就单播回复“我是192.168.1.20,我的MAC是00:1A:2B:3C:4D:5E”。
  3. A缓存结果:A把IP和MAC的对应关系存入ARP缓存表,下次直接查表,不用再广播了。

这个过程,说白了就是“喊一嗓子,谁是谁,然后记下来”

ARP缓存与超时

ARP缓存不是永久有效的。我记得在某个项目中,设备更换了网卡(MAC变了),但其他设备的ARP缓存里还是旧记录,导致通信失败。折腾了半天才想到是ARP缓存没刷新。

所以,ARP缓存一般有超时时间,Linux下默认是60秒到300秒不等。你也可以手动清除:

# Linux下查看ARP缓存
arp -a

# 清除ARP缓存
ip neigh flush all

嵌入式环境下的ARP注意事项

在嵌入式系统里,ARP处理不当会出大问题:

  • ARP泛洪攻击:恶意设备发送大量虚假ARP应答,导致网络瘫痪。我在做安防摄像头时,专门加了ARP速率限制。
  • ARP表溢出:嵌入式设备的RAM有限,ARP表不能太大。我一般把表大小限制在32~64条,超过就淘汰最旧的。
  • 免费ARP:设备启动或IP变更时,主动发送ARP请求(目标IP是自己的IP),通知其他设备更新缓存。这个技巧在摄像头热插拔场景下非常有用。
避坑指南:我曾经在一个项目里,摄像头启动后立即发送视频流,但ARP解析还没完成,导致前几帧数据全部丢在链路上。解决方案是:在发送数据前,先主动发一次ARP请求,确认MAC地址已解析。

2.4 小结

今天的内容就这些。咱们回顾一下:

  • TCP/IP分层模型让网络协议变得清晰可维护
  • MAC地址、IP地址、端口号是网络通信的三个核心标识
  • ARP协议负责把IP地址解析成MAC地址,是网络层到链路层的桥梁

下一节课,咱们会深入讲解嵌入式系统中如何移植轻量级TCP/IP协议栈(比如LwIP),到时候这些基础概念会反复用到。打好基础,后面才跑得快。

好,今天就到这里。有问题随时交流。