这是显示所请求网站的IP的程序: {
import java.net.*;
class verify {
public static void main(String args[]) throws UnknownHostException{
InetAddress address=InetAddress.getLocalHost();
System.out.println(address);
address=InetAddress.getByName("www.bcetgsp.ac.in");
System.out.println(address);
InetAddress SW[]=InetAddress.getAllByName("www.nba.com");
for(int i=0;i<SW.length;i++)
System.out.println(SW[i]);
}
}
}
这里我为nba.com获得了2个ip的
这是什么原因? 我所听到的是“用一个名字代表几台机器是很常见的。”但如果我们通过www.google.com取代www.nba.com,我只能获得1个ip。(为什么?)
答案 0 :(得分:2)
简短回答:DNS记录可以映射到多个IP,以实现冗余(容错)的原因。
这意味着许多服务器都会回答nba.com。这很正常。
嗯,我不确定......谷歌肯定没有一台服务器可以回答您的问题(否则它们将无法全天候在线提供最高可用性),但我有一个可能的解释。
我记得www.google.com指向多个CNAME记录,每个记录解析为1个最终IP地址。也许,www.nba.com直接映射到多个IP(在您的情况下为2,对于这样一个重要的网站来说太少了。)
答案 1 :(得分:1)
我猜那是因为他们那边有服务器场。一个名称可以在许多IP上共享,这些IP在每个DNS请求时以循环方式选择。
答案 2 :(得分:0)
Google记录不会只返回1个ip:
$ host google.com
google.com has address 74.125.230.84
google.com has address 74.125.230.83
google.com has address 74.125.230.80
google.com has address 74.125.230.81
google.com has address 74.125.230.82
答案 3 :(得分:0)
请注意,使用Anycast,主机在DNS中可能只有一个IP地址,但可以通过遍布全球的物理机器来处理。因此,即使用于提供容错和负载平衡的通常答案是DNS round-robin或geo-location,使用Anycast和智能BGP路由可以提供类似的容错,负载均衡和网络拓扑适当的路由。
当然,Anycast最适合无状态任务,例如DNS查找; 可以用于提供TCP服务,但是在服务器上需要存储每个客户端状态的系统可能不是最佳的,因为客户端可能随着路由拓扑的变化而连接到不同的服务器。如果没有Anycast,路由可能只是对端点不是最优的,但仍然起作用。 (可能存在到不同主机的更好路由:使用Anycast,数据包将被重定向。如果没有Anycast,数据包将采用较慢的路由到已经建立但不太好的对等体。)