三次握手
所谓的三次握手是指在建立一个TCP连接时,需要客户端和服务器总共发送三个包:
1.第一次握手:建立连接时,client发送SYN包到server,并进入SYN_SEND状态,等待server确认(SYN:同步序列编号)
2.第二次握手:server收到SYN包,必须确认client的SYN(ack=x+1),同时自己也发送一个SYN(seq=y),即SYN+ACK包,此时server进入SYN_RECV状态
3.第三次握手:client收到server的SYN+ACK包,向server发送确认包(ack=y+1),此包发送完毕,client和server进入established状态
四次挥手
TCP断开连接时需要发送四个包,client和server均可发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。
1.第一次挥手:client发送一个final位用来关闭client到server的数据传输,server进入终止等待状态
2.第二次挥手:server收到final位后,发送确认包到client,确认序号为收到序号+1(与SYN相同,一个fin位占用一个序号),server进入关闭等待状态
3.第三次挥手:server发送一个fin位,用来关闭server到client的数据传输,server进入last_ack状态
4.第四次挥手:client收到fin位后,client进入time_wait状态,接着发送一个确认包给server,确认序号为收到序号+1,server进入关闭状态,完成四次挥手