从输入URL到页面加载完成的过程-DNS解析域名过程
2014-05-25 13:12
387 查看
当我们输入一个url,比如为:http://my.oschina.net/u/128568/blog,浏览器会解析这个url分成三部分,域名:my.oschina.net,端口:80,请求资源:/u/128568/blog。下面给出浏览器查找域名对应IP的过程,域名为my.oschina.net:
1、浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)
2、操作系统检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
3、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析
4、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器(ISP的DNS),在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性
5、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性
6、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至 “根DNS服务器”,“根DNS服务器”收到请求后会判断这个域名(.net)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.net域的这台服务器。这台负责.net域的服务器收到请求后,如果自己无法解析,它就会找一个管理.net域的下一级DNS服务器地址(oschina.net)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找oschina.net域服务器,重复上面的动作,进行查询,直至找到my.oschina.net主机
7、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机
看下解析过程:
DNS有一点令人担忧,这就是像www.taobao.com这样的整个域名看上去只是对应一个单独的IP地址,那么三个IP肯定对于大访问量和不同地域的访问来说就会有较大的延迟。还好,有几种方法可以消除这个瓶颈:
循环 DNS 是DNS查找时返回多个IP时的解决方案。举例来说,taobao.com实际上就对应了多个IP地址。
负载平衡器 是以一个特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。 一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。
地理 DNS 根据用户所处的地理位置,通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的服务器不能够更新同步状态,但映射静态内容的话非常好。
Anycast 是一个IP地址映射多个物理主机的路由技术。 美中不足,Anycast与TCP协议适应的不是很好,所以很少应用在那些方案中。
大多数DNS服务器使用Anycast来获得高效低延迟的DNS查找。
最后给出一个查询DNS过程的图:
最终获取的域名对应IP为112.124.5.74,此时浏览器发起向112.124.5.74的请求,端口为80,请求资源为/u/128568/blog,发送一条HTTP GET的报文,下面看下浏览器请求的信息:
从请求和响应可以看到很多信息,比如使用GET,响应为200,传输使用了压缩gzip等等,需要说明的是最后这个Connection:keep-alive,是为了兼容HTTP1.0设置的,用来告诉服务器使用持久连接。
上面的情况只是一个快速的查看请求和响应的过程,中间还有很多步骤,下篇文章就介绍TCP三次握手来建立连接的过程。 最后有疑问的是,为什么浏览器
本文参考文章:
http://www.cnblogs.com/wenanry/archive/2010/02/25/1673368.html
http://my.oschina.net/615stu/blog/107646
1、浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)
2、操作系统检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
3、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析
4、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器(ISP的DNS),在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性
5、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性
6、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至 “根DNS服务器”,“根DNS服务器”收到请求后会判断这个域名(.net)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.net域的这台服务器。这台负责.net域的服务器收到请求后,如果自己无法解析,它就会找一个管理.net域的下一级DNS服务器地址(oschina.net)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找oschina.net域服务器,重复上面的动作,进行查询,直至找到my.oschina.net主机
7、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机
看下解析过程:
➜ /Users/zyj >dig +trace my.oschina.net ; <<>> DiG 9.8.3-P1 <<>> +trace my.oschina.net ;; global options: +cmd . 191557 IN NS e.root-servers.net. . 191557 IN NS i.root-servers.net. . 191557 IN NS a.root-servers.net. . 191557 IN NS k.root-servers.net. . 191557 IN NS g.root-servers.net. . 191557 IN NS j.root-servers.net. . 191557 IN NS h.root-servers.net. . 191557 IN NS c.root-servers.net. . 191557 IN NS l.root-servers.net. . 191557 IN NS f.root-servers.net. . 191557 IN NS d.root-servers.net. . 191557 IN NS b.root-servers.net. . 191557 IN NS m.root-servers.net. ;; Received 228 bytes from 114.114.114.114#53(114.114.114.114) in 39 ms net. 172800 IN NS m.gtld-servers.net. net. 172800 IN NS l.gtld-servers.net. net. 172800 IN NS k.gtld-servers.net. net. 172800 IN NS j.gtld-servers.net. net. 172800 IN NS i.gtld-servers.net. net. 172800 IN NS h.gtld-servers.net. net. 172800 IN NS g.gtld-servers.net. net. 172800 IN NS f.gtld-servers.net. net. 172800 IN NS e.gtld-servers.net. net. 172800 IN NS d.gtld-servers.net. net. 172800 IN NS c.gtld-servers.net. net. 172800 IN NS b.gtld-servers.net. net. 172800 IN NS a.gtld-servers.net. ;; Received 489 bytes from 198.41.0.4#53(198.41.0.4) in 136 ms oschina.net. 172800 IN NS ns1.dnsv2.com. oschina.net. 172800 IN NS ns2.dnsv2.com. ;; Received 205 bytes from 192.52.178.30#53(192.52.178.30) in 558 ms my.oschina.net. 86400 IN CNAME www.oschina.net. oschina.net. 7200 IN NS ns1.dnsv2.com. oschina.net. 7200 IN NS ns2.dnsv2.com. ;; Received 115 bytes from 183.60.59.230#53(183.60.59.230) in 15 ms
DNS有一点令人担忧,这就是像www.taobao.com这样的整个域名看上去只是对应一个单独的IP地址,那么三个IP肯定对于大访问量和不同地域的访问来说就会有较大的延迟。还好,有几种方法可以消除这个瓶颈:
循环 DNS 是DNS查找时返回多个IP时的解决方案。举例来说,taobao.com实际上就对应了多个IP地址。
负载平衡器 是以一个特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。 一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。
地理 DNS 根据用户所处的地理位置,通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的服务器不能够更新同步状态,但映射静态内容的话非常好。
Anycast 是一个IP地址映射多个物理主机的路由技术。 美中不足,Anycast与TCP协议适应的不是很好,所以很少应用在那些方案中。
大多数DNS服务器使用Anycast来获得高效低延迟的DNS查找。
最后给出一个查询DNS过程的图:
最终获取的域名对应IP为112.124.5.74,此时浏览器发起向112.124.5.74的请求,端口为80,请求资源为/u/128568/blog,发送一条HTTP GET的报文,下面看下浏览器请求的信息:
Remote Address:112.124.5.74:80 Request URL:http://my.oschina.net/u/128568/blog Request Method:GET Status Code:200 OK #请求头信息 Request Headers Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding:gzip,deflate,sdch Accept-Language:zh-CN,zh;q=0.8,en;q=0.6 Connection:keep-alive Cookie: oscid=Zka95GnBtcz%2FTWwBZdIK1f%2BrZzKNNUN0vu5av2CocDrEpbLcUPBTht%2FIFGWopqXUjIysP943EaQtn4%2FJdlcX%2FOW65EUP%2Fgo7fzPdxBwqLALbq7SVBQoTFw%3D%3D Host:my.oschina.net User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36 #响应头信息 Response Headers Cache-Control:must-revalidate, no-cache, private Connection:keep-alive Content-Encoding:gzip Content-Type:text/html;charset=UTF-8 Date:Sun, 25 May 2014 05:23:43 GMT Expires:Sun, 1 Jan 2000 01:00:00 GMT Pragma:no-cache Server:Tengine/1.4.6 Transfer-Encoding:chunked Vary:Accept-Encoding
从请求和响应可以看到很多信息,比如使用GET,响应为200,传输使用了压缩gzip等等,需要说明的是最后这个Connection:keep-alive,是为了兼容HTTP1.0设置的,用来告诉服务器使用持久连接。
上面的情况只是一个快速的查看请求和响应的过程,中间还有很多步骤,下篇文章就介绍TCP三次握手来建立连接的过程。 最后有疑问的是,为什么浏览器
本文参考文章:
http://www.cnblogs.com/wenanry/archive/2010/02/25/1673368.html
http://my.oschina.net/615stu/blog/107646
相关文章推荐
- 从输入URL到页面加载完成的过程中都发生了什么事情?
- Web访问原理-从输入URL到页面加载完成的过程中都发生了什么事情?
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?
- [转]从输入url到页面加载完成的过程中都发生了什么事情
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?
- 从输入 URL 到页面加载完成的过程中都发生了什么事情( by vczero)
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?
- 从输入URL到页面加载完成的过程中都发生了什么事情?
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?
- 输入 URL 到页面完成加载过程中的所有发生的事情?
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?
- 从输入URL到页面加载完成的过程-数据包组装过程
- 《从输入URL到页面加载完成发生了什么》学习过程
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?