阅读 454

http面试之——http3次握手和4次挥手

大家好,这是一个更文挑战。这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

面试官常问的关于http建立连接的高频问题:

  1. 说一说http建立连接的过程

  2. 你刚讲到了3次握手,为什么是3次,2次不行吗

  3. SYN攻击是什么

  4. 那断开连接呢,需要几次

  5. 为什么是4次呢


以下是各个问题的回答

http3次握手的过程以及每次握手的作用

三次握手:是指建立一个TCP连接时,需要客户端与服务器总共发送3个包

主要目的:确认客户端和服务端接受和发送是否正常

  • 每次握手的目的:

    • 第一次握手:客服端发送一个报文(SYN),服务器接收到了,说明:客户端的发送能力 和 服务器的接受能力没有问题

    • 第二次握手:服务器回应客户端发送一个报文(ACK),客户端接收到了。说明:服务器的发送能力和接收能力没有问题,客户端的发送和接收能力没有问题

    • 第三次握手:客户端回应服务器并发送一个报文,服务器接收到了。说明: 通过这次接收,服务器确认客户端的接收能力和发送能力没有问题

  • 握手过程如下图

http3次握手.png

  • 为什么需要三次握手,两次不行吗

    • 三次握手是为了防止当已失效的连接请求报文段突然又传到服务端,造成双方的不一致,导致资源的浪费
  • 三次握手过程中可以携带数据吗

    • 第三次握手的时候,可以携带数据,但是第一二次握手不可以携带数据
  • SYN攻击是什么

    服务器的资源分配是在二次握手的时候;客户端的资源分配是在完成第三次握手时分配的

    所有服务器容易受到SYN的洪泛攻击SYN攻击就是Client在短时间内伪造大量不存在的IP地址并向Server不断地发送SYN包,Server则回应发送确认包,并等待Client确认,由于源IP地址不存在,因为Server需要不断重复的发送直至超时,这些伪造的SYN包将长时间占用半连接队列,导至正常的SYN请求因为队列已满而丢弃,从而引起网络拥塞甚至系统瘫痪

4次挥手

  • 挥手过程如下图:

4次挥手.png

  • TCP挥手为什么需要四次

    1. 因为TCP是全双工通信的
    2. 关闭连接时,当服务端收到FIN报文时仅代表客户端不会再发送数据报文了,但客户端仍可以接收数据报文,且服务器此时可能还有数据报文需要发送所以只能先回复一个ACK报文,告诉客户端,“你发的FIN报文我收到了”,当客户端处理完数据报文后,便发送给主动方FIN报文,这样可以保证数据通信正常可靠地完成,因此不能一起发送。故需要四次挥手。
文章分类
前端
文章标签