TCP协议下,客户的和服务器的连接过程称为“三次握手”
第一次握手:建立连接时,客户的发送SYN包到服务器,并进入SYN_SEND状态,等待服务器确认。
第二次握手:服务器收到SYN包,必须确认客户的SYN包,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器端进入ESTABLISHED状态,完成三次握手。
一些重要细节:
未连接队列:在三次握手协议中,服务器维护一个未连接队列,每个客户端SYN都入队,每个SYN所标识的服务器状态为SYN_RECV,当服务器收到确认包时,就将此SYN出列,服务器进入ESTABLISHED状态。
backlog参数:未连接队列最大连接数
SYN-ACK:重传次数:服务器发送完SYN-ACK包,如果未收到客户端确认包,服务器会重传,如果超过系统的最大重传数,该连接将从队列中删除。
三次握手