ch14: The Domain Name System

DNS

Intro

DNS提供主机名字和IP地址之间的转换。

对DNS的访问是通过一个地址解析器(resolver)来完成的。

两个函数:gethostbyname()gethostbyaddr()

resolver值应用层的一部分,而不是操作系统内核的一部分。

DNS使用TCP/IP协议,不过主要是UDP。

BIND:Berkeley Internet Name Domain server.

DNS Basics

DNS tree:

zone就是DNS tree的子树。

DNS Message Format

DNS消息的格式如下:

Identification由client设置,然后server返回,用来匹配请求和响应。

flag格式如下:

  • QR:请求是0,响应是1;

  • opcode:标准查询是0,还有反向查询1,和服务器状态请求2;

  • AA:授权回答(authoritative answer);

  • TC:可截断的,使用UDP时,最多只有512个字节,超了就会设置这个标志;

  • RD:期望递归(recursion desired):告诉名字服务器来递归查询;

  • RA:可用递归(recursion available),如果名字服务器支持递归查询,就在响应中设置这个标志;

  • rcode:返回码,没有差错是0,名字差错是3。

Question Portion of DNS query Message

问题的格式如下:

查询名就是域名,比如:

query type表示查询类型,常用的有下面几种:

Name

Numeric Value

Description

type?

query type?

A

1

IP地址

Y

Y

NS

2

名字服务器

Y

Y

CNAME

5

规范名称

Y

Y

PTR

12

指针记录

Y

Y

HINFO

13

主机信息

Y

Y

query class是1,表示Internet Address。

Resource Record Portion of DNS Response Message

资源记录RR的格式如下:

domain name的格式和上面的一样。

type和请求中的query type一样。

class也是1。

TTL的值是2天。

Resource data length标识了后面资源数据的长度。

UDP or TCP

  • 一般来说使用UDP;

  • 如果数据多可能发生截断的话,就使用TCP;

  • 当secondary向primary发起一个zone transfers的时候,就使用TCP。

Caching

缓存放在名字服务器中,而不是在resolver中。

Last updated