目录

一、前言

大家好,这里是 Hello_Embed。在嵌入式开发中,单片机负责数据采集与控制,而上位机(PC 端软件)则承担数据展示、分析、存储等功能。两者之间的桥梁就是网络通信。本篇将从最基础的问题入手,为后续编写网络程序打下理论基础。


二、网络通信的本质

网络通信一般用于数据传输

memcpy 类比,它需要传三个参数:目的、源、长度。要使用网络传输数据也需要目的、源、长度。

void *memcpy(void *dest, const void *src, size_t n);
// dest: 目的地址 - 数据发往哪里
// src: 源地址 - 数据从哪里来
// n: 长度 - 传输多少数据

我们知道 PC 有 IP 地址,那么两台 PC 进行网络通信是否就足够了呢?


三、为什么需要端口

举个常见的例子:电脑 A 的两个浏览器访问同一个 HTTP 服务器,此时浏览器发出的数据里源 IP、APP1、APP2、服务器 IP、目的端口都相同,为了区分浏览器所以增加源端口的概念来精确匹配。

同样的,PC 上的两个软件:SSH Client 和浏览器访问同一个网站,但两个软件期望得到不同的服务,此时 PC 两个源发送的目的还需要得到目的具体的端口。

IP 地址定位到主机,端口号定位到主机上的具体应用程序。

网络通信五元组:源 IP、源端口、目的 IP、目的端口、协议


四、网络传输中的两个对象

我们经常访问网站,这涉及两个对象:网站服务器浏览器

网站服务器平时安静等待(被动地响应请求),而浏览器主动发起数据请求。网站服务器、浏览器可以抽象成两个软件的概念:Server 程序Client 程序

角色 特点
Server 被动等待,响应请求
Client 主动发起,请求数据

五、两种传输方式

在一般的网络传输中,网络协议被分为 5 层:应用层、运输层、网络层、链路层、物理层。

层次 名称 功能
第 5 层 应用层 用户编写的 APP 程序
第 4 层 运输层 向两个主机中进程之间的通信提供服务
第 3 层 网络层 主机间的通信
第 2 层 链路层 相邻节点间的数据传输
第 1 层 物理层 比特流的传输

运输层主要使用以下两种协议:

1. 传输控制协议 TCP

  • 面向连接,数据传输的单位是报文段
  • 传输的数据可靠
  • 适用场景:传输文件时选择 TCP 保证文件的完整性

2. 用户数据包协议 UDP

  • 无连接的,数据传输的单位是用户数据报
  • 传输的数据不可靠
  • 适用场景:视频通话场景中选择 UDP 保证通话过程的流畅
对比项 TCP UDP
连接方式 面向连接 无连接
可靠性 可靠 不可靠
适用场景 文件传输、网页浏览 视频通话、直播

六、总结

  • 通信要素:目的、源、长度(类比 memcpy)
  • 端口作用:区分同一主机上的不同应用程序
  • 两种角色:Server 被动等待,Client 主动发起
  • TCP:面向连接、可靠传输,适合文件传输
  • UDP:无连接、不可靠传输,适合实时通信

七、结尾

有了这些基础概念之后就可以尝试编写网络程序了,下一篇来编写 TCP 程序包含服务器程序与客户端程序。

Hello_Embed 继续带你从原理到实践,掌握嵌入式上位机开发的核心技能,敬请关注~

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