DNS的层次组织
    image.png

    以点“.”结尾的域名称为绝对域名完全合格的域名FQDN(Full Qualified DomainName),例如sun.tuc.noao.edu.
    如果一个域名不以点结尾,则认为该域名是不完全的。

    DNS的报文格式
    DNS用于查询和响应的报文格式
    image.png

    标识:标识字段由客户程序设置并由服务器返回结果。客户程序通过它来确定响应与查询是否匹配。
    标志(flags):16 bit的标志字段被划分为若干子字段。

    DNS报文首部中的标志字段
    image.png

    image.png

    • QR 是1bit字段:0表示查询报文,1表示响应报文。
    • opcode 是一个4bit字段:通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求)。
    • AA 是1bit标志,表示“授权回答(authoritative answer)”。该名字服务器是授权于该域的。
    • TC 是1bit字段,表示“可截断的(truncated)”。使用UDP时,它表示当应答的总长度超过512字节时,只返回前512个字节。
    • RD 是1bit字段表示“期望递归(recursion desired)”

    该比特能在一个查询中设置,并在响应中返回。这个标志告诉名字服务器必须处理这个查询,也称为一个递归查询。
    如果该位为0,且被请求的名字服务器没有一个授权回答,它就返回一个能解答该查询的其他名字服务器列表,这称为迭代查询。

    • RA是1bit字段,表示“可用递归”。

    如果名字服务器支持递归查询,则在响应中将该比特设置为1。在后面的例子中可看到大多数名字服务器都提供递归查询,除了某些根服务器。

    • 随后的3bit字段必须为0。
    • rcode是一个4bit的返回码字段。通常的值为0(没有差错)和3(名字差错)

    名字差错只有从一个授权名字服务器上返回,它表示在查询中制定的域名不存在。

    • 对于查询报文,问题(question)数通常是1,而其他3项则均为0

    image.png

    • 对于应答报文,回答数至少是1,剩下的两项可以是0或非0。

    image.png

    查询报文
    DNS查询报文中问题部分的格式
    image.png
    image.png

    • 查询名是要查找的名字,它是一个或多个标识符的序列。
    • 每个问题有一个查询类型,而每个响应(也称一个资源记录)也有一个类型

    DNS问题和响应的类型值和查询类型值
    image.png

    响应报文
    DNS响应报文中的资源记录部分
    DNS报文中最后的三个字段,回答字段、授权字段和附加信息字段,均采用一种称为资源记录RR(Resource Record)的相同格式。

    DNS资源记录格式
    image.png
    image.png

    • Name:域名是记录中资源数据对应的名字。
    • Type: 域名是记录中资源数据对应的名字。
    • Time to live: 生存时间字段是客户程序保留该资源记录的秒数。
    • Data length:资源数据的数量,该数据的格式依赖于类型字段的值

    对于类型1(A记录)资源数据是4字节的IP地址