我看到几个提到DNS名称(域名)的最大字符串长度是253个字符.维基百科似乎在引用这篇旧博文:
https://en.wikipedia.org/wiki/Hostname http://blogs.msdn.com/b/oldnewthing/archive/2012/04/12/10292868.aspx
另一方面,如果我理解RFC,那么这篇文章就错了.DNS名称最大字符串长度应为250个ASCII字符,而不是253,基于以下字节序列,根据RFC1035最多为255个字节:
为了简化实现,域名的总长度(即,标签八位字节和标签长度八位字节)被限制为255个八位字节或更少.
根据RFC1035,域名的组成如下:
域名表示为标签序列,其中每个标签由长度八位字节后跟该八位字节数组成.域名以根的空标签的零长度八位字节终止.注意,该字段可以是奇数个八位字节; 没有使用填充.
这意味着以下字段构成域名:
格式应始终是(与博客文章不同):
LL + LN [ LL + LN ...] + NL
这意味着最大长度应为(1字节= 1个字符= 1个八位字节):
LL(1)+ LN(63)+ LL(1)+ LN(63)+ LL(1)+ LN(63)LL(1)+ LN(61)+ NL(1)= 255字节
因此,如果我们仅计算字符串部分(LN s),我们得到:
63 + 63 + 63 + 61 =最多250个字符.
我错过了什么,或者我们应该更新一些维基百科的参考文献?我不确定的唯一部分是关于Null标签是255字节的一部分.
我只是对DNS的RFC中某些变量的命名法感到好奇:https://www.ietf.org/rfc/rfc1035.txt
虽然我能找到大多数其他缩略词:
我想知道" QD COUNT" 中" QD "代表什么?
我正在尝试编写一些代码,这些代码将采用"假定的"域名,并将根据RFC 1035对其进行验证.例如,它需要满足以下规则:
[a-z0-9\-]仅为(输入时将域小写)google--com.com)我搜索了各种Python模块(例如:tldextract),但无济于事.
如何验证域名是否符合RFC 1035?
我正在编写一个程序来接收dns消息并回复一个适当的答案(一个只回复A记录的简单dns服务器).
但是当我收到消息时,它与1035 RFC中描述的格式不同.
例如,这是nslookup生成的dns查询:
'\xe1\x0c\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x06google\x03com\x00\x00\x01\x00\x01'
Run Code Online (Sandbox Code Playgroud)
我知道1035 RFC中定义的dns头和位,但为什么它应该是十六进制?
我应该将它们视为十六进制数或它们的utf-8等价物吗?
我的回答是否也应该有这种格式?