一.什么是 UDP 和TCP
1.算机网络体系结构的通信协议划分为七层,自下而上分别是:物理层—数据链路层—网络层—传输层—会话层—表示层—应用层。而TCP和UDP协议就是存在于传输层的协议。
二.UDP
UDP全称为用户数据报协议(面向数据报的传输层协议)。传输数据之前不用对源端和终端不建立连接就可以发送封装的 IP 数据包的方法。它的四大特点就是无连接、不可靠、面向数据报的,存在接收缓冲区,但不存在发送缓冲区。
- 无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接。
- 不可靠: 没有对端返回的确认机制, 也没有信息接收失败后的重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息,所以是不可靠的。
- 面向数据报: 不能够灵活的控制读写数据的次数和数量,无论应用层给UDP多长的报文, UDP任然按照原文进行发送。
- UDP存在接收缓冲区,但不存在发送缓冲区(因为UDP没有重传机制)。虽然UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报文的顺序和发送UDP报的顺序是一致的(因为UDP没有确认机制,即便是当接收方的缓冲区满了,后续到达的UDP数据报会被丢弃,也不会通知对方,当接收的报文如果无法一次性接收,也会把这个UDP报文丢弃)。
三.TCP
传输控制协议是一种面向连接的、可靠的(2.1(确认应答机制),2.2(超时重传机制),2.3(连接管理机制)保证了可靠性)、基于字节流的传输层协议。
1.对数据的传输进行一定的控制
TCP协议将数据拆分成若干个小片段,每个小片段都由头部和数据组成,其中每个小片段的头部都有序列号,而这个序列号是可以保证数据抵达后可以按照序列号来组装拆分之前的数据。
2.TCP对于发送或接受数据的时间和方式的处理
1.TCP提供全双工通信,允许通信双方的应用进程在任何时候都能发送数据
2.确认应答机制
当主机A向主机B发送数据后,主机B接收到数据后需要向主机A放回一个确认信号,告诉主机A
2.超时重传机制
当主机A向主机B发送数据后之后,可能因为网络拥堵等原因导致主机A在一定的时间内未接受到确认信号后,主机A会进行对对应未收到确认信号的数据进行重发;
3.连接管理机制
在正常情况下, TCP要经过三次握手建立连接、四次挥手断开连接,下面会讲解介绍三次握手建立连接、四次挥手断开连接。
4.发送缓存区和接收缓存区
只要端与端之前建立TCP连接后,两端就会设置发送缓存和接收缓存,用来临时存放双向通信的数据。
而对于当缓存满的情况,通过滑动窗口可以解决此问题。
a.发送缓存用来暂时存放以下数据:
①发送方准备发送的数据;
②已经发送了数据但是还没有收到对于数据的确认信号。
b.接收缓存用来暂时存放以下数据:
①数据暂时未被接受时;
②接受到数据的顺序不正确时。
3.TCP的三次握手和四次挥手
1.首先先了解TCP的以下几个标记位
SYN :同步位 (SYN=1 进行请求连接)
ACK :确认位 (ACK=1 确认有效)
ack : 确认号 (对方发过来的序号 +1 )
seq : 序号 (随机产生序号)
FIN : FIN = 1 指断开连接,并且客户端停止向服务端发送数据
2.三次握手
①主机A和主机B之间需要连接而客户端先发送一次SYN,
②服务器就会返回一个ACK,表示客户端要和服务器建立连接,
③服务器再给客户端发送一个SYN,
④客户端在返回一个ACK,表示服务器要和客户端建立连接,最后成功建立连接!
(如下图所示可以把中间这两次(SYN和ACK)同时操作,把ACK和SYN同时置为1,因此看似4次的过程也被称为三次握手)
3.四次挥手
三次握手的一定是由客户端先发送的,而下面的四次挥手的发送者客户端和服务端都有可能,而且三次握手中间两次是可以合并的,而四次挥手的中间能否合并主要取决于(如下图的)服B发送ACK和发送FIN的时机是否相同,相同的话是可以合并的,否则是不能合并的,
①.客户端发起 FIN 位为1的FIN报文,此时客户端进入FIN_WAIT_1状态
②.服务端接受到 FIN 报文后,发送ack应答报文,此时服务端进入 close_wait (半关闭)状态
③.客户端接受到ack应答报文后,进入FIN_WAIT_2状态
④.服务端处理完数据后,向客户端发送FIN报文,此时服务端进入LAST_ACK状态
⑤.客户端接受到FIN报文后,客户端发送应答ack报文,进入TIME_WAIT阶段
⑥.服务端接受到ack报文后,断开连接,处于close状态
⑦.客户端过一段时间后,进入close状态
四.TCP和UDP区别总结
TCP | UDP |
TCP是面向连接的传输层协议,传输数据前先要建立连接。 | UDP是非连接的协议,传输数据之前,源端和终端不建立连接 |
TCP的20字节包头信息 | UDP信息包的包头很短,只有8字节 |
TCP 是面向连接的传输层协议,传输数据前需要建立连接。 | UDP 可以支持一对一、一对多、多对多的交互通信 |
TCP 传输数据是可靠的。 | UDP 传输数据是不可靠的,可能出现丢失 |
TCP有拥塞控制和流量控制机制,保证数据传输的安全性。 | UDP则没有,即使网络非常拥堵了,也不会影响UDP的发送速率。 |
应用场景:1.FTP 文件传输 2.HTTP / HTTPS | 视频、音频等多媒体通信 广播通信 适用于实时应用,视频会议、直播等 |