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.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)。怎么区分?靠端口号。
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地址。流程如下:
- A发送ARP请求:广播一个帧,问“谁的IP是192.168.1.20?请告诉我你的MAC地址”。这个广播帧的目标MAC是全F(FF:FF:FF:FF:FF:FF),局域网内所有设备都能收到。
- B回应ARP应答:B收到后,发现问的是自己,就单播回复“我是192.168.1.20,我的MAC是00:1A:2B:3C:4D:5E”。
- 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),通知其他设备更新缓存。这个技巧在摄像头热插拔场景下非常有用。
2.4 小结
今天的内容就这些。咱们回顾一下:
- TCP/IP分层模型让网络协议变得清晰可维护
- MAC地址、IP地址、端口号是网络通信的三个核心标识
- ARP协议负责把IP地址解析成MAC地址,是网络层到链路层的桥梁
下一节课,咱们会深入讲解嵌入式系统中如何移植轻量级TCP/IP协议栈(比如LwIP),到时候这些基础概念会反复用到。打好基础,后面才跑得快。
好,今天就到这里。有问题随时交流。