为什么 SOA 文件中的电子邮件具有 . 代替 @

rus*_*009 -1 domain-name-system dns-zone

当我检查 cloudflare.com 的 SOA 时,我得到,

cloudflare.com has SOA record ns3.cloudflare.com. dns.cloudflare.com. 2027217413 10000 2400 604800 300
Run Code Online (Sandbox Code Playgroud)

它返回的电子邮件为 dns.cloudflare.com,而不是 dns@cloudflare.com。

为什么是这样 ?

Håk*_*ist 5

首先,DNS 是一个二进制协议,每个字段都有不同的数据类型,它不是自由格式的文本。

SOA RNAME字段(包含应该代表电子邮件地址的内容)就其数据类型而言,是一个域名

域名类型与电子邮件地址并不完美匹配,但可能对字段的一次性需求SOA RNAME并不保证引入额外的数据类型。

DNS 中的域名由一系列标签组成,这些标签在文本格式中用点分隔(就像您习惯看到的那样)。

在不引入某种新类型的情况下,如果您要编写 eg dns@cloudflare.com.,则会有一个 label dns@cloudflare,一个com以及末尾的空(根)标签。
虽然这在文本格式中看起来很合理,但它也很奇怪(只是以不同的方式),电子邮件地址的两个截然不同的部分现在不自然地融合在一起,只有文本表示才有意义。

另一种选择可能是使用字符串(如 eg TXT),但它会完全非结构化,并且可以具有任何类型的字符串值。

我认为我们拥有的解决方案可能是最不奇怪的方法(至少从技术角度来看),如何表示电子邮件地址,而无需为此添加专门的数据类型。