2、以太网基础回顾:TCP/IP协议栈、UDP与TCP区别、以太网帧结构、车载以太网(100BASE-T1/1000BASE-T1)
好,咱们进入第二讲。做CAN到以太网网关迁移,你得先搞清楚以太网这边到底是怎么回事。说实话,很多做CAN的老工程师一听到TCP/IP就头大,觉得太复杂。我当年也一样,总觉得CAN多清爽,一帧就8个字节,哪有这么多弯弯绕。
但没办法,车载带宽需求上来了,ADAS、自动驾驶、OTA升级,CAN那点带宽根本扛不住。所以,咱们今天就把以太网这层窗户纸捅破。我尽量用大白话讲,你听完就能上手。
2.1 TCP/IP协议栈:别被四层吓到
TCP/IP协议栈,说白了就是一套“怎么把数据从A点送到B点”的规矩。它分四层,我习惯从下往上记:
- 网络接口层:管物理传输,比如网线、PHY芯片、MAC地址。说白了就是“怎么把比特流扔到线上去”。
- 网络层:核心是IP协议,负责寻址和路由。它不管数据怎么传,只管“下一站去哪”。
- 传输层:TCP和UDP就在这层。它管的是“数据怎么可靠地交给对方应用程序”。
- 应用层:HTTP、MQTT、SOME/IP这些,直接跟你的业务逻辑打交道。
你想想看,CAN报文只有一层——ID+数据。以太网呢?一层套一层,像俄罗斯套娃。但别怕,咱们做网关,最常打交道的是传输层和网络层。应用层的东西,通常由上层软件去处理。
2.2 UDP与TCP区别:一个像寄明信片,一个像打电话
这是面试必考题,也是实际开发中最容易踩坑的地方。我直接说结论:
| 特性 | UDP | TCP |
|---|---|---|
| 连接 | 无连接,发完就完 | 面向连接,先握手再发 |
| 可靠性 | 不可靠,丢了不重传 | 可靠,丢包会重传 |
| 顺序 | 不保证顺序 | 保证顺序 |
| 速度 | 快,开销小 | 慢,有确认和重传 |
| 典型应用 | 视频流、DNS、SOME/IP | 文件传输、HTTP、远程诊断 |
UDP就像寄明信片——你扔进邮筒,对方收不收得到,什么时候收到,你不管。TCP呢,像打电话——你先拨号(三次握手),对方接了,你说一句,对方“嗯”一声(确认),你再说下一句。
在车载环境里,SOME/IP通常跑在UDP上,因为实时性要求高,丢一帧就算了,下一帧补上。但远程诊断(比如UDS over IP)一般用TCP,因为诊断数据不能丢,丢了就得重来。
2.3 以太网帧结构:从比特流里扒数据
做网关,你得能从原始字节流里认出以太网帧。标准以太网帧长这样:
| 前导码(7B) | 定界符(1B) | 目标MAC(6B) | 源MAC(6B) | 类型/长度(2B) | 数据(46-1500B) | FCS(4B) |
咱们重点关注几个字段:
- 目标MAC和源MAC:6字节,硬件地址。网关转发时,这两个字段经常要改。
- 类型/长度:0x0800表示上层是IPv4,0x86DD是IPv6,0x8100是VLAN标签。这个字段决定了你接下来怎么解析。
- 数据:46到1500字节。如果不够46字节,要填充。如果超过1500,就得分片。
- FCS:4字节CRC校验。收到帧先算一遍,不对就丢。
嗯,这里要注意:车载以太网通常用VLAN标签(0x8100),用来区分不同优先级的数据流。比如ADAS数据优先级高,诊断数据优先级低。你在做网关时,VLAN的优先级映射是个关键点。
2.4 车载以太网:100BASE-T1和1000BASE-T1
车载以太网和咱们办公室用的以太网不一样。办公室用的是100BASE-TX或1000BASE-T,需要两对或四对差分线。车载呢?只有一对非屏蔽双绞线,还得供电(PoDL)。
这就是100BASE-T1和1000BASE-T1的由来。
| 特性 | 100BASE-T1 | 1000BASE-T1 |
|---|---|---|
| 速率 | 100 Mbps | 1 Gbps |
| 线缆 | 1对非屏蔽双绞线 | 1对非屏蔽双绞线 |
| 最大距离 | 15米 | 15米 |
| 调制方式 | PAM3 | PAM3 |
| 典型应用 | 诊断、OTA、摄像头 | ADAS、主干网 |
100BASE-T1现在用得最多,成本低,成熟度高。1000BASE-T1呢,主要用在主干网,比如域控制器之间。我建议你:如果项目带宽需求不超过100M,优先选100BASE-T1。别为了“看起来先进”硬上1000BASE-T1,PHY芯片贵不少,布线要求也更高。
最后说一句:车载以太网的物理层和MAC层之间,有个MII/RMII/RGMII接口。你做网关时,MCU或SoC的MAC通过这个接口连到PHY芯片。这个接口的时钟、数据线时序,调试时最容易出问题。我建议你第一次打板时,把MII接口的测试点都引出来,方便示波器抓波形。
好了,以太网基础就回顾到这。下一讲,咱们开始真正动手——CAN报文怎么封装进UDP包里,以及那个让人又爱又恨的SOME/IP协议。