在实际的访问互联网资源的时候,我们会使用域名进行访问,比如www.baidu.com、www.defense.gov等等。但是,实际的数据传输的时候,我们知道是通过ip地址与端口建立连接的,那么怎么把域名翻译成ip地址,这里用到的协议就是DNS协议。解析域名时候,在Unix环境高级编程中,遇到过两个函数分别是gethostbyname和gethostbyaddr,第一个函数通过主机名字返回IP地址,第二个函数通过ip地址返回主机名。
这里我们首先看一下查询时候,查询问题的格式:
查询名是要查找的名字,它是一个或多个标识符的序列。每个标识符以首字节的计数值来说明随后标识符的字节长度,每个名字以最后字节为0结束,长度为0的标识符是根标识符。计数字节的值必须是0~63的数,因为标识符的最大长度仅为63,该字段无需以整32bit边界结束,即无需填充字节。一个域名存储的结构如下:
每次查询的时候,都有一个类型:对于查询类,通常设为1,指的是互联网地址。
响应问题的格式如下:
主要看下后面三个字段:
生存时间字段是客户程序保留该资源记录的秒数,资源记录通常的生存时间值为2天。
资源数据长度说明资源数据的数量。该数据的格式依赖于类型字段的值。对于类型1资源数据是4字节的IP地址。
/etc/resolv.conf在访问某个主机的时候,先到域名服务器获取主机的ip地址,然后再发起访问。
tcpdump -i eth0 -vnn port 53另外若只是查询域名,可以使用host命令获取域名,还有nslookup,还可以使用dig命令进行域名的查询,具体的使用可以使用man进行查看。