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

【嵌入式学习3】TCP服务器客户端 - UDP发送端接收端

目录

1、TCP

TCP特点

TCP三次握手(建立TCP连接):

TCP四次握手【TCP断开链接的时候需要经过4次确认】:

TCP网络程序开发流程

客户端开发:用户设备上的程序

服务器开发:服务器设备上的程序

2、UDP

为什么使用UDP?

UDP常用再哪些方面?

UDP特点

UDP接收和发送流程

UDP实现步骤

TCP和UPD对比


1、TCP

  • 数据不能随便发送,在发送之前还需要选择一个对应的传输协议,保证程序之间按照指定的传输规则进行数据的通信
  • TCP (Transmission Control Protocol)简称传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通信需要经过创建连接数据传送终止连接三个步骤
TCP特点
  1. 面向连接:通信双方必须先建立连接才能进行数据的传输,完成数据交换后,双方必须断开此连接,以释放系统资源。这种连接是一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议
  2. 可靠传输
  •         TCP采用发送应答机制:TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功
  •         超时重传:发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。
  •         错误校验:TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
  •         流量控制和阻塞管理:流量控制用来避免主机发送得过快而使接收方来不及完全收下。
TCP三次握手(建立TCP连接):

        建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。

①第一次握手:客户端将数据包发送给服务端,等待服务端确认【SYN=1,seq=J】

②第二次握手:服务端收到客户端的连接请求,发送数据包给客户端确认连接请求【SYN=1,ACK=1,ack=J+1,seq=K】

③第三次握手:客户端收到确认,将数据包发送给服务端,服务端检查数据包正确连接后开始传输数据【ACK=1,ack=K+1】

TCP四次握手【TCP断开链接的时候需要经过4次确认】:

①主机1向主机2发起FIN报文后进入FIN_WAIT_1状态【FIN=1,seq=u】

②主机2收到FIN报文,向主机1回ASK报文确认此时可以关闭连接【ACK=1,seq=v,ack=u+1】

③主机2向主机1发送FIN报文,请求关闭同时主机2进入CLOSE_WAIT状态【FIN=1,ACK=1,seq=w,ack=u+1】

④主机1收到主机2FIN报文,向主机2发送ASK报文,主机2收到后关闭连接【ACK=1,seq=u+1,ack=w+1】

此时,主机1等待2MSL(Maximum Segment Lifetime 报文最大生存时间)后依然没有收到回复,则证明Server端已正常关闭,主机1也可以关闭连接。

TCP网络程序开发流程
客户端开发:用户设备上的程序
  1. 创建客户端套接字对象
  2. 和服务端套接字建立连接
  3. 发送数据
  4. 接收数据
  5. 关闭客户端套接字
服务器开发:服务器设备上的程序
  1. 创建服务端端套接字对象
  2. 绑定端口号
  3. 设置监听
  4. 等待接受客户端的连接请求
  5. 接收数据
  6. 发送数据
  7. 关闭套接字

2、UDP

  • 无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接
  • 发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据
为什么使用UDP?

        使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议,因为这种情况偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

UDP常用再哪些方面?
  • 包总量较少的通信(DNS).
  • 视频、音频等多媒体通信(即时通信).
  • 限定于 LAN 等特定网络中的应用通信.
  • 广播通信(广播、多播)
UDP特点
  • 需要资源少
  • 不保证接收
  • 无连接
UDP接收和发送流程

UDP实现步骤
  1. 导入模块socket
  2. 创建socket套接字
  3. 绑定IP&端口(可选)
  4. 发送数据
  5. 关闭套接字

TCP和UPD对比

UDPTCP
面向无连接有连接
支持一对一、一对多、多对一、多对多两个端点的一对一通信
不保证数据传输的可靠性传输数据无差错、不丢失、不重复、按时序到达
占用资源少占用资源多

http://www.dtcms.com/a/99816.html

相关文章:

  • Supabase 匿名密钥与服务角色密钥详细对比文档
  • .NET 9 中的新增功能:关键更新和 C# 12 功能简化
  • C#核心学习(一)面向过程与面向对象编程---初识类和对象
  • 深入理解MySQL聚集索引与非聚集索引
  • fetch的语法规则及常见用法
  • EasyExcel 与 Apache POI:Java 操作 Excel 的详解
  • 6-1-1 利用AI完成一个可视化看板
  • 如何监控和优化服务器的 CPU 性能
  • 视频联网平台智慧运维系统:智能时代的城市视觉中枢
  • 记录一次Dell服务器更换内存条报错解决过程No memory found
  • 基于微波光子信道的图像传输系统matlab仿真,调制方式采用OFDM+QPSK,LDPC编译码以及LS信道估计
  • 机器学习——集成学习框架(GBDT、XGBoost、LightGBM、CatBoost)、调参方法
  • 计算机基础
  • 睡眠健康领域的智能硬件设备未来的发展趋势
  • C语言术语
  • 算法刷题记录——LeetCode篇(1.3) [第21~30题](持续更新)
  • 分库分表详解
  • 关于c++的FLOYD算法 P2910 [USACO08OPEN] Clear And Present Danger S 题解
  • Spring Boot 整合 RabbitMQ:注解声明队列与交换机详解
  • 高级SQL技巧
  • Linux(8.6)rsync
  • 33. Java 流程控制语句 If-Then-Else 语句
  • [原创](现代C++ Builder 12指南): 如何使用System.JSON?
  • Gitee批量删除仓库
  • 美食菜谱数据集 | 智能体知识库 | AI大模型
  • 力扣HOT100之普通数组:41. 缺失的第一个正数
  • Cannot find a valid baseurl for repo: centos-sclo-sclo/x86_64
  • Vue实现的表格多选方案支持跨页选择和回显功能
  • DNS网络攻击:原理剖析、危害解读与全面防御指南
  • 【Python LeetCode 专题】每日一题