三次握手
1.客户端发送连接请求
2.服务器收到请求后,告诉客户端可以建立连接
3.客户端收到后继续返回说自己已经连接,可以发送数据了
不能二次握手的原因:如果服务器二次握手就默认客户端已经连接了,开始发送数据,但此时的客户端并没有真正的连接,导致客户端会再次发起第一次握手请求,使服务器建立很多无效连接
四次挥手
1.客户端:我没有请求发给你了
2.服务器:你的请求我已经收到了,但是我还没有准备好,你继续等待我的消息
3.服务器:我已经准备好了,你可以关闭了
4.客户端:我可以关闭了,你也可以关闭了 。。。。。等待2MSL,防止服务器没有接收到四次挥手,服务器会重新三次挥手
(4)为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。