三次握手流程(建立连接)
(1)客户端发送SYN(建立连接的标志位)+SEQ_NO(序号)到服务器
这里的SYN是客户端到服务端的连接,申请建立,要返回ACK之后才真正建立连接
(2)服务端响应SYN(应答步骤1当中的SYN)、ACK、SEQ_NO+1(确认序号)到客户端
这里的SYN是服务端到客户端的连接
(3)客户端 接到响应,建立客户端到服务端的连接(客户端保存这个连接状态)
四次挥手流程(关闭连接)
(1)客户端发送FIN到服务器,申请关闭连接服务端状态设置为CLOSE_WAIT
(2)服务端响应ACK
(3)服务端发送FIN到客户端,申请关闭连接,客户端接收到,状态设置为 TIME_WAIT
(4)客户端响应ACK,服务器接收到以后,服务端关闭连接。
扩展问题:
Q1:挥手第三步,客户端没有直接设置CLOSE关闭连接?
A:第(4)步的ACK可能丢包,所以要等待一下,客户端要等待一个2MSL的时间,才会进入到CLOSED状态。
Q2:为什么挥手阶段的(2)(3)没有像建立连接时,合并数据包?
A: (2)时系统对TCP协议实现时,接收FIN,自动返回ACK,不再执行程序代码
(3)时程序手动调用执行(服务端关闭连接 前,需要执行 一些前置工作)