一、什么是TCP和UDP协议?
TCP:
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、面向字节流的传输层通信协议。
UDP:
用户数据报协议(UDP,UDP,User Datagram Protocol)是一种无连接的 、不可靠交付的传输层通信协议。
二、为什么说TCP是可靠的?
UDP的首部格式:
TCP首部格式:
- 校验和:TCP将保持它首部和数据的检验和。这是一个端到端的校验和,目的是检测数据在传输过程中正确性。如果校验出错,接收方会丢弃该报文段并不确认收到该报文段。
- 序列号、确认应答:序列号是TCP报文段里的第一个数据的编号,为了用于TCP通过确认应答机制实现可靠的数据传输。确认应答保存在TCP首部的确认号中,发送方发送数据之后会等待接收方的确认应答,有确认应答就说明数据已成功发送到接收方,否则,数据很大可能丢失了。
- 连接管理:即TCP在进行请求连接和释放连接是的三次握手和四次挥手。
- 流量控制:接收方通过滑动窗口来控制发送发发送报文的速度。
- 拥塞控制:发送方对整个网络拥塞度的控制,通过慢开始、拥塞避免、快重传、快恢复四个算法来保证网络的通畅。
三、TCP的三次握手
1.为什么是三次握手?
在建立TCP
连接过程中的前两次握手:①客户端向服务器发出建立连接的请求、② 服务器向客户端确认这个请求,足以证明客户端与服务器之间的网络是畅通的。 TCP
协议的3
次握手的作用是为了在建立连接时,避免重复连接,防止旧的重复连接引起连接混乱问题。另外,通过三次握手,可以得到一个确认的可靠初始化序列号seq
,用于进行可靠性传输。而如果只有2
次握手,则无法初始化序列号seq
。综上所述,TCP
协议最少需要通过3
次握手建立连接。当然, TCP
连接也通过4
次握手或5
次握手建立连接,实现 TCP
连接的稳定性,但3
次握手是最节省资源的连接方式。
2.三次握手的过程
第一次握手:
客户端向服务端发送一个首部为SYN=1,ACK=0的报文,请求建立连接。
第二次握手:
服务端向客户端发送一个首部为SYN=1,ACK=1的报文,表示同意建立连接。
第三次握手:
客户端向服务端发送一个首部为ACK=0的报文,表示收到并建立连接。
四、TCP的四次挥手
第一次挥手:
客户端向服务端发送一个首部为FIN=1,ACK=0的报文,请求释放连接。
第二次挥手:
服务端向客户端发送一个首部为ACK=1的报文,表示已收到。
第三次挥手:
服务端向客户端发送一个首部为FIN=1,ACK=1的报文,表,确认释放连接。
第四次挥手:
客户端向服务端发送一个首部为ACK=1的报文,表示确认释放连接。
五、TCP和UDP的区别
是否面向连接 | 传输可靠性 | 传输效率 | 所需资源 | 首部开销 | 应用场景 | |
TCP | 是 | 可靠 | 慢 | 多 | 20-60字节 | 要求通信数据可靠 |
UDP | 否 | 不可靠 | 快 | 少 | 8字节 | 要求通行速度快 |