Bob随后试图连接时,也会用DNS查找IP地址,但由于地址列表在Alice上次请求的基础上轮转了一个位置,所以他会得到一个不同的结果。Bob得到207.25.71.6作为第一个IP地址,在图f中它连接到了这台服务器上
4、 DNS缓存带来的影响
DNS对服务器的每次查询都会得到不同的服务器地址序列,所以DNS地址轮转会将负载分摊。但是这种负载均衡并不完美,因为DNS查找的结果可能会被记住,并被各种应用程序、操作系统和一些简易的子DNS服务器重用。很多Web浏览器都会对主机进行DNS查找,然后一次次地使用相同的地址,以减少DNS查找的开销,而且有些服务器也更愿意保持与同一台客户端的联系。另外,很多操作系统都会自动进行DNS查找,并将结果缓存,但并不会对地址进行轮转。因此,DNS轮转通常都不会平衡单个客户端的负载——一个客户端通常会在很长时间内连接到一台服务器上
尽管DNS没有对单个客户端的事务进行跨服务器副本的处理,但在分散多个客户端的总负荷方面它做得相当好。只要有大量具有相同需求的客户端,就可以将负载合理地分散到各个服务器上去
5、其他基于DNS的重定向算法
前面讨论了DNS是如何对每条请求进行地址列表轮转的。但是,有些增强的DNS服务器会使用其他一些技术来选择地址的顺序
a、负载均衡算法
有些DNS服务器会跟踪Web服务器上的负载,将负载最轻的Web服务器放在列表的最前面
b、邻接路由算法
Web服务器集群在地理上分散时,DNS服务器会尝试着将用户导向最近的Web 服务器
c、故障屏蔽算法
DNS服务器可以监视网络的状况,并将请求绕过出现服务中断或其他故障的 地方
通常,运行复杂服务器跟踪算法的DNS服务器就是在内容提供者控制之下的一个权威服务器
有一些分布式主机服务会使用这个DNS重定向模型。对于那些要查找附近服务器的服务来说,这个模型的一个缺点就是,权威DNS服务器只能用本地DNS服务器的IP地址,而不能用客户端的IP地址来做决定
【任播寻址】
在任播寻址中,几个地理上分散的Web服务器拥有完全相同的IP地址,而且会通过骨干路由器的“最短路径”路由功能将客户端的请求发送给离它最近的服务器
要使这种方法工作,每台服务器都要向邻近的骨干路由器广告,表明自己是一台路由器。Web服务器会通过路由器通信协议与其邻近的骨干路由器通信。骨干路由器收到发送给任播地址的分组时,会(像平常一样)寻找接受那个IP地址的最近的 “路由器”。由于服务器是将自己作为那个地址的路由器广告出去的,所以骨干路由器会将分组发送给服务器
下图中,三台服务器为同一个IP地址10.10.10.1服务。洛杉矶(LA)服务器将此地址广告给LA路由器,纽约(NY)服务器同样将此地址广告给NY路由器,以此类推。服务器会通过路由器协议与路由器进行通信。路由器会将目标为10.10.10.1的客户端请求自动地转发到广告这个地址的最近的服务器上去。对IP地址10.10.10.1的请求会被转发给服务器3
任播寻址仍然是项实验性技术。要使用分布式任播技术,服务器就必须“使用路由器语言”,而且路由器必须能够处理可能出现的地址冲突,因为因特网地址基本上都是假定一台服务器只有一个地址的。(如果没有正确地实现,可能会造成很严重的 “路由泄露”问题。)分布式任播是一种新兴技术,可以为那些自己控制骨干网络的内容提供商提供一种解决方案
【IP MAC转发】
在以太网中,HTTP报文都是以携带地址的数据分组的形式发送的。每个分组都有一个第四层地址,由源IP地址、目的IP地址以及TCP端口号组成,它是第四层设备所关注的地址。每个分组还有一个第二层地址,MAC(Media Access Control,媒体访问控制)地址,这是第二层设备(通常是交换机和Hub)所关注的地址。第二层设备的任务是接收具有特定输入MAC地址的分组,然后将其转发到特定的输出MAC地址上去
比如,下图交换机的程序会将来自MAC地址MAC3的所有流量都发送到MAC地址MAC4上去