![为什么 SOA 文件中的电子邮件以 . 而不是 @](https://linux22.com/image/718879/%E4%B8%BA%E4%BB%80%E4%B9%88%20SOA%20%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E4%BB%A5%20.%20%E8%80%8C%E4%B8%8D%E6%98%AF%20%40.png)
当我检查 cloudflare.com 的 SOA 时,我得到
cloudflare.com has SOA record ns3.cloudflare.com. dns.cloudflare.com. 2027217413 10000 2400 604800 300
它返回的电子邮件为 dns.cloudflare.com,而不是[电子邮件保护]。
为什么是这样 ?
答案1
首先,DNS是一种二进制协议,每个字段都有不同的数据类型,它不是自由格式的文本。
就其数据类型而言,该SOA
RNAME
字段(其中包含代表电子邮件地址的内容)是域名。
这域名类型与电子邮件地址并不完全匹配,但大概字段的一次性需求SOA
RNAME
并不需要引入额外的数据类型。
A域名DNS 由一系列标签组成,这些标签在文本格式中以点分隔(就像您习惯看到的那样)。
如果不引入某种新类型,例如,如果您要编写[email protected].
,则会有一个标签dns@cloudflare
、一个标签com
和末尾的空(根)标签。
虽然这在文本格式中看起来很合理,但它也会很奇怪(只是方式不同),因为电子邮件地址的两个截然不同的部分现在不自然地融合在一起,只有文本表示才有意义。
另一个选择可能是使用字符串(例如TXT
),但它将完全没有结构并且可以具有任何类型的字符串值。
我认为我们的解决方案可能是最不奇怪的方法(至少从技术角度来看),用于表示电子邮件地址而无需为此目的添加专门的数据类型。