通过浏览器请求一个域名IP

  1. 浏览器内部都有dns客户端,它先查询本地dns缓存中是否有该域名的IP,如果有就直接去访问该IP。如果没有,该dns客户端先要查找自己主机所设置的dns服务器,然后去该dns服务器去查询IP。
  2. 如果该dns服务器本地缓存中有该域名的A记录(域名与IP地址的对应记录),则直接返回给浏览器中的dns客户端。没有该域名的A记录,就通过递归的方式向上询问其他dns服务器,也许问到了根dns服务器才找到了答案。于是这条路上所有被询问过的dns服务器,都将此域名对应的A记录缓存到自己的cache中,以备下次再有相同域名查询时好直接返回。
  3. 浏览器中的dns客户端得到此域名的IP地址后,也将该域名和IP放在自己的缓存中,以备下次用户再键入统一域名时,避免再查一次IP。
  4. 浏览器开始通过网络用http协议访问该IP地址的80端口(默认是80端口,除非特别指定)。
  5. 一般情况下该IP对应的设备不是最终的Web服务器,很少有人把Web服务器直接暴露在公网。假设该IP对应的设备是台网关(一般是硬件路由设备),该网关检查本地缓存中是否有相关Web服务器的缓存,若有则直接将该http请求分配给缓存中的Web服务器。否则从服务器列表中重新分配一台Web服务器,将该http请求转发给该Web服务器处理。随后将该Web服务器的IP地址(一般是内网地址)和端口号缓存起来,以备下次该用户的请求到来时,依然给该Web服务器。有的网关可以识别用户cookie信息,从而可以将请求再次落到上一个请求的Web服务器上。
  6. Web服务器拿到请求后,如果是静态请求,先检查自己的缓存中是否有该页面的记录,否则直接从硬盘上取出页面,将其返回后,再存入本地静态缓存中。如果动态请求,先交给自己的cgi去处理。
  7. cgi拿到数据后,先检查自己的缓存系统,如memcache,如果缓存中没有,与数据库建立连接,向数据库发出请求。
  8. 数据库也是先检查自己的缓存,如没有结果集,则从表中检索到数据后返回,并将结果缓存起来。
  9. cgi拿到数据后,返回给Web服务器,并将数据缓存到memcache中。
  10. Web服务器拿到数据后,将数据返回给网关。由于是动态数据不需要缓存。
  11. 网关拿到数据后,直接返回给浏览器。
  12. 如果浏览器发现其中有静态数据,如图片,也将静态数据缓存到用户的internet临时目录。

    参考文献:《操作系统真象还原》,郑刚

你可能感兴趣的:(基础知识)