SOA记录
SOA资源记录是⼀个常常让⼤家困惑的问题,现在我来详细对它进⾏说明。
SOA(start of authority)记录定义了DNS授权区域的起始点。
下⾯先给出⼀个具体的例⼦:
@ IN SOA (
2003062201 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum TTL
例⼦第⼀⾏的“@”表⽰当前起始点。起始点的含义是,数据⽂件是为哪个区域创建的,该区域就是当前
的起始点。这样的话,这个数据⽂件中的所有记录都遵从这⾥的SOA规定,除⾮它们另有说明(⽐如ttl说明)。对于其他类型的记录,这⾥的@也可换成⼀个主机名如aa,但SOA记录只能⽤@。因为SOA记录中定义了区传送的时间参数,这必须对应于整个数据⽂件⽽不是某条记录。
第⼀⾏中的“IN SOA”说明这是⼀条SOA记录。
第⼀⾏中的“”表⽰该数据⽂件记录在哪⼀台主机中,如果这台主机是本区域的,那么必须在该区域⽂件中定义这台主机。注意这⾥的最后⼀个“.”是有意义的,假设这个数据⽂件是为""区域创建的话,那么,如果不写点,⽽写
成”",则相当于写成"",这⾥的内容可参考dns数据⽂件的语法规定。
第⼀⾏中的“”给出了负责维护域名服务器的管理员的邮件地址,它相当于“”,这⾥把“@”换成了“.”;
我们可以注意到,在第2⾄5⾏的数字外⾯还套了⼀对括号。其实是这样的,本来这⾥所有的数字都是应该写在同⼀⾏的,然⽽,为了看上去⽅便,我们将之分为5⾏。使⽤括号,可以将跨越多⾏的数据定义在⼀起,视为⼀个整⾏数据处理。
5⾏数据的前四⾏都是针对主辅服务器间的区传送⽽⾔的。
数据的第⼀⾏是序列号,进⾏区传送时,检查主服务器上的序列号有⽆变⼤(⽐较的⽅法是辅服务器利⽤上次从主服务器获得的数据和这次的进⾏⽐较),如果变⼤了,就进⾏传送,否则不传送。这个序列号可以是⼩数,如果是⼩数,也必须按⼀定的规则转变为整数进⾏⽐较。规则是这样的:⼩数点右边的乘以1000,然后直接把⼩数点右边的连接到前⾯乘法运算后的结果之后,如200.1相当于
2000001,100.01相当于10000001,这样200.1倒反⽽⽐100.01来得⼩了,所以这种⽅法很不直观,不推荐使⽤,但要看的懂,有时还是有⽤的,因为它可以缩短数字的长度。⼀种我们推荐的⽅法是使⽤如下形式:“年⽉⽇第⼏次”,如2003年6⽉22⽇第1次修改
⽤“2003062201”,第⼆次修改⽤2003062202,…。当序列号变得很⼤,需要重新变⼩时,为了能让区传送继续,⼀种⽅法是删除所有辅服务器上的对应区域⽂件并重启服务,这样来强制执⾏区传送。
数据的第⼆⾏是辅服务器检查主服务器是否同步的间隔时间。
数据的第三⾏是辅服务器在区传送失败后,等待再次进⾏区传送的时间间隔。
数据的第四⾏规定,如果不能保证辅服务器与主服务器同步,最长可以使⽤辅服务器数据的时间,时间到了之后,仍不能进⾏传送的话,辅服务器将丢弃对应的数据。
soa
数据的第五⾏是最⼩TTL(time-to-live)时间,这是针对缓存⽽⾔的,与区传送没有关系。 ⽣存期(TTL)为所容许的名字服务器对数据缓存的时间长度,⼀旦⽣存期到了,名字服务器必须丢弃缓存数据并从授权的名字服务器中重新获取新的数据。这样可以确保域数据在整个⽹络上的⼀致性。
缓存不仅保存成功查询信息,也保存失败查询信息。我们常有体验,在访问⼀个叫abcd.efg的站点时,如果查询失败,那么,在短时间内重新访问这个站点,会⽴刻返回这个主机不存在的信息,就是这个道理。在BIND8.2以前的版本中,两种缓存的⽣存期使⽤同⼀个值,⽽新版本中分别设定值。对于⽼版本,名字服务器的数据库⽂件的SOA最后⼀项就是TTL;⽽新版本(Bind8.2及以后版本)数据库⽂件的SOA最后⼀项是失败信息缓存的⽣存期,⽂件的第⼀⾏则多了个$TTL,为成功信息的缓存⽣存期。
最后⼀点说明,上⾯的时间在较⽼的版本都是以秒为单位,新版本中默认以秒为单位,也可根据需要⾃⼰指定单位,具体请查阅相关⽂档。但需注意,对于区传送的时间参数,如果设定为很短时间,⽐如两秒,则不⼀定能按照该时间进⾏,⼀般会⽐设定的长⼀点。
希望上⾯的内容能够对⼤家有所帮助。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论