【嵌入式学习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对比

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

相关推荐
Tim风声(网络工程师)1 小时前
不同射频对应不同mac地址(查找无线用户连接AP信息)
服务器·网络·tcp/ip·智能路由器·无线ap
wan5555cn2 小时前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
Broken Arrows3 小时前
Linux学习——管理网络安全(二十一)
linux·学习·web安全
今天也要学习吖4 小时前
谷歌nano banana官方Prompt模板发布,解锁六大图像生成风格
人工智能·学习·ai·prompt·nano banana·谷歌ai
雁于飞4 小时前
vscode中使用git、githup的基操
笔记·git·vscode·学习·elasticsearch·gitee·github
索迪迈科技4 小时前
网络请求库——Axios库深度解析
前端·网络·vue.js·北京百思可瑞教育·百思可瑞教育
鳄鱼杆4 小时前
服务器 | Docker应用开发与部署的实践以及阿里云镜像加速配置
服务器·阿里云·docker
rannn_1114 小时前
【Javaweb学习|实训总结|Week1】html基础,CSS(选择器、常用样式、盒子模型、弹性盒布局、CSS定位、动画),js(基本类型、运算符典例)
css·笔记·学习·html
羚羊角uou5 小时前
【Linux】命名管道
linux·运维·服务器