首先,我在网站上搜索了类似的主题,并阅读了RFC 1535和FQDN wiki,它们似乎没有回答这个问题。
让我以www.youtube.com
为例。我使用的Python脚本:
import socket
for host in ["www.youtube.com"]:
print(host)
try:
hostname, aliases, addresses = socket.gethostbyname_ex(host)
fqdn = socket.getfqdn(host)
print(" Aliases : ", aliases)
print(" Hostname : ", hostname)
print(" FQDN : ", fqdn)
print("Addresses : ", addresses)
except socket.error as msg:
print("%15s : ERROR: %s" % (host, msg))
输出:
Aliases : www.youtube.com
Hostname : youtube-ui.l.google.com
FQDN : sa-in-f93.1e100.net
Addresses : ['74.125.200.93', '74.125.200.190', '74.125.200.136', '74.125.200.91']
1) 主机名和FQDN之间的关系是什么?
根据网站http://kb.iu.edu/d/aiu(以及其他许多网站):对于邮件服务器“mymail.somecollege.edu”,主机名为“mymail”,域为“somecollege.edu”,将它们组合起来形成FQDN。但是,很明显这并不适用于www.youtube.com
。那么,FQDN到底是什么,所有这些名称之间的关系是什么?
2) 当我反向查找IP 74.125.200.93时,主机名变成了sa-in-f93.1e100.net
。为什么反向查找会将FQDN作为主机名呢?这些名称是否可以互换?
socket.gethostbyaddr('74.125.200.93')
Hostname : sa-in-f93.1e100.net
Aliases : []
Addresses : ['74.125.200.93']
3)“Aliases : www.youtube.com”是否也被称为CNAME?根据http://support.dnsimple.com/articles/cname-record/的解释,答案似乎是肯定的:
例如,如果您有一个保存所有文档的服务器,并且该服务器通常通过docs.example.com访问,您也可能希望通过documents.example.com访问该服务器。使这成为可能的一种方法是添加一个指向docs.example.com的CNAME记录。当有人访问documents.example.com时,他们将看到与docs.example.com完全相同的内容。
4)如果上述说法正确,为什么我无法使用“youtube-ui.l.google.com”或“sa-in-f93.1e100.net”访问YouTube呢?下面是直接访问主机名和FQDN后的结果:
Google
404. That’s an error.
The requested URL / was not found on this server. That’s all we know.
编辑#1
很抱歉回复慢了,我仍在阅读那些RFC文档,并且有一些新问题:
再次以www.youtube.com
为例。
5)FQDN是如何生成的?每次调用socket.getfqdn()
或host -t PTR
时,它是否会查询父域直到根(动态生成)?还是只是PTR记录?(似乎查询FQDN依赖于反向查找)。如果它是PTR记录,那么我怎么确定它是FQDN,实际上它可以是FQDN,CNAME,别名,主机名或某些其他名称,如果区域DNS管理员想要这样设置。就像David和Esa Jokinen指出的那样(RFC 1912,2.1),如果不执行这些规则,那么我怎么确定我得到了什么?
因此,我认为查询父域直到根是获取FQDN最可靠的方法。但是我该如何做到这一点?是否可能在不使用PTR
(因为它不可靠)的情况下获取FQDN?
6)DNS查询是否可以倒退进行?
通常,IP的查询是缓存/递归服务器询问根,然后是TLD,然后是子域,直到它获得IP。是否可能反向进行此操作?获取IP,然后以某种方式获取子域,然后是TLD,然后是根,然后我就获得了FQDN?
7)FQDN和IP不应该是一对一映射吗?
当我运行时,这是我得到的:
host 216.58.193.78
输出:
78.193.58.216.in-addr.arpa domain name pointer sea15s07-in-f78.1e100.net.
78.193.58.216.in-addr.arpa domain name pointer sea15s07-in-f14.1e100.net.
一个IP映射到两个FQDN,这是怎么回事呢?一台机器有两个FQDN,它是如何工作的呢?