输入facebook的URL按下回车后究竟发生了什么(1)


51CTO.com 独家译稿】作为一名软件开发或是网络技术人员,你应该对Web应用程序的运行原理和协议交换,以及涉及到的技术:如浏览器、HTTP、HTML、Web服务器和请求处理程序等都有所了解才行。在这篇文章中,我们将深入探讨你访问某个URL时发生的一系列事情。

1、你在浏览器中输入某个URL

我们从这里开始:

图 1

图 1

2、浏览器查找该域名对应的IP地址

图 2

图 2

第一步是找出所访问域名对应的IP地址,按以下顺序循环查找DNS记录:

◆浏览器缓存 - 浏览器会缓存DNS记录一段时间,有趣的是,操作系统不会告诉浏览器每条DNS记录的存活时间,浏览器按照固定的周期进行缓存每种浏览器的保留时间从2-30分钟长度不定)。

◆操作系统缓存 - 如果浏览器缓存中没有要找的记录,浏览器会产生一个系统调用在Windows中是gethostbyname),操作系统有它自己的缓存。

◆路由器缓存 - 请求继续来到你的路由器,路由器通常也有自己的DNS缓存。

◆ISP DNS缓存 - 下一步要检查的是ISP的DNS服务器,当然也是有缓存的。

◆递归查找 - ISP的DNS服务器开始一个递归查找,从根域服务器开始,到.com顶级域名服务器,再到Facebook的域名服务器,正常情况下,DNS服务器将会缓存.com域名服务器的名字,因此不一定需要访问根域服务器。

下面是一个递归DNS查找过程示意图:

图 3

图 3

关于DNS一个令人担心的问题是,整个域名如wikipedia.org或facebook.com只映射到单个IP地址,幸运的是,有许多方法来消除这个问题。

◆循环DNS :DNS查找返回多个IP地址,例如,facebook.com真实情况是映射到了4个IP地址。

◆负载均衡: 由专用硬件监听一个特定IP地址,然后将请求转发给其它服务器,大型网站一般都使用了昂贵的高性能负载均衡设备。

◆基于地理位置的DNS: 将域名映射到不同地理位置的IP地址提高扩展性,对于托管静态内容的服务器布局来说,这个方法很有用,不同服务器之间不需要相互同步状态。

◆Anycast任播): 它是一种路由技术,单个IP地址可以映射到多台物理服务器,遗憾的是,任播对TCP不友好,在实际中很少使用。

大多数DNS服务器本身使用任播实现高可用和DNS查找的低延迟。

3、浏览器向Web服务器发送一个HTTP请求

图 4

图 4


相关内容