Sophie

Sophie

distrib > Fedora > 18 > x86_64 > media > updates > by-pkgid > f2e0f8bb38ff852c649dac708674c2cd > files > 19

nsd-3.2.15-2.fc18.x86_64.rpm

NSD 1.4-2.0 DATABASE FORMAT
NSD 3.0 DATABASE FORMAT (adds crc at end).

As of NSD release 1.4 the database is extensively redesigned.  The main goal
for the redesign was to accomodate DNSSEC.

The idea of the database is that it stores RRsets in stead of complete answers.
Also the name compression is done run time. NSD 1.2 did all compression
at zone compile time.

This has the following tradeoffs:
        - the database is smaller (less duplication of material)
        - the answer generation is slower (~ 15 %)

Is was already suspected that DNSSEC would make NSD slower, that it will be only
about 15 % is a big plus. That the database doesn't blow up in your face is also
a big plus.

The database is constructed as follows.

        MAGIC

        ZONE_COUNT [*]
                dname of zone
                dname of zone
                ...

        DNAME_COUNT [**]
                dname
                dname
                ...

        DNAME (index to [**]) ZONE (index to [*]) TYPE CLASS TTL
                        #rr in rrset
                        foreach rr
                                #rdata
                                rdata_1
                                rdata_2
                                ...
                                rdata_N
        NULL TERMINATED
	CRC (32 bits crc sum over all previous bytes)
        MAGIC

Dname's that can be compressed at compile time are compressed. Those are stored
as an index into DNAME_COUNT.

The rdata is stored as a uint16_t, where the first byte indicated the length
of the data. The data itself is stored in wireformat.