http的三握手,和四次挥手
三次握手
第一次握手
第一次握手,客户端向服务端发送报文 SYN=1,Seq=16位的随机数。告诉服务端,我要连接了。SYN=1,是向服务端确认,服务端是否能接受到请求。
第二次握手
第二次握手,服务端接收到请求,向客户端发送报文,。SYN=1,Seq=16位的随机数,ACK=1,ack=Seq+1。
SYN=1是向客户端确认,客户端是否能接受到请求。ACK=1是表示,接受到了客户端的SYN=1了,已确认接收到了请求。ack=Seq+1,告诉客户端,下次你再发送过的请求要从Seq+1开始。
两次握手之后,客户端已确认自己这边是没有问题的。可以连接服务端。但是,服务端没有办法确认服务端是可以连接上客户端的,自己返回给客户端的请求,客户端是否接收到。所以有了第三次握手
第三次握手
客户端再次发起请求,向服务端发送报文,ACK=1,Seq=服务端第二次握手返回的Seq+1
。ACK=1是告诉服务端,我已经收到了你请求。
这样通过最少的三次握手。双方就都可以知道对方是可以连接上的
四次挥手
第一次挥手
当客户端准备断开连接时,向服务端发送请求,FIN=1,Seq=客户端第一次生成的Seq自动增长上来的。告诉服务端我要断开连接了
第二次挥手
服务端接收到客户端的请求,向客户端发送请求,ACK=1,ack=服务端第一次生成的Seq自动增长上来的。ACK=1是告诉客户端,我收到你的请求,知道你要断开连接了。
第三次挥手
客户端发送断开的请求时,肯定已经做好了断开的准备,不再发送其他数据了。但是服务端虽然接收到了客户端要断开的申请,但是自己可能还有没有处理完的数据,需要继续向客户端发送。所以服务端,等自己处理完所有返回数据之后,会发起第三次挥手请求,FIn=1,Seq=随机数。告诉客户端,我准备向你断开连接。
第四次挥手
客户端收到了服务端的断开连接的申请,向服务端发送确认请求,ACK=1,Seq=随机数。告诉服务端,我已收到你的请求。至此断开了连接。