浏览器输入网址后发生了什么?
一、自己写的答案
一开始HTTP解析URL,解析出协议(http或https),服务器(//后的),路径(/后的),然后将解析出来的数据传输。DNS服务器解析出目标的IP地址,如何解析?首先先询问浏览器有没有DNS缓存,没有就去问操作系统,host文件,DNS本地服务器缓存,若都没有就去迭代询问根服务器,顶级服务器,权威服务器。然后数据包到TCP,在此之前先进行三次握手,目的是为了客户端和服务端有接收和发送的能力和同步双方的序列号,为后续可靠传输做准备。TCP层会在请求信息上加工源端口号和目的端口号,然后到了IP层,IP在请求信息上加上源IP地址和目的IP地址,确定下一跳是到目标服务器还是到路由器,如果ARP缓存里有MAC地址则将MAC地址添加到请求信息上,如果没有,则ARP广播获取MAC地址。然后将请求信息发送到网卡,网卡在请求信息的前面加上数据包的起始位置,末尾加上用于判断信息被破坏的标识FCS,然后将数据发送到交换机,交换机根据目标的MAC地址查找自己的MAC表,找到对应端口直接转发出去,没有则广播,路由器接收到数据首先去掉MAC头,根据IP地址确定下一跳,然后重新封装MAC地址到下一跳,就这样一跳一跳的到目标服务器所在的网络,由最后一台路由器将数据转发到服务器上。服务器接收到数据然后层层扒皮,先扒最外层的MAC地址,接下来IP头部,TCP头部,HTTP,知道客户端需要看当下网址的界面,然后在重新打包客户端需要的界面传送回去。客户端收到响应后,浏览器开始解析HTML将界面绘制出来,页面加载完成后如果不连续使用会通过四次挥手断开TCP连接。
二、经过AI修改后的答案
浏览器输入网址后,首先解析URL,解析出协议(http或https)、服务器域名、路径等信息。
接下来要获取服务器的IP地址,这就轮到DNS干活了。浏览器先看自己的DNS缓存有没有这个域名,没有就去问操作系统,操作系统也没有就查hosts文件,都没找到才向本地DNS服务器发起请求。本地DNS服务器如果也没有缓存,它会去问根服务器,根服务器告诉它找.com服务器,.com服务器告诉它找example.com的权威服务器,权威服务器把真正的IP地址返回给本地DNS,本地DNS再返回给浏览器。
拿到IP之后,浏览器开始和服务器建立TCP连接,也就是三次握手。第一次客户端发SYN,第二次服务器回SYN+ACK,第三次客户端发ACK。三次握手的目的一是确认双方都有发送和接收的能力,二是同步双方的初始序列号,为后面的可靠传输做准备。
如果是HTTPS协议,TCP建立之后还要进行TLS握手,验证证书、协商加密密钥,确保通信安全。
然后开始发送HTTP请求。请求数据从应用层往下传,TCP层加上源端口和目的端口,IP层加上源IP和目标IP,数据链路层加上源MAC和目的MAC。加MAC地址之前要先确定下一跳是谁,如果目标IP在同一个局域网就直接找目标,否则找网关路由器,然后通过ARP获取下一跳的MAC地址。
封装好的数据包交给网卡,网卡在前面加上起始帧分界符,末尾加上FCS校验,然后转成电信号发出去。
数据包先到交换机,交换机根据目的MAC地址查自己的MAC地址表,找到对应端口就转发出去,找不到就广播。经过交换机后到达路由器,路由器剥掉MAC头,根据目标IP查路由表,确定下一跳,重新封装MAC头再发出去,这样一跳一跳最终到达目标服务器所在的网络。
服务器收到数据包后开始层层扒皮:先检查MAC地址是不是自己的,是就剥掉MAC头;再检查IP地址,是就剥掉IP头交给TCP;TCP检查端口号,把数据重组后交给HTTP应用。服务器知道客户端想看哪个页面,就准备好内容,再按照同样的方式一层层封装回去,把响应数据发回给客户端。
客户端收到响应后,浏览器开始渲染:解析HTML构建DOM树,解析CSS构建CSSOM树,合并成渲染树,然后布局计算每个元素的位置,最后绘制到屏幕上。如果页面里有图片、CSS文件、JS文件,浏览器还会继续请求这些资源。全部加载完成后,页面就显示出来了。
页面显示后,如果连接不再使用,会通过四次挥手断开TCP连接。

浙公网安备 33010602011771号