zoukankan      html  css  js  c++  java
  • DNS报文格式(RFC1035)

    2、资源记录定义(RR definitions)
        2.1 格式
             后面分析报文的时候详细解释。
        2.2 类型值(TYPE values)
             类型主要用在资源记录中,注意下面的值是QTYPE的一个子集。
            类型           值和含义
             A               1 a host address
             NS              2 an authoritative name server
             ====
             TXT             16 text strings
        2.3 查询类型(QTYPE values)
             查询类型出现在问题字段中,查询类型是类型的一个超集,所有的类型都是可用的查询类型,其他查询类型如下:
             AXFR            252 A request for a transfer of an entire zone
             MAILB           253 A request for mailbox-related records (MB, MG or MR)
             MAILA           254 A request for mail agent RRs (Obsolete - see MX)
             *               255 A request for all records
      ====

    二、报文

    1、报文格式(Format)
        dns请求和应答都是用相同的报文格式,分成5个段(有的报文段在不同的情况下可能为空),如下:
        +---------------------+
        |        Header       | 报文头
        +---------------------+
        |       Question      | 查询的问题
        +---------------------+
        |        Answer       | 应答
        +---------------------+
        |      Authority      | 授权应答
        +---------------------+
        |      Additional     | 附加信息
        +---------------------+
        Header段是必须存在的,它定义了报文是请求还是应答,也定义了其他段是否需要存在,以及是标准查询还是其他。
        Question段描述了查询的问题,包括查询类型(QTYPE),查询类(QCLASS),以及查询的域名(QNAME)。剩下的3个段包含相同的格式:一系列可能为空的资源记录(RRs)。Answer段包含回答问题的RRs;授权段包含授权域名服务器的RRs;附加段包含和请求相关的,但是不是必须回答的RRs。
        1.1 Header的格式
            报文头包含如下字段:
                                        1 1 1 1 1 1
          0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
        +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
        |                      ID                       |
        +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
        |QR|   Opcode |AA|TC|RD|RA|   Z    |   RCODE   |
        +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
        |                    QDCOUNT                    |
        +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
        |                    ANCOUNT                    |
        +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
        |                    NSCOUNT                    |
        +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
        |                    ARCOUNT                    |
        +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
            各字段分别解释如下:
            ID      请求客户端设置的16位标示,服务器给出应答的时候会带相同的标示字段回来,这样请求客户端就可以区分不同的请求应答了。
            QR      1个比特位用来区分是请求(0)还是应答(1)。
            OPCODE 4个比特位用来设置查询的种类,应答的时候会带相同值,可用的值如下:
                    0               标准查询 (QUERY)
                    1               反向查询 (IQUERY)
                    2               服务器状态查询 (STATUS)
                    3-15            保留值,暂时未使用
            AA      授权应答(Authoritative Answer) - 这个比特位在应答的时候才有意义,指出给出应答的服务器是查询域名的授权解析服务器。
                    注意因为别名的存在,应答可能存在多个主域名,这个AA位对应请求名,或者应答中的第一个主域名。
      =====
        1.2 Question的格式
            在大多数查询中,Question段包含着问题(question),比如,指定问什么。这个段包含QDCOUNT(usually 1)个问题,每个问题为下面的格式:
                                        1 1 1 1 1 1
          0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
        +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
        |                                               |
        /                     QNAME                     /
        /                                               /
        +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
        |                     QTYPE                     |
        +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
        |                     QCLASS                    |
        +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
            字段含义如下
            QNAME   域名被编码为一些labels序列,每个labels包含一个字节表示后续字符串长度,以及这个字符串,以0长度和空字符串来表示域名结束。注意这个字段可能为奇数字节,不需要进行边界填充对齐。
            QTYPE   2个字节表示查询类型,.取值可以为任何可用的类型值,以及通配码来表示所有的资源记录。
            QCLASS 2个字节表示查询的协议类,比如,IN代表Internet。

    摘自:http://blog.csdn.net/tigerjibo/article/details/6827736

  • 相关阅读:
    AngularJS指令的详解
    Linux(Ubuntu)下如何安装JDK
    Hibernate的三种状态
    JS是按值传递还是按引用传递
    git分支管理
    Hibernate注解映射联合主键的三种主要方式
    Linux下解决用户不能执行sudo的方法
    【GStreamer开发】GStreamer基础教程03——动态pipeline
    【GStreamer开发】GStreamer基础教程02——GStreamer概念
    【GStreamer开发】GStreamer基础教程02——GStreamer概念
  • 原文地址:https://www.cnblogs.com/bonelee/p/7093709.html
Copyright © 2011-2022 走看看