嵌入式上位机开发入门(一):网络通信概述
·
目录
一、前言
大家好,这里是 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 继续带你从原理到实践,掌握嵌入式上位机开发的核心技能,敬请关注~
更多推荐
所有评论(0)