目录
一个页面从输入URL到页面加载显示完成,这个过程中发生了什么
1.浏览器补全URL地址
在输入完URL之后,浏览器会自动检查该地址是否完整,例如是否有添加https协议,若发现不完整,会自动补全。
2.向DNS查询IP地址
每个域名都对应一个或多个提供相同服务服务器的 IP 地址,只有知道服务器 IP 地址才能建立连接,所以需要通过 DNS 把域名解析成一个 IP 地址。
3.得到IP地址后,建立连接,进行三次握手
每次建立连接前,客户端和服务端都要先进行三次对话才开始正式传输内容。
4.向该IP地址发送请求
客户端会通过IP地址向服务端发送一个GET请求,服务端会在80端口接收到这个请求并作出响应。
5.服务器在80端口接收请求,传送相应内容至浏览器
6.浏览器解析内容,并继续搜索页面内是否有请求,有的话继续通过IP地址发送至服务器
7.接受完从服务器发送至浏览器的内容之后,浏览器渲染网页,把网页内容呈献给用户
8.客户端与服务端断开连接,进行四次挥手,每次断开连接前,客户端和服务端都要先进行四次对话才正式断开连接。
什么是 TCP 连接的三次握手
TCP 是因特网中的传输层协议,使用三次握手协议建立连接,完成三次握手,客户端与服务器开始传送数据。
第一次握手:建立连接时,客户端发送 syn 包到服务器,并进入 SYN_SENT 状态,等待服务器确认。(客户端:我要连接你了,可以吗?)
第二次握手:服务器收到 syn 包,必须确认客户的 SYN,同时自己也发送一个SYN 包。(服务端:嗯,我准备好了,连接我吧。)
第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包ACK(客户端:那我连接你咯)
此包发送完毕,客户端和服务器进入 ESTABLISHED(TCP 连接成功)状态,完成三次握手。
什么是 TCP 连接的四次挥手
(1)主机向服务器发送一个断开连接的请求。(不早了,我该走了)
(2)服务器接到请求后发送确认收到请求的信号。(知道了)
(3)服务器向主机发送断开通知(我也该走了)。
(4)主机接到断开通知后断开连接并反馈一个确认信号(嗯,好的),服务器收到确认信号后断开连接。
为什么需要三次握手
为了防止已失效的连接请求报文段突然有送到了服务器,因而产生错误,假设两次握手时,客户发出的第一个请求连接报文段在某一网络节点长时间滞留,以致延误到连接释放后才到达服务器。服务器收到失效的连接请求报文段后,认为是客户又发出一次新的连接请求。 于是向客户发送确认报文段,同意建立连接,此时在假定两次握手的前提下,连接建立成功。这样会导致服务器的资源白白浪费。
为什么需要四次挥手
TCP 协议是全双工通信,这意味着客户端和服务器端都可以向彼此发送数据,所以关闭连接是双方都需要确认的共同行为,假设是三次挥手时,首先释放了客户到服务器方向的连接,此时 TCP 连接处于半关闭状态,这时客户不能向服务器发送数据,而服务器还是可以向客户发送数据。如果此时客户收到了服务器的确认报文段后,就立即发送一个确认报文段,这会导致服务器向客户还在发送数据时连接就被关闭。这样会导致客户没有完整收到服务器所发的报文段。