TCP三次握手与四次挥手
最近在了解web服务器方面的一些基本知识,看到了TCP的三次握手与四次挥手,在此记录以下。
1. TCP协议
TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
TCP通信需要经过创建连接、数据传送、终止连接三个步骤。
2. 三次握手与四次挥手
三次握手发生在创建连接阶段。客户端和服务器总共需要发送三个包。
第一次握手:客户端发送连接请求
第二次握手:服务器端选择自己 ISN 序列号,放到 Seq 域里,并将客户端的ISN加1发送确认应答。
第三次握手:客户端把服务器发来的ISN加1,发送确认包。
四次挥手发生在终止连接阶段。客户端或服务器均可主动发起挥手动作,在 socket 编程中,任何一方执行 close()
操作即可产生挥手操作。
第一次挥手:假如客户端想关闭连接,发送FIN标志为1的包,表明自己不再发送数据,但还可以接收数据。
第二次挥手:服务器发送一个确认包,确认收到了客户端的终止请求。发送完确认包后,服务器进入等待状态,等待自己的数据发送完,客户端也进入等待状态,等待服务器发送关闭信号。
第三次挥手:服务器准备关闭连接,向客户端发送FIN标志为1的包,然后进入LAST-ACK状态,等待客户端的确认。
第四次挥手:客户端接收到服务器的关闭请求,发送确认包,然后进入等待状态,等待服务器可能发送的要求重传ACK包。服务器接收到确认包后就关闭连接,如果没有接收到,一段时间后就会重新发送关闭连接。客户端等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接
3. 为什么连接需要三次关闭需要四次
因为连接时只需要互相确认,没有数据传送,所以服务器端的发送和确认可以合并为一次;结束时服务器端可能还在传送数据,不能直接发送关闭信号,需要等待服务器发送完数据,才发送关闭信号。
参考链接:
[1] https://hit-alibaba.github.io/interview/basic/network/TCP.html