https://www.zhihu.com/question/36891472
一个域名可以解析出几个IP地址,例如在访问www.163.com时,抓包得到的DNS响应包中有2个IP地址:221.229.167.47和58.220.39.91,
虽然DNS解析得到了多个IP,但是大多数软件只会使用第一个IP地址,这是什么原因?
TCP/IP网络通信是基于IP地址的,当要访问的服务器地址是域名时,就需要先把域名解析成IP地址。在TCP/IP API中有一个叫gethostbyname的函数,负责把域名解析成IP地址。 函数的原型定义如下,参数name就是要解析的域名。struct hostent *gethostbyname(const char *name);
struct hostent {
char *h_name; /* official name of host */
char **h_aliases; /* alias list */
int h_addrtype; /* host address type */
int h_length; /* length of address */
char **h_addr_list; /* list of addresses */
}
#define h_addr h_addr_list[0] /* for backward compatibility */
结构体中的h_addr_list是一个数组,用于存放解析出的多个IP地址,但很少有程序员会去考虑多个IP地址的问题,通常直接使用宏h_addr来获取IP地址,也就是第一个IP地址。
[popexizhi: 这样看推断是客户端完成的,但记得好像操作系统也可以设置,但没有找到对应介绍,mark一下]
没有评论:
发表评论