当前位置: 首页 > web >正文

【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 三次握手 / 四次挥手

三次握手(建立连接):

  1. Client → Server:发送 SYN(同步)
  2. Server → Client:SYN + ACK(确认)
  3. Client → Server:ACK

四次挥手(关闭连接):

  1. Client → Server:FIN
  2. Server → Client:ACK
  3. Server → Client:FIN
  4. 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 ↔ PCQt/Console程序STM32 LwIP + TCP ServerTCP
ESP32 ↔ 上位机Python/C++ESP32 Arduino TCP ServerTCP
网关 ↔ 云端平台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 + 自定义帧格式 + 方法映射

十、总结

维度TCPUDP
是否可靠✅ 是(有重传)❌ 否(丢包不管)
是否连接✅ 是(握手)❌ 否(无连接)
适合应用HTTP、文件传输、数据库实时游戏、直播、传感器广播
是否顺序✅ 保证顺序❌ 不保证
http://www.xdnf.cn/news/13703.html

相关文章:

  • 计算机视觉之三维重建(深入浅出SfM与SLAM核心算法)—— 2. 摄像机标定
  • 经典 C 程序 100 例实战详解:从入门到精通的一周学习计划
  • 【论文阅读32】预期寿命预测(2024)
  • 使用 MkDocs 构建并部署项目文档到 GitHub Pages
  • OpenCV基础知识
  • Cesium1.95中加载模型过多导致内存溢出的解决方案(服务端层面、代码层面、浏览器层面)
  • 大白话解释蓝牙的RPC机制
  • [vale os_3] 文件系统/VFS | 网络协议栈
  • 【React】SWR 和 React Query(TanStack Query)
  • 力扣HOT100之技巧:169. 多数元素
  • 【Zephyr 系列 21】OTA 升级与产测系统集成:远程配置、版本验证、自动回滚机制设计
  • 请问黑盒测试和白盒测试有哪些方法?
  • 力扣-198.打家劫舍
  • leetcode HOT100(49.字母异位词分组)
  • 怎样解决在ubuntu 22.04上QT: DataVisualization控件显示黑屏的问题
  • 触觉智能RK3576核心板工业应用之软硬件全国产化,成功适配开源鸿蒙OpenHarmony5.0
  • LangGraph--带记忆和工具的聊天机器人
  • Modbus TCP转DeviceNet网关连接ABB变频器配置案例
  • 破解关键领域软件测试“三重难题”:安全、复杂性、保密性
  • 电脑、手机长时间不关机可以吗
  • Rabbitmq后台无法登录问题解决
  • Genio 1200 Evaluation MT8395平台安装ubuntu
  • 全栈监控系统架构
  • 22、话题重名及解决方案
  • 销售预测的方法与模型(二)丨商品与库存分类——基于数据模型运营的本质和底层逻辑销售
  • Spring MVC 入门案例:从代码到原理的深度剖析
  • Docker 构建文件代码说明文档
  • qemu-kvm+virt-manager创建虚拟机设置桥接模式
  • 告别手动做PPT!4款AI工具实现自动化生成
  • Python—turtle绘图库使用方法