面试官常问的关于http建立连接的高频问题:
1、说一说http建立连接的过程 ?
2、你刚讲到了3次握手,为什么是3次,2次不行吗 ?
3、SYN攻击是什么 ?
4、那断开连接呢,需要几次 ?
5、为什么是4次呢 ?
以下是各个问题的回答
http3次握手的过程以及每次握手的作用
三次握手:是指建立一个TCP连接时,需要客户端与服务器总共发送3个包
主要目的:确认客户端和服务端接受和发送是否正常
每次握手的目的:
- 第一次握手:客服端发送一个报文(SYN),服务器接收到了,说明:客户端的发送能力 和 服务器的接受能力没有问题
- 第二次握手:服务器回应客户端发送一个报文(ACK),客户端接收到了。说明:服务器的发送能力和接收能力没有问题,客户端的发送和接收能力没有问题
- 第三次握手:客户端回应服务器并发送一个报文,服务器接收到了。说明: 通过这次接收,服务器确认客户端的接收能力和发送能力没有问题
- 握手过程如下图
- 为什么需要三次握手,两次不行吗
- 三次握手是为了防止当已失效的连接请求报文段突然又传到服务端,造成双方的不一致,导致资源的浪费
- 三次握手过程中可以携带数据吗
- 第三次握手的时候,可以携带数据,但是第一二次握手不可以携带数据
- SYN攻击是什么 ?
服务器的资源分配是在二次握手的时候;客户端的资源分配是在完成第三次握手时分配的
所有服务器容易受到SYN的洪泛攻击,SYN攻击就是Client在短时间内伪造大量不存在的IP地址并向Server不断地发送SYN包,Server则回应发送确认包,并等待Client确认,由于源IP地址不存在,因为Server需要不断重复的发送直至超时,这些伪造的SYN包将长时间占用半连接队列,导至正常的SYN请求因为队列已满而丢弃,从而引起网络拥塞甚至系统瘫痪。
四次挥手
- 挥手过程如下图:
- TCP挥手为什么需要四次
- 因为TCP是全双工通信的
- 关闭连接时,当服务端收到FIN报文时仅代表客户端不会再发送数据报文了,但客户端仍可以接收数据报文,且服务器此时可能还有数据报文需要发送,所以只能先回复一个ACK报文,告诉客户端,“你发的FIN报文我收到了”,当客户端处理完数据报文后,便发送给主动方FIN报文,这样可以保证数据通信正常可靠地完成,因此不能一起发送。故需要四次挥手。