AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1843857
Accepted
chmike
chmike
Asked: 2024-05-27 18:32:04 +0800 CST2024-05-27 18:32:04 +0800 CST 2024-05-27 18:32:04 +0800 CST

域名的最大长度是多少?

  • 772

根据域名规范RFC 1035:

2.3.4.尺寸限制

名称 255 个八位字节或更少

根据 SMTP RFC 5321:

4.5.3.1.2 .领域

域名或号码的最大总长度为 255 个八位位组。

因此,我认为 RFC 是一致且清晰的。

然而,有些人声称它是 254,因为末尾可能存在一个点,尽管 RFC 1中没有提及这样的点。

其他人声称它是 253 ,原因很奇怪,比如存在前缀字符串长度字节和 C 字符串2 , 3 , 4的尾部 '\0' 。

最大域字节长度是多少?

dns
  • 1 1 个回答
  • 494 Views

1 个回答

  • Voted
  1. Best Answer
    grawity_u1686
    2024-05-27T19:54:47+08:002024-05-27T19:54:47+08:00

    这取决于上下文。您的 RFC 列出了不同的限制,因为它们讨论了不同的内容 - 255 的 SMTP 限制专门针对电子邮件地址的域部分local@domain,与 DNS 协议设置的限制几乎没有关系(如果有的话)。

    (部分原因是 SMTP早于 DNS 多年——它是在 HOSTS.TXT 仍在 ARPANET 上使用时设计的(参见 RFC 810/811);并且它曾经存在于电子邮件通过 10 个不同网络传输的世界中因此 SMTP 电子邮件地址域可能根本就不是 Internet 域。)

    先决条件

    首先从一个重要的细节开始:

    然而,有些人声称它是 254,因为末尾可能存在一个点,尽管 RFC 中没有提到这样的点

    有。 RFC 1034 第 3.1 节:

    当用户需要输入域名时,每个标签的长度为
    省略,标签由点(“.”)分隔。  自从完成了
    域名以根标签结尾,这会导致打印表格
    以点结尾。  我们使用这个属性来区分:
    
       - 代表完整域名的字符串
         (通常称为“绝对”)。例如,“poneria.ISI.EDU”。
    
       - 代表a的起始标签的字符串
         域名不完整,应由以下人员填写
         使用本地领域知识的本地软件(通常
         称为“亲戚”)。例如,“poneria”用于
         ISI.EDU 域。
    
    相对名称要么相对于众所周知的起源,要么相对于
    用作搜索列表的域列表。亲属名称主要出现在
    用户界面,其解释各不相同
    实施到实施,以及主文件中,它们在哪里
    相对于单个原始域名。最常见的解释
    使用根“.”作为单一来源或作为成员之一
    搜索列表的名称,因此多标签相对名称通常是其中之一
    为了节省打字,省略了尾随点。
    

    因此,根据规范,www.google.com不是完整的域名 -www.google.com.是 - 并且尾随点只是“省略以节省打字”,但非常有效并且具有特定用途。您添加一个尾随点来告诉系统不应附加本地域。

    • 举一个实际的例子,ICANN 曾经允许顶级域名拥有“主机”记录。例如,tk.TL​​D 有一个网站http://tk./- 必须用尾随点编写,否则您的系统会查找tk.dlink.lan或其他什么。

    • RFC 使用单标签示例,许多人假设所有系统都将任何多组件域名视为绝对域名,但情况并非总是如此 - 特别是 Windows,不会这样限制自己。

      相反,如果在 Windows 中配置了 DNS 搜索后缀,它将应用于任何非绝对名称,即使它具有多个组件。例如,如果corp.example.com是您系统的域,www.google.com则将首先尝试 aswww.google.com.corp.example.com.并且仅然后尝试 as www.google.com.。

      在这种情况下,您可以在输入中显式添加尾随点,以防止操作系统自动在其后添加本地域后缀。

    您正在阅读的另一个 RFC – RFC 1035 – 没有谈论“尾随点”,因为它主要关注网络协议,而面向用户的细节在 RFC 1034 中。

    但文本表示并不是实际长度限制的来源。

    实际限制

    当应用于域名时,真正的限制是“255 个八位字节或更少”,因为它以 DNS网络(数据包)格式表示,该格式不使用“点”分隔符 – 它确实使用长度前缀字节 – 以及等效的“尾随点”不是可选的。

    在此格式中,每个字符串都以长度字节为前缀,整个列表以 0 字节字符串结尾。引用 RFC 1035:

    消息中的域名以标签序列的形式表示。
    每个标签都表示为一个八位字节长度字段,后跟该字段
    八位位组的数量。  由于每个域名都以空标签结尾
    在根中,域名以长度字节零终止。  这
    每个长度八位字节的高阶两位必须为零,并且
    长度字段的剩余六位将标签限制为 63 个八位字节或
    较少的。
    

    例如,www.google.com将变为:

    14 characters:    www.google.com
    
    Interpreted as:   [3] "www"
                      [6] "google"
                      [3] "com"
                      [0] ""          ("null label of the root")
    
    16 bytes:         <0x03> w w w <0x06> g o o g l e <0x03> c o m <0x00>
    

    (这里尾随的 0x00 字节与 C 字符串无关;在某种程度上,它完全相反——格式更像是一系列 Pascal 字符串——但实际上它与任何编程语言都没有关系。它是特别是域名在网络协议中传输的方式。)

    因此,根据同一个 RFC,此特定形式的域名限制为 255 字节:

    为了简化实现,域名的总长度(即
    标签八位位组和标签长度八位位组)限制为 255 个八位位组或
    较少的。
    

    碰巧二进制(网络)表示几乎总是比常用的文本表示长两个字节(即没有尾随点)。因此,如果域名在线路上的长度限制为 255 个八位字节,则文本形式的域名长度也将限制为 253 个 ASCII 字符(加上可选的尾随点作为第 254 个字符)。

    换句话说,这三个数字本身都是正确的——但它们常常是在没有任何背景来解释的情况下“声称”的; 255 对于数据包格式是正确的,254 对于带有尾随点(绝对名称)的 ASCII 格式是正确的,253 对于不带尾随点的“常规”ASCII 格式是正确的。

    1(除非\.存在类似的东西,它是二进制形式的一个八位字节,但在文本中表示为两个八位字节 - 但这在实践中极其罕见;您唯一会看到这种情况是在查看 SOA“负责人”字段时。如果如果您正在编写 DNS 库,则必须考虑到这一点,否则您可以忽略它。)


    由于您的模块接受 ASCII 格式的域名,因此它应该:

    1. 最多允许一个尾随点 - 最好在继续验证之前始终添加或始终删除它(为了一致性)。

    2. 如果存在尾随点,则最多允许 254 个字节;如果删除了尾随点,则最多允许 253 个字节。

    3. 将大部分“顶级域有效性”检查合并到常规“标签”检查中,因为每个标签的基本规则完全相同,无论它是第一个、最后一个还是中间的。

      (虽然 TLD 确实存在其他规则,但它们不是由协议设置的 - 它们是由 ICANN 作为定义 TLD 的根区域的维护者根据政策设置的。因此,虽然“以数字开头”是合理的对于 TLD 规则,应将其分开。)

    4. 有一种模式可以放宽“允许的字符”规则。一般来说,域名可以包含任何字符——只有用作主机名的域名才有更强的限制,这些限制来自于它们“用作主机名”(即用于 A/AAAA 查找),而不是来自于它们是“域名”。

      在 DNS 级别,非“主机名”域名几乎可以包含任何内容,例如它们通常包含类似字符_(这对于 SRV 记录实际上是强制性的;_minecraft._tcp.example.com是一个典型的例子),因此域名验证至少需要区分“主机名(无下划线)”和“非主机名(下划线OK)”作为不同的上下文。

    • 12

相关问题

  • 如何设置 DNS、AWS S3、AWS Cloudfront 和 AWS Certificate Manager 以保护多个站点

  • 5355 UDP svchost.exe Dnscache

  • 使用 dnsmasq.conf 阻止内部 IP 地址

  • 需要验证 firebaseapp.com 子域

  • 迁移 Windows Server 2008

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve