记:
DNS(Domain Name System,域名系统)就是根据域名来查找对应的IP地址的一个关键系统。
域名层级关系:
- 根域名服务器(.)
- 顶级域名服务器(.com)
- 权威域名服务器(server.com)
首先浏览器会对这个 URL 进行解析,从而生成发送给Web服务器的请求信息,这个URL实际上是请求服务器里的文件资源,如果这个URL中没有路径名的话,就代表访问根目录下事先设置的默认文件,也就是/index.html 或 /default.html,在对URL解析之后,浏览器就确认了Web服务器和文件名,接下来就是根据这些信息来生成HTTP请求消息,生成HTTP请求消息之后就需要委托操作系统将消息发送给Web服务器,但是在发送之前,还需要查询服务器域名对应的IP地址,因为委托操作系统发送消息时,必须提供通信对象的 IP 地址。
首先,浏览器会先看看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会看看自己缓存中是否有,有的话直接返回,没有的话就再去hosts文件看,如果也没有的话就会去问本地的DNS服务器了,本地的DNS服务器接收到客户端的请求后,也会先看自己缓存了没,有的话直接返回,没有的话本地DNS就会去问它的根域名服务器,根DNS不会直接解析域名到IP,而是看到这个域名的后置是.com,告诉本地域名服务器,该域名的顶级域名服务器在哪里,让本地域名服务器去那里查询,顶级域名服务器也和根域名服务器差不多,也是告诉本地域名服务器这个域名的权威NDS服务器在哪里,让本地域名服务器继续查询,这时候权威DNS服务器查询后将此域名对应的IP地址告诉给本地DNS,本地DNS再将IP地址返回给客户端,客户端与目标建立TCP/IP连接,然后由浏览起发送一个HTTP请求,经过路由器的转发,通过服务器的防火墙,该HTTP请求到达了服务器,服务器处理该HTTP请求,返回一个HTML文件浏览器解析该HTML文件,并且显示在浏览器端。
其实这个过程中还是省略了很多的内容,比如通过DNS域名系统获取到IP地址之后,还需要把HTTP的传输工作交给操作系统中的协议栈,进行一些操作之后再找TCP协议传输,因为HTTP是基于TCP协议传输的,然后进行TCP的三次握手建立连接,三次握手的目的是为了保证双方都有发送和接收的能力,之后再通过IP,MAC,网卡,交换机,路由器......其实就是网络分层模型,最后数据包抵达服务器,就需要对数据包进行扒皮,同时判断是否和自己的各项符合,然后将HTTP想要的再打包发给HTTP进程,打包也就是将被扒掉的再重新穿回去,之后再通过网卡,交换机,路由器......到客户端,然后客户端接收到之后也开始扒皮,也就是还要再走一遍网络分层模型,最后扒到只剩下HTTP响应报文后,再交给浏览器去渲染页面,最后,客户端和服务器发起TCP的四次挥手,到这里,双方的连接就断开了。