【Net】TCP/IP 协议
TCP/IP 协议
TCP/IP 协议 知识点主要包括:分层结构、核心协议、工作机制、应用示例(含 C/C++ 编程)、常见问题排查等,适用于嵌入式、上位机、网络编程学习或系统开发。
一、什么是 TCP/IP?
TCP/IP 是互联网通信协议族(协议栈)的总称,并非单一协议,而是一组网络协议的统称。它是现代网络通信(如网页、FTP、邮件、IoT、嵌入式上位机通信等)的基础。
二、TCP/IP 协议栈分层结构
TCP/IP 模型通常分为 4 层(对应 OSI 7 层的压缩版):
TCP/IP 层 | 功能 | 常见协议 |
---|---|---|
应用层 (Application) | 提供具体应用服务 | HTTP, FTP, SSH, DNS, MQTT |
传输层 (Transport) | 端到端可靠/不可靠数据传输 | TCP(可靠), UDP(不可靠) |
网络层 (Internet) | 负责寻址与路由 | IP, ICMP, ARP |
链路层 (Link) | 负责硬件传输(如以太网帧) | Ethernet, PPP, Wi-Fi |
三、核心协议详解
IP 协议(Internet Protocol)
- 作用:提供主机之间的寻址与数据转发
- 特点:不可靠、无连接
- 数据包结构包括:源 IP、目的 IP、TTL、标识、分片等
TCP 协议(Transmission Control Protocol)
-
作用:提供可靠、面向连接的端到端传输
-
特点:
- 三次握手建立连接
- 四次挥手断开连接
- 流量控制、拥塞控制、超时重传
-
应用场景:Web 服务、文件传输、远程登录
UDP 协议(User Datagram Protocol)
- 作用:提供无连接、不可靠但轻量的数据传输
- 特点:无握手、发送即忘、延迟低
- 应用场景:实时音视频、游戏、广播、嵌入式下位机通信
四、TCP 三次握手 / 四次挥手
三次握手(建立连接):
- Client → Server:发送 SYN(同步)
- Server → Client:SYN + ACK(确认)
- Client → Server:ACK
四次挥手(关闭连接):
- Client → Server:FIN
- Server → Client:ACK
- Server → Client:FIN
- Client → Server:ACK
握手建立连接可靠性,挥手确保数据传输完整关闭。
五、C/C++ Socket 编程(基于 TCP/IP)
TCP 服务器(C)
int server_fd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in addr = {};
addr.sin_family = AF_INET;
addr.sin_port = htons(12345);
addr.sin_addr.s_addr = INADDR_ANY;bind(server_fd, (struct sockaddr*)&addr, sizeof(addr));
listen(server_fd, 5);int client_fd = accept(server_fd, NULL, NULL);char buffer[1024];
read(client_fd, buffer, sizeof(buffer));
write(client_fd, "Hello Client", 12);
TCP 客户端(C)
int sock = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in server = {};
server.sin_family = AF_INET;
server.sin_port = htons(12345);
inet_pton(AF_INET, "127.0.0.1", &server.sin_addr);connect(sock, (struct sockaddr*)&server, sizeof(server));send(sock, "Hello Server", 12, 0);
recv(sock, buffer, sizeof(buffer), 0);
六、TCP/IP 与嵌入式上位机通信
场景 | 上位机 | 下位机 | 通信方式 |
---|---|---|---|
STM32 ↔ PC | Qt/Console程序 | STM32 LwIP + TCP Server | TCP |
ESP32 ↔ 上位机 | Python/C++ | ESP32 Arduino TCP Server | TCP |
网关 ↔ 云端平台 | REST/gRPC/MQTT | 网关 Linux/C 编写 TCP 客户端 | TCP 或 TLS |
七、TCP/IP 数据封包结构简图
以太网帧└─IP 数据包└─TCP 段└─应用数据(如 HTTP/自定义协议)
每一层加一层包头,层层封装,形成所谓“协议栈”。
八、TCP 常见问题 & 调试工具
常见问题
- 连接不上 → 防火墙或监听地址不对
- 接收阻塞 → 对方未发送数据或没 flush
- 粘包/拆包 → 使用 length-prefix 协议或自定义帧尾
常用调试工具
工具 | 功能 |
---|---|
netstat | 查看端口占用 |
tcpdump | 抓包分析 TCP/IP 层数据 |
Wireshark | 图形化协议分析利器 |
nc / ncat | 快速测试 TCP 连接 |
九、TCP/IP 与 RPC 结合
TCP 是实现 RPC 框架的主力协议之一。
例如:
- gRPC → 基于 HTTP/2 + Protobuf + TCP
- Thrift → TCP + 二进制协议
- 自定义 RPC → TCP + 自定义帧格式 + 方法映射
十、总结
维度 | TCP | UDP |
---|---|---|
是否可靠 | ✅ 是(有重传) | ❌ 否(丢包不管) |
是否连接 | ✅ 是(握手) | ❌ 否(无连接) |
适合应用 | HTTP、文件传输、数据库 | 实时游戏、直播、传感器广播 |
是否顺序 | ✅ 保证顺序 | ❌ 不保证 |