Skip to main content

4. Server Reply Source Address Selection (服务器回复源地址选择)

大多数(如果不是全部)DNS客户端期望接收回复的地址与发送引发该回复的查询的地址相同。对于为递归查询解析目的而充当客户端的服务器以及简单的解析器客户端来说,这都是正确的。地址与回复中的标识符(ID)一起用于消除回复的歧义,并过滤虚假响应。这可能是或可能不是DNS设计时的初衷,但现在已成为既成事实。

一些运行DNS服务器的多宿主主机使用的源地址生成回复,该源地址与客户端请求数据包的目标地址不同。这样的回复将被客户端丢弃,因为回复的源地址与客户端发送原始请求的主机的源地址不匹配。也就是说,它看起来像是一个未经请求的响应。

4.1. UDP Source Address Selection (UDP源地址选择)

为避免这些问题,服务器在使用UDP响应查询时,必须使IP头中的源地址字段设置为包含导致响应的查询的数据包的IP头的目标地址字段中的地址来发送回复。如果这会导致从不允许用于此目的的IP地址发送响应,则可以从分配给服务器的任何合法IP地址发送响应。应选择该地址以最大化客户端能够将其用于进一步查询的可能性。以这样一种方式配置的服务器,即并非所有地址都可以从所有潜在客户端同等访问,在响应发送到任播、多播或类似地址的查询时需要特别小心。

4.2. Port Number Selection (端口号选择)

对所有查询的回复必须定向到发送它们的端口。当通过TCP接收查询时,这是传输协议的固有部分。对于通过UDP接收的查询,服务器必须记下源端口并将其用作响应中的目标端口。回复应始终从它们被定向到的端口发送。除非在特殊情况下,这将是为DNS查询分配的众所周知的端口[RFC1700]。