详解TCP三次握手与四次挥手
一、TCP三次握手和socket详解 1.TCP 连接 第一次:cli发送SYN包(SYN = j)到ser,并且进入SYN_SEND状态,等待服务器确认; 第二次:ser收到SYN包,必须确认客户的SYN(ACK = j+1),同事自己也发送一个SYN包(SYN = k),即SYN+ACK,此时ser进入SYN_RECV状态; 第三次:cli收到ser的SYN+ACK包,向ser发送确认包ACK(ACK = k+1),此包发送完毕,ser和cli进入ESTABLISHED状态,完成三次握手。 握手过程中传送的包里不包含数据,三次握手完毕之后,cli与ser才开始传送数据。 2.三次握手状态详解: 3.图解三次握手: 从图中可以看出,当客户端调用connect时,触发了连接请求,向服务器发送了SYN包,这时connect进入阻塞状态;服务器监听到连接请求,即收到了SYN J包,调用accept函数接收请求 向客户端发送SYN K,ACK J+1,这时accept进入阻塞状态;客户端收到服务器的SYN K,ACK J+1之后,这时connect返回,并且对SYN K进行确认;服务器收到ACK K+1,accept返回,至此三次握手完毕,连接建立。 客户端的connect在三次握手的第二次返回,而服务器端的accept在三次握手的第三次返回 。 套接字之间的连接过程分为三个步骤