天天看点

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

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

1、说一说http建立连接的过程 ?

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

3、SYN攻击是什么 ?

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

5、为什么是4次呢 ?

以下是各个问题的回答

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

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

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

每次握手的目的:

  • 第一次握手:客服端发送一个报文(SYN),服务器接收到了,说明:客户端的发送能力 和 服务器的接受能力没有问题
  • 第二次握手:服务器回应客户端发送一个报文(ACK),客户端接收到了。说明:服务器的发送能力和接收能力没有问题,客户端的发送和接收能力没有问题
  • 第三次握手:客户端回应服务器并发送一个报文,服务器接收到了。说明: 通过这次接收,服务器确认客户端的接收能力和发送能力没有问题
  • 握手过程如下图
http面试之——http3次握手和4次挥手
  • 为什么需要三次握手,两次不行吗
  • 三次握手是为了防止当已失效的连接请求报文段突然又传到服务端,造成双方的不一致,导致资源的浪费
  • 三次握手过程中可以携带数据吗
  • 第三次握手的时候,可以携带数据,但是第一二次握手不可以携带数据
  • SYN攻击是什么 ?

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

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

四次挥手

  • 挥手过程如下图:
http面试之——http3次握手和4次挥手
  • TCP挥手为什么需要四次
  1. 因为TCP是全双工通信的
  2. 关闭连接时,当服务端收到FIN报文时仅代表客户端不会再发送数据报文了,但客户端仍可以接收数据报文,且服务器此时可能还有数据报文需要发送,所以只能先回复一个ACK报文,告诉客户端,“你发的FIN报文我收到了”,当客户端处理完数据报文后,便发送给主动方FIN报文,这样可以保证数据通信正常可靠地完成,因此不能一起发送。故需要四次挥手。

继续阅读