首先,我在网站上搜索了类似的主题,并阅读了 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 访问它。使这成为可能的一种方法是添加将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 的最可靠方法。但我该怎么做呢?甚至有可能在不使用的情况下获得 FQDN PTR
(因为它不可靠)
6)DNS查询是否可以倒退?
通常对 IP 的查询是缓存/递归服务器询问 root,然后是 TLD,然后是子域,直到它获得 IP。有可能向后做吗?得到IP然后以某种方式得到子域,然后是TLD,然后是root,然后我得到了FQDN?
7) FQDN 和 IP 不应该是 1 对 1 映射的吗?
这是我跑步时得到的
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,如何工作?