网络相关知识下

Tutorial: 电子电路 Category: 嵌入式 Published: 2026-10-08 01:26:37 Views: 7 Likes: 0 Comments: 0

161.12.3网络相关知识(下)

本节继续讲网络协议、分层模型以及 Ethernet 硬件链路,没有编写新的业务代码,因此不在标题下补入与课堂无关的示例程序。学习时要把“软件协议栈的层次”和“电路板上的器件链路”对应起来,但不能把不同层随意合并。

一、网络协议

1.1 TCP与UDP的区别

TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)都位于 Internet 协议族的传输层,通常建立在 IP 之上。IP 负责把数据报送往目标主机,TCP/UDP 再通过端口把数据交给应用。

对比项TCPUDP
通信抽象面向连接的双向字节流无连接的数据报
建立连接通常先进行三次握手不建立传输层连接
可靠性有序号、确认、重传,向应用提供可靠且有序的字节流不保证到达、不保证顺序、不自动重传
数据边界不保留应用每次发送的消息边界,接收方看到连续字节流保留每个数据报边界,一次报文仍是一份报文
流量/拥塞控制协议内置UDP 本身没有,应用必要时自行设计
首部与状态首部较大,端点维护连接状态基本首部只有 8 字节,端点状态较少
广播/多播常规 TCP 只做单播连接可配合 IP 广播或多播
常见取舍文件、网页、远程登录等需要可靠字节流实时媒体、发现协议、简单请求响应等重视低开销或由应用控制时延

“UDP 快、TCP 慢”不是无条件结论。UDP 少了连接、确认和重传机制,但应用若需要可靠、排序、拥塞控制,最终仍要自己实现相应功能。TCP 也不是“一发送,对方应用就立刻收到”:数据可能被分段、合并和缓冲,应用必须处理粘包/拆包,即自己定义消息边界。

课程从 ESP8266 到 W5500 的网络助手实验采用 TCP:网络助手监听为 Server,模块主动连接为 Client。W5500 把 TCP 状态机、重传等大量工作放在芯片硬件协议栈中,STM32 主要操作 Socket 寄存器和收发缓冲区。

1.2 TCP的三次握手

三次握手不是含糊的“互相确认三次”,而是双方同步初始序号并确认双向收发路径。典型过程如下:

  1. 客户端主动打开,发送 SYN=1, SEQ=x,进入 SYN-SENT。
  2. 服务端在 LISTEN 状态收到后,回复 SYN=1, ACK=1, SEQ=y, ACK=x+1,进入 SYN-RECEIVED。一个报文同时完成“确认客户端序号”和“发送服务端序号”。
  3. 客户端回复 ACK=1, SEQ=x+1, ACK=y+1 并进入 ESTABLISHED;服务端收到这份 ACK 后也进入 ESTABLISHED。

可简写为:

Client --SYN(x)--> Server

Client <--SYN(y), ACK(x+1)-- Server

Client --ACK(y+1)--> Server

第二步把 SYN 与 ACK 合并,所以同步双方序号所需的四个逻辑动作通常由三个报文完成。握手还能降低旧的重复 SYN 被误认为新连接的风险。Client/Server 是连接建立时的主动/被动角色,不等同于“只能发送/只能接收”;建立后的 TCP 是全双工。

在本课程 W5500 例程中,Socket_Connect(0) 让 Socket 0 主动发起连接;只有状态到达 SOCK_ESTABLISHED(例程抽象为连接状态位)后,业务数据才应正常发送。

1.3 TCP的四次挥手

TCP 全双工连接的两个方向可以独立关闭,因此典型主动关闭过程分为四个逻辑步骤:

  1. A 发送 FIN:A 表示自己没有更多数据要发送,但仍可接收。
  2. B 回复 ACK:确认 A 的发送方向已关闭;B 还可继续发送剩余数据。
  3. B 的应用也关闭后,B 发送自己的 FIN。
  4. A 回复 ACK;主动关闭方通常进入 TIME-WAIT,等待足够时间后才彻底删除连接状态。

通常画成四个报文,原因是 B 对 A 的 FIN 的 ACK 与 B 自己的 FIN 属于两个独立动作,中间可能还有数据处理时间。但若 B 立即关闭,ACK 和 FIN 可以出现在同一个报文中;同时关闭、超时或 RST 异常终止时,报文序列也不同。所以“四次挥手”是典型正常关闭模型,不是所有抓包都固定出现四个独立包。

