在浏览器输入一个网址回车后,发生了什么?

2018-03-27  本文已影响0人  kindol

过程:

  1. 解析DNS为对应IP
  2. 向IP所对应的服务器发送请求,服务器创建线程(服务器会有一个复杂的处理过程,若为服务器组还需要考虑负载平衡等)响应并返回默认资源给予用户
  3. 当数据返回给浏览器的时候,若浏览器解析数据还有一些静态资源(CSS、图片等),将再次发送HTTP请求,这些请求可能在CDN(内容分发网络)上,CDN服务器会处理用户请求

DNS解析:

用户输入域名后,系统会进行如下解析操作:

  1. 浏览器检查缓存有无此域名对应的解析过的IP地址(缓存于浏览器的域名存在TTL,TTL太长可能导致域名对应的IP有变化而无法正确解析,太短导致用户每次访问网站都要重新解析域名),若有,解析结束,否则,转2
  2. 浏览器查找OS缓存(host)中有无域名对应的DNS解析结果。以上这两步也称为本地解析,若失败,则请求域名服务器(下图不包括本地解析)
  3. 操作系统向LDNS(local dns server)发请求,LDNS是默认设置的
  4. 若LDNS仍然没有命中,LDNS会直接到Root Server域名服务器请求解析
  5. Root Server返回给LDNS一个所查询域的主域名服务器地址。gTLD是国际顶级域名服务器,如.com、.cn、.org等,全球只有13台
  6. LDNS向上一步返回的主域名服务器发送请求
  7. gTLD服务器查找并返回此域名对应的Name Server域名服务器(所注册的域名服务器)的地址
  8. LDNS向Name Server域名服务器发起查询,接收返回的IP和TTL,缓存并返回给客户
  9. 客户将TTL缓存到本地缓存中,解析结束

实际DNS解析中,可能不只这几个步骤,如Name Server可能有多级,或者有一个GTM来负载均衡控制,这些都可能影响DNS解析过程

dns.PNG

DNS解析后主要在两个地方缓存解析结果

二者都是利用TTL及本地缓存大小控制的。

Windows可以使用ipconfig /flushdns刷新缓存

JAVA的域名缓存

JVM也会有DNS的解析结果,这个缓存是在InetAddress类完成的,且其会有两种缓存策略:正确结果的缓存、错误结果的缓存。

使用InetAddress解析域名最好使用单例模式,否则每次创建InetAddress都会有一次完整的域名解析,过于耗时。

推荐参考:

《深入分析javaweb技术内幕》
上一篇 下一篇

猜你喜欢

热点阅读