TCP协议
传输控制协议 TCP(Transmission Control Protocol)是一种面向连接、可靠的传输层协议;
每一条TCP连接都只能是点对点的(客户端、服务器),只能一个收一个发;
TCP连接是面向字节流的,他会把应用层的报文看作是字节流,再将字节流分成多份报文段;
TCP也具有了流量控制、可靠性传输、拥塞控制等功能;
TCP的连接:三次握手
第一次握手:
客户端会先向服务器发送一个请求连接的数据包,发送之后客户端就会进入SYN-SENT状态;
控制位:同步SYN = 1;确认ACK = 0
第二次握手:
如果服务器同意连接,也会向客户端发送一个数据包,接着进入SYN-RECEIVED 状态;
控制位:同步SYN = 1;确认ACK = 1
第三次握手:
客户端向服务器发送确认数据包,表示自己已收到同意连接的数据包,然后进入ESTABLISHED状态;
控制位:同步SYN = 0;确认ACK = 1
在服务器收到客户端的第三次握手的数据包后也会进入ESTABLISHED状态;
在这里大家可能会疑惑,明明两次握手已经建立好连接了,为什么还要进行第三次握手?
第三次握手的作用在于,告诉服务器第二次握手时,发给客户端的确认数据包客户端收到了,是有效的。避免服务器等待造成资源浪费。
TCP断开连接:四次挥手
四次挥手时客户端和服务器的状态:
第一挥手:
当客户端的数据发送完毕时,它会向服务器发送请求释放连接的数据包;
控制位:终止FIN = 1;确认ACK = 0
第二次挥手:
服务器会先向客户端发送一个确认数据包,表示同意释放连接,此时客户端和服务器的链接已经释放,服务器不会;再接收客户端发送的数据包,如果此时服务器还有要发给客户端的数据,仍可以继续发送
控制位:终止FIN = 0;确认ACK = 1
第三次挥手:
如果服务器没有要给客户端发送的数据了,服务器会向客户端发送请求释放连接的数据包;
控制位:终止FIN = 1;确认ACK = 1
第四次挥手:
客户端收到了来自服务器请求释放连接的数据包后,向服务器发送确认报文段;
控制位:终止FIN = 0;确认ACK = 1
UDP
用户数据报协议UDP(User Datagram Protocol)是一种面向无连接、不可靠的传输层协议;
UDP支持一对一、一对多、多对一、多对多的传输方式;
UDP只管将数据发送出去,它不在乎接收方是否可以接收到数据,也不会进行数据重传;
区别总结
TCP | UDP | |
是否面向连接 | 面向连接 | 无连接 |
传输可靠性 | 可靠 | 不可靠 |
传输形式 | 字节流 | 数据报文端 |
传输效率 | 慢 | 快 |
所需资源 | 多 | 少 |
首部字节 | 20-60字节 | 8字节 |
应用场景
TCP:通信数据可靠(文件传输、收发邮件等)
UDP:通信速度快(QQ语音、视频电话、直播等)