GPT每日面试题—HTTP三次握手四次挥手

26 篇文章 0 订阅
6 篇文章 0 订阅

充分利用ChatGPT的优势,帮助我们快速准备前端面试。今日问题:HTTP三次握手和四次挥手?为什么是三次握手而不是二次或者四次呢?

Q:如果在前端面试中,被问到HTTP的三次握手和四次挥手,怎么回答比较好,详细全面一些,为什么不是两次握手不是四次握手?

A:在前端面试中,被问及 HTTP 的三次握手和四次挥手时,你可以通过以下详细全面的回答来展示你对网络通信过程的理解:

公众号:Code程序人生,个人网站:https://creatorblog.cn

三次握手(Three-way Handshake):

  • 第一次握手(SYN): 客户端向服务器发送 SYN 包,包含一个随机序列号。这一步的必要性在于确保客户端和服务器之间的通信能够建立起来。客户端向服务器发送 SYN 包,表示客户端发送数据的能力正常。
  • 第二次握手(SYN-ACK): 服务器收到 SYN 包后,会回复一个 SYN-ACK 包,表明服务器已经收到了客户端的请求,并同意建立连接。这一步的必要性在于确认服务器已经准备好接收客户端的数据,同时向客户端发送 SYN 包,表明服务器发送数据的能力正常。
  • 第三次握手(ACK): 客户端收到服务器的 SYN-ACK 包后,会回复一个 ACK 包,表示客户端已经收到了服务器的确认,并且已准备好接收来自服务器的数据。这一步的必要性在于确认客户端和服务器之间的连接已经建立,可以进行双向数据传输。

总体来说,三次握手确保了客户端和服务器之间的连接能够可靠地建立起来,同时保证了双方发送和接收数据的能力正常,避免了无效的连接请求或数据丢失。

四次挥手(Four-way Handshake):

  • 第一次挥手(FIN): 客户端发送 FIN 包给服务器,表示客户端已经没有数据要发送了,并且希望关闭连接。这一步的必要性在于客户端希望关闭连接,不再发送数据。
  • 第二次挥手(ACK): 服务器收到 FIN 包后,会回复一个 ACK 包作为确认,但此时服务器仍然可以向客户端发送数据。这一步的必要性在于服务器确认客户端的关闭请求,并且通知客户端服务器还有数据需要发送。
  • 第三次挥手(FIN): 当服务器确认数据已发送完毕后,会发送一个 FIN 包给客户端,表示服务器已经没有数据要发送了,并且希望关闭连接。这一步的必要性在于服务器希望关闭连接,不再发送数据。
  • 第四次挥手(ACK): 客户端收到服务器的 FIN 包后,会回复一个 ACK 包作为确认,表示客户端已经收到服务器的关闭请求,并且关闭了连接。这一步的必要性在于客户端确认服务器的关闭请求,并且关闭了连接。

总体来说,四次挥手确保了客户端和服务器之间的连接能够正确地关闭,避免了数据的丢失或连接的继续存在。每一步都是必要的,以确保连接的可靠性和正确性。

为什么不是两次握手而是三次握手?

  • 防止失效的连接请求到达服务器: 如果是两次握手,客户端发送的连接请求到达服务器后,由于网络延迟等原因,可能在一段时间内无法及时响应,此时客户端以为连接已建立成功,开始发送数据,而服务器并没有接收到客户端的请求,导致连接建立失败。通过三次握手,服务器可以确认客户端确实请求建立连接,避免了这种情况。
  • 防止已失效的连接请求被服务器接受: 如果是两次握手,客户端发送的连接请求到达服务器后,服务器发送的响应在网络中滞留,客户端收到响应后以为连接建立成功,开始发送数据。但实际上,服务器并没有收到连接请求,这样就产生了一条无效连接。通过三次握手,服务器可以确认客户端确实发送了连接请求,并且连接成功建立后,才开始传输数据。
  • 防止出现已连接的旧数据包请求报文被误认为新连接的请求: 如果是两次握手,A 发送了一个连接请求,但在路由器长时间滞留,超时了,A 不断重发数据,因为超时了,这时会发一个新的请求 B,B 很可能和原来的 A 的请求一样,这样如果 B 成功了,会发送数据,路由器这时候把原来那个滞留的 A 请求发送过来,这时候 B 的数据就会发送给 A 的服务端。如果是三次握手,B 的成功才是建立的连接。

为什么不是四次握手而是三次握手?

如果是四次握手,可能会导致不必要的复杂性和延迟。在 TCP 连接的建立过程中,最关键的是确认双方的通信能力和同步初始序列号,而这可以通过三次握手来实现。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CreatorRay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值