一、TCP状态跃迁
对于TCP的三次握手和四次挥手每一个过程都有一个状态的变化,只有正确的状态变迁才能使Client和Server端进行通信。
- (Client)SYN_SENT:当Client 需要向Server端进行通信时,Client会通过三次握手与Server端建立连接,那么此时Client会向Server端发送一个请求连接信息(Seq_num,Syn=1,ACK=0)给Server,此时Client端由LISTEN状态变迁为SYN_SENT状态。
- (Server)SYN_RECD:当Server端和Client端结束四次挥手以后,Server端会从CLOSED状态变迁为LISTEN状态(其实这个这个CLOSED状态是虚构的)。当Server端再一次收到Client端发送的数据时,此时Server端由LISTEN变为SYN_RECD状态,并向Client端发送一个(Seq_num,Ack_num,Syn=1,Ack=1)的数据给Client表示Server收到了Client的请求连接信息。
- (Client)ESTABLISH:当Client收到Server端发送的确认和请求连接信息后,此时Client就由SYN_SENT跃迁为ESTABLISH,同时Client需要处理Server的请求连接,那么Client需要发送一个确认信息(Seq_num,Ack_num,Ack=1)向Server表示自己收到了请求连接,并准备好了连接。
- (Server)ESTABLISH:Server端收到Client端发送的确认信息,这时候Client端就和Server端建立起了连接。到这个时候,连接全部建立起来了
- (Client)FIN_WAIT_1:当Client端所有的数据都发送完毕以后,Client就会发送一个数据(Seq_num,A