RST 表示复位/中止连接,与 FIN 的有序关闭不同。断电、程序崩溃、访问不存在的连接或严重协议异常时,连接可能没有完整四次挥手。

1.4 面试

真正需要掌握的不是背四个数字,而是能够解释:

  • TCP 为何需要序号、ACK、重传、流量控制和拥塞控制。
  • 三次握手中每个 SYN/ACK 确认了什么,为什么第二、三次不能随意省略。
  • TCP 是字节流、UDP 是数据报,这对接收代码和应用协议有什么影响。
  • 正常关闭为什么允许半关闭,为什么典型情况下 FIN 与 ACK 分开。
  • SPI 的 CPOL/CPHA,以及 I²C 的 START、STOP、地址、读写位和 ACK/NACK。

Socket 不是 TCP/UDP 的另一个“底层协议”,而是操作系统或网络库提供给程序的编程抽象。应用通过 socket、bind、listen、connect、send/recv 等接口使用 TCP/UDP;W5500 则提供 8 个硬件 Socket 及相应寄存器命令,概念相似但 API 形式不同。

音视频并不等于“一律 UDP”。实时互动常选择 UDP 或基于 UDP 的传输,以便应用自行控制时延、丢包恢复和拥塞;点播、下载或某些网络环境仍可能使用 TCP。协议选择应根据是否允许丢包、时延目标、网络穿透和应用实现综合判断。

1.5 网络模型

分层的目的,是让每层只处理一类问题,并向上层提供相对稳定的服务。发送端数据从应用层逐层加首部并下传,接收端再逐层检查和去封装。

一个本实验 TCP 数据的大致封装顺序是:

应用字符串 → TCP 段 → IPv4 数据报 → Ethernet 帧 → 双绞线电信号

反方向接收时依次解封装。SPI 帧只存在于 STM32 与 W5500 的本地主机接口上,不会原样沿网线发到电脑。

1.5.1 OSI七层参考模型
OSI 层核心职责本课程可联系的例子
7 应用层为应用提供具体网络服务和消息语义HTTP、DNS、FTP、SMTP、Telnet、自定义 W5500 测试字符串
6 表示层数据表示、编码、压缩、加密等字符编码、序列化、TLS 记录的部分功能可作类比
5 会话层会话建立、同步和管理现代 Internet 应用常把其功能并入应用层
4 传输层端到端进程通信TCP、UDP、端口
3 网络层跨网络寻址和路由IPv4、IPv6、ICMP
2 数据链路层同一链路的成帧、MAC 寻址和差错检测Ethernet MAC、MAC 地址、帧 CRC
1 物理层比特的电/光/无线传输Ethernet PHY、变压器、双绞线、光模块

工程中更常直接使用 TCP/IP 模型:应用层、传输层、Internet 层、链路层;教学中的“五层模型”通常把链路层再拆为数据链路层和物理层。不同模型的边界并非逐项完全重合,但 IP 明确属于网络/Internet 层,不能与 TCP、UDP 一起统称传输层。

1.5.2 三层网络

视频把七层压缩成“物理、传输、应用”三类,是帮助入门的个人类比,不能当作标准网络模型。它会掩盖两个关键区别:

  • 数据链路层只处理当前链路;经过路由器转发时,新一跳 Ethernet 帧中的源、目的 MAC 字段会被替换,并不是网卡自身的 MAC 地址在路由过程中改变。网络层 IP 地址才用于跨多个链路路由。
  • 网络层 IP 提供无连接数据报,传输层 TCP/UDP 才面向应用端口;两者责任不同。

同样,I²C 的 SCL/SDA、电气电平、START/STOP/ACK 与 OLED 命令之间可以用“底层到上层”帮助理解,但 I²C 不是 Internet 协议栈,不能正式把 I²C START/ACK 称作 OSI 传输层。更严谨的说法是:

GPIO/引脚电气 → I²C 总线事务 → OLED 控制器命令 → 应用显示内容

网络中的对应关系则是:

PHY/介质 → Ethernet 帧 → IP → TCP/UDP → 应用协议与数据

1.6 硬件相关知识

1.6.1 MAC、PHY、磁性器件和接口

完整的双绞线 Ethernet 硬件链路通常是:

