TCP的三次握手
第一次:客户端发送建立连接请求。同步序号SYN,1表示连接请求,发送字节流的顺序号seq,假定为x。
第二次:服务端应答请求。同步序号依然设置为1,确认号ack为顺序号加1,ACK设置为1表示确认号有效。本次的字节流需要一个顺序号seq,假定为y。
第三次:客户端检查确认号是否正确,如果正确,发送确认信息到服务器,至此建立了TCP连接。 ack=y+1,ACK=1表示确认号有效,seq=x+1。
如果只有两次握手会发生什么?
如果只两次握手的话,那么服务器向客户端发送应答后会认为连接已经建立,开始向客户端发送数据。当服务器的应答丢失,客户端没有收到服务器的应答,会一直等待服务器的应答而抛弃客户端发送的数据。这样就导致了死锁,客户端一直等待,服务端一直再发送数据。TCP四次挥手
第一次:客户端关闭连接 FIN设置为1,表示关闭本方数据流。顺序号seq假定为u。此时客户端进入终止等待,等待应答。
第二次:服务器应答 ack = seq +1,ACK设置为1,表示确认号有效。此次的顺序号假定为v。客户端收到后进入终止等待的状态,等待服务器把剩下的数据传输完毕。(因此说挥手过程是半关闭,客户端关闭不发送数据,但服务器还要进行最后的传输)
第三次:服务器数据传输完毕,关闭连接,并通知客户端 关闭连接状态FIN=1,确认号ack = seq+1=u+1,