http三次握手与四次挥手

        我们都知道http协议是无状态的,且只能通过客服端向服务器发起请求,所有每次请求将伴随着一次的连接的开启与关闭。那么具体是怎么个流程保证开启和关闭正常进行的呢,这就要引出我们今天要谈的三次握手(连接)和四次挥手(断开连接)了

三次握手:

        三次握手主要是用来建立http协议的期间主要过程是

1:客户端发送了一个带有SYN的Tcp报文到服务器,这个三次握手中的开始。表示客户端想要和服务端建立连接。 
2:服务端接收到客户端的请求,返回客户端报文,这个报文带有SYN和ACK标志,询问客户端是否准备好。 
3:客户端再次响应服务端一个ACK,表示我已经准备好。

        之所以用三次确定状态是因为很可能在某个阶段因为网络延迟导致无数传输客户端 服务端正确的信息,所以要客户端收到服务端返回的syn ack后再返回一个ack给客户端表示准备好了,

含义意思

下面我们再来解释一下具体名词的含义

SYN:synchronous建立联机

ACK:acknowledgement 确认

第一次握手:我们发送一个SYN=1,seq=x(x是随机数字的意思)的数据包,服务器看到我们发过来数据包,就知道你要跟他建立链接。

第二次握手:服务器发给我们一个SYN=1,seq=y,ACK=x+1。服务器发送前两个数据是为了确认自己的发消息能力,第三个数据在我们的seq上加1,以确认建立的是同一个链接。

第三次握手:我们只需要向服务器发送一个ACK=y+1,服务器便可以确认自己的发送能力了。

四次挥手:

        由于http是基于tcp的,tcp是双向的,所以http关闭的时候需要分别关闭客服端和服务端,且客服端和服务端都可以主动进行关闭。我们就以客户端主动断开连接为例子

1:客户端设置seq=u,fin=1。值,发送fin报文给服务端,然后进入fin_wait等待阶段。 
2:服务端收到fin报文段,如果此时还有还有数据未传完,则会反一个ack=u+1,seq=v。 如果        传完了,则直接返回fin报文 fin=1 ack=u+1 seq=w

3:客户端如果收到ack则进入继续等待阶段,等待服务端返回fin报文,接收到fin则进入下一阶段
4:客户端收到了fin进入time-wait阶段,向服务端发送 ack=w+1,seq=u+1,如果服务端没收到会继续发送fin给客户端,客户端会等待2MSL(数据包在网络中最长存在时间)后关闭

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTTP三次握手四次挥手是TCP协议在建立连接和断开连接时的过程。为了确保双方的接收能力和发送能力都正常,需要进行三次握手。两次握手是不够的,因为在两次握手的情况下,如果客户端发送的连接请求在网络中滞留,那么服务器会误以为客户端已经关闭连接,从而导致服务器资源的浪费。而通过三次握手,可以确保双方都能够正常地发送和接收数据。 三次握手的过程如下[^1]: 1. 客户端向服务器发送一个连接请求报文段,该报文段中包含了客户端的初始序列号(SYN)。 2. 服务器收到请求后,向客户端发送一个确认报文段,该报文段中包含了服务器的初始序列号(SYN)和确认序号(ACK)。 3. 客户端收到确认报文段后,再向服务器发送一个确认报文段,该报文段中包含了客户端的确认序号(ACK)。 四次挥手的过程如下[^2]: 1. 客户端向服务器发送一个连接释放请求报文段,该报文段中包含了客户端的序列号(FIN)。 2. 服务器收到请求后,向客户端发送一个确认报文段,该报文段中包含了服务器的确认序号(ACK)。 3. 服务器向客户端发送一个连接释放请求报文段,该报文段中包含了服务器的序列号(FIN)。 4. 客户端收到请求后,向服务器发送一个确认报文段,该报文段中包含了客户端的确认序号(ACK)。 通过三次握手四次挥手,可以确保双方在建立和断开连接时的可靠性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值