CPU/MCU 与内存 → Ethernet MAC → MII/RMII 等数字接口 → PHY → 网络变压器/共模器件 → 8P8C 模块化插座(俗称 RJ45)→ 网线

  • MAC 控制器位于数据链路层,负责 Ethernet 帧的收发、MAC 地址、帧校验和介质访问相关功能。它不一定集成在“CPU 内部”,也可以位于独立网络控制器中。
  • MAC 地址是 MAC 控制器使用的 48 位地址值,和名为 MAC 的硬件功能块不是同一个概念。
  • PHY是物理层收发器,把 MAC 侧数字数据转换为网线上的编码差分电信号,并处理自动协商、速率和双工等物理层功能。
  • **网络变压器(magnetics)**提供隔离、阻抗匹配和共模抑制。成品带网口模块常把变压器集成在插座内,电路框图若只画 PHY→RJ45,容易漏掉这一关键器件。
  • 日常称“RJ45 网口”的连接器通常是 8P8C 模块化插座;RJ45 是沿用已久的俗称。插座本身不等于 MAC、PHY 或完整网卡。

不要把 MCU GPIO 直接接到网线差分对。100BASE-TX 等 Ethernet 需要 PHY、时钟、阻抗控制、隔离磁性器件和符合规范的 PCB 走线。

1.6.2 W5500方案

W5500 芯片把硬件 TCP/IP 协议栈、Ethernet MAC 和 10/100 PHY 集成在一起,对 STM32 提供最高 80 MHz 的 SPI 主机接口。成品模块再配晶振、去耦、网络变压器、8P8C 插座及 LED 等外围,因此链路是:

STM32F103 → SPI → W5500(Socket/TCP/IP + MAC + PHY)→ 磁性器件 → 网口 → 网线

STM32F103ZET6 自身没有 Ethernet MAC,因此不能只外接 LAN8720 这类 PHY 就完成联网;使用 W5500 的好处是 MCU 不需要自己运行完整软件 TCP/IP 栈,代价是网络能力和 Socket/缓冲资源受 W5500 硬件设计约束。

STM32F107 和 STM32F407 系列包含 10/100 Ethernet MAC,可通过 MII/RMII 连接外部 PHY,例如 LAN8720,但仍需要 PHY、磁性器件、接口以及软件 TCP/IP 栈。是否“带 MAC”必须查到具体型号,不能仅按“型号中有 07”概括所有单片机。

1.6.3 LINK与ACT指示灯

LINK 表示 PHY 已与对端建立物理链路;ACT(Activity)表示有帧活动。视频模块上表现为绿灯显示链路、黄灯随数据闪烁,但颜色和亮灭极性不是统一标准,应查看模块原理图或丝印。流量很密集时 ACT 可能看起来常亮,偶尔闪灯也不能证明 TCP 应用已连接成功。

W5500 数据手册提供 LINKLED、ACTLED 等输出,其中引脚逻辑为低有效;成品模块如何接 LED 会决定肉眼看到的效果。拔掉网线后 LINK 熄灭只能帮助定位物理层,不能替代对 IP、端口和 Socket 状态的检查。

1.6.4 百兆、千兆与万兆
  • W5500 只支持 10BASE-T/100BASE-TX,即 10/100 Mbit/s,不是千兆控制器。
  • 电脑网卡即使支持 1 Gbit/s,也会通过自动协商与 W5500 建立 100 Mbit/s 或 10 Mbit/s 链路;电脑标称千兆不会让 W5500 变成千兆。
  • 10 Gigabit Ethernet 不只使用光纤。它既有 10GBASE-SR/LR 等光纤方案,也有 10GBASE-T 双绞线铜缆、SFP+ DAC/AOC 等方案。
  • SFP/SFP+“笼子”只是可插拔模块接口;插进去的可以是光模块、铜缆模块或直连铜缆,所以看到笼子不能直接断言一定走光纤。

百兆、千兆、万兆是物理链路的标称位速率,应用实际吞吐还要扣除 Ethernet/IP/TCP 首部、帧间隔、重传和软件处理时间。

二、容易混淆的关键点

  • TCP 的可靠性是协议提供给应用的字节流语义,不等于网络中不会丢包;丢包后会重传。
  • UDP 无连接不等于“完全没有状态”,应用和 NAT/防火墙仍可能维护映射或会话状态。
  • 三次握手用于同步双方序号;正常关闭典型为四个逻辑动作,但报文可以合并。
  • IP 是网络层,TCP/UDP 是传输层,HTTP/DNS/FTP 属于应用层。
  • RJ45/8P8C 是连接器,PHY 是收发器,MAC 是链路层控制器,四者不能互相替代。
  • STM32F103 + W5500 与 STM32F107/F407 + 外部 PHY 是两种不同架构。
  • LINK/ACT 灯只能反映部分底层状态,不能证明 TCP 6000 端口已建立连接。

三、参考依据