HTTP握手机制

来源:互联网 发布:三维图片制作软件 编辑:程序博客网 时间:2024/06/10 01:07

大家都知道HTTP是通过三次握手建立连接机制和四次握手关闭连接机制。接下来就详细讲解一下这些流程的细节。

首先明确一下一些词的含义。
* SYN
* seq
* ack
*

HTTP连接机制

最初客户端和服务端都是处于关闭状态,客户端主动打开连接,服务端被动打开连接。
这里写图片描述

客户端首先创建传输控制模块TCB,然后向服务端发出连接请求文段,这是首部中的同步位SYN=1,初始序号seq=x。

服务端收到请求报文后,如果同意连接,则向客户端发送确认,在确认报文中把SYN和ACK的都置为1,确认号ack=x+1,初始序号seq=y。

客户端收到确认报文后,还要向服务端发出确认,确认报文的ACK=1, ack=y+1,同时初始序号seq=x+1。

当服务端收到客户端的连接确认后,进入ESTABLISHED状态。

HTTP为什么是三次连接?
客户端发送一次确认,是为了防止由于网络延迟等原因,已失效的连接请求报文突然又传送到了B,进而产生错误。

HTTP释放机制

HTTP在连接成功后,数据进行传输,数据完成传输后,通信的双方可以释放。客户端和服务端都处于ESTABLISHED状态。客户端首先发起释放报文段,并停止发送数据,主动关闭连接。
这里写图片描述
客户端把释放报文首部FIN=1,seq=u。客户端进入FIN-WAIT-1状态,等待服务端的确认。

服务端收到释放报文段后,发出确认报文,ack=u+1,seq=v,然后服务端进入CLOSE-WAIT状态。

这时TCP服务仍然处于半关闭状态,即客户端没有数据发送,但服务端若要发送数据,客户端仍然要接收。

客户端在收到服务端的确认后,进入FIN-WAIT-2状态,等待服务端发出的连接释放报文段。

客户端向服务端发送确认报文,把ACK=1,ack=w+1,序号seq=u+1,进入TIME-WAIT状态。经过时间等待计时器(TIME-WAIT timer)设置的时间2MS后,客户端进入CLOSED状态。

0 0