1. TCP/IP 协议栈概述

TCP/IP 协议栈是互联网与嵌入式设备网络通信的基石。理解其分层架构与核心协议族,是后续配置 IP 地址、端口以及调试 TCP/IP 通信链路的理论基础。本节将从 OSI 七层模型与 TCP/IP 四层模型的对比入手,逐步深入核心协议族。

1.1 OSI 七层模型与 TCP/IP 四层模型对比

OSI(开放系统互连)模型是国际标准化组织(ISO)制定的理论参考模型,而 TCP/IP 模型则是基于实际工程应用发展而来的事实标准。两者在分层理念上一致,但在层数、功能划分和协议对应关系上存在显著差异。

核心要点: OSI 是“理想蓝图”,TCP/IP 是“工程实现”。嵌入式开发中,我们主要遵循 TCP/IP 模型,但常借用 OSI 的术语(如“数据链路层”)来精确描述问题。

分层对比表

OSI 七层模型 TCP/IP 四层模型 核心功能 嵌入式典型协议/接口
7. 应用层 4. 应用层 为用户应用提供网络服务 HTTP, MQTT, CoAP, Modbus TCP, FTP
6. 表示层 数据格式转换、加密、压缩 TLS/SSL(实际在应用层实现)
5. 会话层 建立、管理和终止会话 NetBIOS(较少在嵌入式直接使用)
4. 传输层 3. 传输层 端到端连接、可靠传输、流量控制 TCP, UDP
3. 网络层 2. 网络层 逻辑寻址、路由选择、分组转发 IP (IPv4/IPv6), ICMP, ARP
2. 数据链路层 1. 网络接口层 帧封装、物理寻址(MAC)、差错检测 Ethernet, PPP, SLIP, Wi-Fi (802.11)
1. 物理层 比特流传输、电气特性、机械特性 RJ45, RS-232, RS-485, SPI(内部总线)
嵌入式视角: 在调试 TCP/IP 链路时,80% 的问题集中在“网络接口层”(如网线松动、PHY 芯片配置错误)和“传输层”(如端口被占用、TCP 连接超时)。OSI 的 5/6/7 层在嵌入式领域通常合并处理。

OSI 与 TCP/IP 模型对比 SVG 图

OSI 七层模型与 TCP/IP 四层模型对比 OSI 七层模型 7. 应用层 6. 表示层 5. 会话层 4. 传输层 3. 网络层 2. 数据链路层 1. 物理层 TCP/IP 四层模型 4. 应用层 3. 传输层 2. 网络层 1. 网络接口层 OSI 是理论模型,TCP/IP 是事实标准 嵌入式开发以 TCP/IP 模型为准

1.2 核心协议族介绍

TCP/IP 协议族并非单个协议,而是一组协同工作的协议集合。在嵌入式设备端 IP 与 Port 配置及链路调试中,以下协议是必须掌握的核心。

1.2.1 网络层核心协议

  • IP(Internet Protocol):提供无连接、不可靠的数据报传输服务。负责将数据包从源主机路由到目标主机。IPv4 地址是 32 位,IPv6 是 128 位。
  • ICMP(Internet Control Message Protocol):用于在 IP 网络中传递错误报告和诊断信息。常用工具 ping 和 traceroute 基于 ICMP 实现。
  • ARP(Address Resolution Protocol):将网络层 IP 地址解析为数据链路层 MAC 地址。在局域网通信中至关重要。

1.2.2 传输层核心协议

特性 TCP(传输控制协议) UDP(用户数据报协议)
连接方式 面向连接(三次握手) 无连接
可靠性 可靠传输(确认、重传、排序) 不可靠(尽力交付)
数据边界 字节流(无边界) 报文(保留边界)
流量控制 支持(滑动窗口) 不支持
典型应用 HTTP, FTP, Telnet, MQTT DNS, DHCP, SNMP, 视频流
嵌入式场景 配置管理、固件升级 传感器数据上报、设备发现
调试陷阱: 在嵌入式设备中,TCP 的“三次握手”和“四次挥手”过程极易受网络延迟和缓冲区大小影响。如果设备端 TCP 连接频繁断开,应优先检查 SO_RCVBUF 和 SO_SNDBUF 的配置,而非盲目修改应用层逻辑。

1.2.3 应用层常用协议

  • HTTP/HTTPS:Web 配置接口、RESTful API 通信。
  • MQTT:轻量级发布/订阅协议,专为物联网和嵌入式设备设计。
  • Modbus TCP:工业自动化领域广泛使用的通信协议。
  • DHCP:动态主机配置协议,自动分配 IP 地址。
  • DNS:域名解析服务,将域名转换为 IP 地址。

TCP/IP 核心协议栈架构 SVG 图

TCP/IP 核心协议栈架构 TCP/IP 核心协议栈架构 应用层 (Application Layer) HTTP | MQTT | CoAP | Modbus TCP | DHCP | DNS 数据格式:应用数据流 传输层 (Transport Layer) TCP (可靠、面向连接) UDP (不可靠、无连接) 数据单元:TCP 段 / UDP 数据报 网络层 (Internet Layer) IP (IPv4 / IPv6) ICMP ARP 数据单元:IP 数据包 网络接口层 (Network Interface Layer) Ethernet (IEEE 802.3) Wi-Fi (IEEE 802.11) 数据单元:帧 (Frame) | 物理地址:MAC 数据封装过程:应用数据 → TCP/UDP 头 → IP 头 → 帧头 调试时逐层检查:IP 连通性 → 端口可达性 → 应用协议

1.3 数据封装与解封装过程

当设备端发送数据时,数据从应用层向下逐层传递,每层添加自己的头部信息(Header),这个过程称为封装。接收端则反向操作,逐层去掉头部,称为解封装。

封装步骤(以 TCP 为例)

  1. 应用层:生成应用数据(如 HTTP 请求报文)。
  2. 传输层:添加 TCP 头部(源端口、目的端口、序列号等),形成 TCP 段。
  3. 网络层:添加 IP 头部(源 IP、目的 IP、协议号等),形成 IP 数据包。
  4. 网络接口层:添加帧头部(源 MAC、目的 MAC、类型等)和帧尾部(FCS 校验),形成以太网帧。
调试关键点: 使用 Wireshark 抓包时,观察每一层的头部信息可以快速定位问题。例如,IP 层校验和错误通常指示硬件或驱动问题;TCP 层频繁重传则暗示网络拥塞或对端无响应。

常见协议端口号速查表

协议 默认端口 传输层 说明
HTTP 80 TCP Web 服务
HTTPS 443 TCP 加密 Web 服务
MQTT 1883 TCP 物联网消息推送
Modbus TCP 502 TCP 工业自动化
DHCP 67/68 UDP 动态 IP 分配
DNS 53 UDP 域名解析
配置建议: 在设备端配置 IP 与 Port 时,应避免使用知名端口(0-1023)作为自定义服务端口,建议使用 1024-49151 之间的注册端口,并确保端口未被其他服务占用。