【嵌入式学习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 |
| 面向无连接 | 有连接 |
| 支持一对一、一对多、多对一、多对多 | 两个端点的一对一通信 |
| 不保证数据传输的可靠性 | 传输数据无差错、不丢失、不重复、按时序到达 |
| 占用资源少 | 占用资源多 |

相关推荐
Linux技术支持工程师2 分钟前
二十八、【Linux系统域名解析】DNS安装、子域授权、缓存DNS、分离解析、多域名解析
linux·运维·服务器·缓存·centos
shangyingying_114 分钟前
关于神经网络CNN的搭建过程以及图像卷积的实现过程学习
神经网络·学习·cnn
jim写博客30 分钟前
linux进程概念(三)进程状态
linux·运维·服务器
Fantastic_sj1 小时前
TCP/UDP讲解及主要区别
网络协议·tcp/ip·udp
jc06202 小时前
Linux c网络专栏第四章io_uring
linux·运维·服务器
2401_858286112 小时前
OSE1.【Linux】练习题组1
linux·运维·服务器
liweiweili1263 小时前
在 Linux 中,定时任务(cron)
linux·运维·服务器
ayas123193 小时前
CSS学习
前端·css·学习
夕泠爱吃糖4 小时前
Linux虚拟内存
linux·运维·服务器
AORO20254 小时前
国内好用的智能三防手机,适合户外、工业、公共安全等场景
网络·5g·智能手机·制造·信息与通信