假设有一个 DNS 查询中的域名为”example.com”,它可以被表示为以下格式的 DNS 压缩格式:
0x07 'e' 'x' 'a' 'm' 'p' 'l' 'e' 0x03 'c' 'o' 'm' 0xc0 0x00
其中0xc0 0x00是一个指针,指向DNS报文开头的位置。这个指针告诉解析器从DNS报文中读取之前已经解析过的部分(”example.com”),而不是再次重复解析。
然而,如果该域名中包含指向自己的指针,例如”example.com”被表示为以下格式的 DNS 压缩格式:
0x07 'e' 'x' 'a' 'm' 'p' 'l' 'e' 0x03 'c' 'o' 'm' 0xc0 0x0c
这个指针0xc0 0x0c指向了DNS查询中自身的位置,造成了循环引用。这样的域名可能会导致DNS解析器进入无限循环,最终耗尽系统资源。因此,在编写DNS解析器时必须对这种情况进行特殊处理。