参考:RFC 1001
简单来说,就是将每个字符根据其 ASCII 值拆分成两部分,然后将每部分添加到 A(0x41)中,形成两个新的字符。
例如字符W对应0x57,拆分成0x5和0x7,然后分别与0x41相加,得到0x46和0x48,分别为F和H。
尽管此编码过程旨在与 DNS 压缩配合使用,但它仍然会导致整体消息长度更长(从 16 字节到 32 字节)。
那么,为什么在这种情况下需要一级编码?
答案1
它似乎这是为了保持与 DNS 软件的兼容性。正如规范所述,NetBIOS 名称始终用 NUL 填充到 16 个字节,并且它们的最后一个字节用于指示名称类型(即不总是 ASCII 字符)。尽管 DNS 作为一种协议可以支持包含 NUL 的标签(它使用长度值编码),用 C 和类似语言编写的客户端和服务器可能会在尝试解决时遇到问题,例如,Example PC\0\0\0\x03.example.com.
因为它们通常期望以 NUL 终止的字符串作为输入。