DNS协议的axfr和ixfr解析
简介
axfr:DNS Zone Transfer Protocol (AXFR),dns的全量更新协议,dns主从架构更新,从向主获取zone的全量数据,由主返回axfr消息,全量刷新该zone的slave信息
ixfr:Incremental Zone Transfer in DNS,dns的增量更新协议,和axfr对应,axfr是一次性将一个zone的全量数据返回至Slave,而ixfr仅将增量更新数据返回
扩展内容
提到axfr和ixfr,不得不提到dns的另外一个概念,SOA记录中的序列号,SOA记录本文不作赘述,该序列号用于标识zone的版本信息,常规情况下,zone每发生一次变化,序列号加1,通过序列号标识版本,获取增量更新信息

如上,忽略tcp信令报文,
1,2位notify更新通告响应,表示zone发生变化,master通告slave
3,4为SOA查询响应,slave发起,请求master最新的序列号
10,12为ixfr更新请求和响应,slave发情,请求更新zone信息,axfr同理
axfr


如上两张图,图一为axfr query,图二为axfr response,query很好理解,对于response,axfr结果放在answers section内,开头和结尾的SOA记录表示左括号和右括号,当中的内容表示这个zone的所有记录
ixfr


如上,为一个最基本的ixfr请求与响应,与axfr不同的是,ixfr除query type与axfr不同,还会额外在第三section也就是表示权威服务器(NS服务器)区域携带一条slave当前的SOA记录,由master根据slave的序列号(上图红框),判别增量更新信息,并返回给slave
对于应答,上图包含4个SOA,同样在answer section内,开始和结尾的soa含义仍旧和axfr保持一致,代表括号,第二个SOA为老的序列号,后面跟的是需要删除掉的RRs,第三个SOA为较新的序列号,表示需要增加的RRs,下面截取rfc1995中的部分内容,多个版本更新可以顺次将更新串起来,也可以直接经过运算,得到最终增量结果。

上面说了ixfr正常情况的返回结果,那么还存在以下几种情况
1. ixfr获取增量失败,增量信息不完整或已丢失,直接返回全量结果,answer section同axfr (SOA、records…..、SOA)
2. ixfr请求序列号和最新序列号一致,answer区域仅返回一条SOA记录
3. ixfr请求序列号小于最新序列号,但无更新RR,直接返回两条SOA(SOA、SOA)
4. ixfr请求序列号大于master最新序列号,异常,返回axfr
文档
-
rfc1995 IXFR https://www.rfc-editor.org/rfc/rfc1995.txt
-
rfc1995bis IXFR https://tools.ietf.org/id/draft-ah-dnsext-rfc1995bis-ixfr-02.html
-
rfc5936 AXFR https://www.rfc-editor.org/rfc/rfc5936.txt