HTTP连接的三次握手跟四次挥手的过程及原因

  •   Http的3次握手:

       

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

   那为什么需要三次而不是两次或者四次呢?看图:

     三次是最低要求,四次就多余了。还有的说法是说为了防止已失效的连接请求报文段突然又传送到了服务端,

     因而产生错误。

 

  • Http的4次挥手:

  1.   第一次挥手:TCP发送一个FIN(结束),用来关闭客户端到服务器端的连接。
  2.   第二次挥手:服务器端收到这个FIN后发回一个ACK确认标示,确认收到。
  3.   第三次挥手:服务器端发送一个FIN到客户端,服务器端关闭客户端的连接。
  4.   第四次挥手:客户端发送ACK报文确认,这样关闭完成 

    断开连接时为什么需要四次呢?

       原因很简单,因为TCP是全双工的通信方式,即一方断开连接后,不能

     向另一方发送数据,但是此时另一方可以向自己发送数据,所以双方断开连接是独立的,所以需要四次。

 

更加形象的说法:

建立TCP连接时会发生:三次握手(three-way handshake)

firefox > nginx [SYN] 在么

nginx > firefox [SYN, ACK] 在

firefox > nginx [ACK] 知道了

 

关闭TCP连接时会发生:四次挥手(four-way handshake)

firefox > nginx [FIN] 我要关闭连接了

nginx > firefox [ACK] 知道了,等我发完包先

nginx > firefox [FIN] 我也关闭连接了

firefox > nginx [ACK] 好的,知道了

 

几个报文的标识的解释:

SYN: synchronization(同步)

ACK: acknowledgement(确认:告知已收到)

FIN: finish(结束)

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP(传输控制协议)是一种可靠的面向连接的协议,其三次握手四次挥手是建立和断开TCP连接的重要过程。 TCP三次握手: 1. 客户端发送SYN(同步序列号)请求报文给服务器端,请求建立连接。 2. 服务器端接收到请求报文后,发送SYN-ACK(同步序列号确认)报文,表示已经收到请求,同意建立连接。 3. 客户端接收到SYN-ACK报文后,发送ACK(确认)报文,表示连接已经建立。 TCP四次挥手: 1. 客户端发送FIN(结束)报文给服务器端,请求关闭连接。 2. 服务器端接收到FIN报文后,发送ACK报文,表示已经收到请求,但还有数据需要传输。 3. 服务器端传输完数据后,发送FIN报文给客户端,请求关闭连接。 4. 客户端接收到FIN报文后,发送ACK报文,表示已经收到请求,连接已经关闭。 TCP三次握手四次挥手的原理: 三次握手的原理在于确保客户端和服务器端都能够正常地发送和接收数据,以避免因网络问题而导致的数据丢失或错误。在三次握手过程中,客户端和服务器端都需要发送确认报文,以确保双方都能够正常地发送和接收数据。 四次挥手的原理在于确保客户端和服务器端都能够正常地关闭连接,以避免因未关闭连接而导致的网络资源浪费和安全问题。在四次挥手过程中,客户端和服务器端都需要确认对方的关闭请求,并传输完所有数据后才能正式关闭连接

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值