发生的过程
- 输入网址后,进行DNS的域名解析,得到一个IP地址
- 根据IP地址,建立TCP的连接,发起TCP的三次握手
- 建立TCP连接成功后,向服务器发送一个HTTP请求
- 服务器接受到HTTP请求后,处理相关的请求,并返回处理后的结果
- TCP进行四次挥手,断开连接
- 浏览器接收响应,进行解析,解析完成后,根据浏览器的渲染机制对响应的数据进行渲染
说一下TCP协议的三次握手过程?
- 第一次握手是客户端向服务端发起的,是用来申请建立连接的,那这个报文当中的SYN标志呢,会标记为1,所以呢,我们也叫作SYN包
- 第二次握手是服务器回复给客户端的,那么是用来确认并接受连接请求的,那这个报文当中的SYN位和ACK位呢,都会标记为1,所以也叫作为SYN-ACK报文
- 第三次握手仍然是客户端发送给服务器的,是用来确认服务器的回复消息,这个报文当中的ACK标记会为1,所以呢,我们也叫作ACK包
说一下TCP协议的四次挥手过程? TCP协议完成了数据发送之后呢,就会断开连接,这个时候呢,就需要经历一个四次挥手的过程
- 第一次挥手是客户端向服务器发起的,是用来申请断开连接的,这个报文当中的FIN标志位呢,会标记为1,所以我们也叫作FIN包
- 第二次挥手是服务器回复给客户端的,是用来确认客户端的上一个断开连接请求的,所以呢,是一个ACk报文
- 第三次挥手仍然是服务器发送给客户端的,是用来告知客户端,服务器的数据已经发送完毕了,需要断开这个连接,这个报文中的FIN标志位,会标记为1,所以呢,也是一个FIN包
- 第四次挥手是客户端回复给服务器的,是用来确认上一个断开连接的请求,所以呢,也是一个ACK报文
为什么握手需要3次,挥手却需要4次的?
- 三次握手呢是TCP协议建立连接的过程,建立连接的话,我们只需要确认一下你在,我也在就好了,所以呢,三次握手就够了。
- 但是四次挥手呢是TCP协议为了断开连接的,所以需要确保,我既结束了这个数据的发送,也结束了这个接收数据,那么开始客户端,先结束发送并告知服务器,服务器确认后就结束接收了,这两次挥手完成后,客户端也还在接收数据,服务器也还在发送,所以需要服务器也发送一次FIN包,告诉我也结束数据的一个发送了,客户端确认后,才双方都关闭发送和接收数据的通道,所以必须是四次