1、DNS是一个分布式数据库系统用来提供主机名和IP地址之间的映射,之所以称为分布式原因的原因是因特网上没有一台主机知道这类映射的全部信息,当然也不可能做到,因为数据量实在太大了

2、应用程序通过一个叫resolver的程序(也可以认为是DNS的客户端)调用DNS服务,通常在UNIX系统下由gethostbyname(由主机名得到IP地址)和gethostbyaddr(由IP地址得到主机名)这两个库函数实现

3、不是每个name server都知道如何和其他所有的name sever通信的,但它们都必须知道如何和root name server通信。例如当它们不知道请求的主机名www.baidu.com的IP地址时,首先需要和root name server进行通信,取得顶级域名服务器com的IP地址,然后进一步和它进行通信,由此不断地递归查找,知道找到目标主机名的IP地址为止

4、DNS报文格式如上图所示,其中identification字段用来唯一标识一个报文。flags字段是该报文的标志位,其中几个重要的字段为:1)QA:当QA为0时为询问报文,QA=1时为响应报文,2)AA字段的意思为“autoritative answer”,即返回的IP地址的确是在该服务器的域名管理范围内的,而不是从其他途径获得的,3)RD,“recursion desired”,如果该字段没被置位,并且被访问的域名服务器没有authoritative answer,那么该服务器就会返回一串其他其他域名服务器的信息用于域名解析,4)RA,"recursion available",置位,表示服务器支持递归查询,通常除了根域名服务器以外的服务器都支持。最后numbers of questions代表问题的数量,问题的具体内容在扩展的questions字段,对于answers等其他三个字段的意义也是类似的

5、DNS报文中的questions字段的格式如上图所示,其中query name为询问的主机名。重点需要关注的是question type字段,因为询问得到的回答就是和它相对应的。它分为好几种类型,最常见的为 1)A,表示询问query name对应的IP地址。2)PTR,表示询问IP地址对应的主机名,最后的query class字段一般设为1,表示IP地址

6、至于最后的answers,authority,additional information字段的格式是一样的,如上图所示,其中domain name为要查找的域名,type与之前的question type相对应,time-to-live字段表示的是该信息能在客户端缓存中保存的时间,一般为2天。最后的两个字段分别表示结果的长度和具体内容。例如对于A类型的查找,那么长度字段就为4,数据就是查询的域名对应的IP地址

7、Caching:为了减少重复的DNS查询带来的网络带宽的消耗,通常会将第一次查询得到的结果放在name server的缓存中,而不是resolver中,因为resolver是与具体应用绑定的。

8、TCP or UDP:通常DNS的询问和应答都是通过UDP传输的,但是UDP的数据报长度往往小于512个字节,当应答报文的长度大于512时,报文就会被截断。此时就需要改用TCP进行传输,因为TCP可以用报文段进行分次传输的,并没有对数据有长度上的限制

《TCP/IP详解 卷一》读书笔记-----DNS的更多相关文章

  1. 《TCP/IP详解》读书笔记

    本书以UNIX为背景,紧贴实际介绍了数据链层.网络层.运输层   一.整体概念   1.各层协议的关系,只讨论四层 各层常见的协议:   网络层协议:IP协议.ICMP协议.ARP协议.RARP协议. ...

  2. TCP/IP详解 卷一学习笔记(转载)

    https://blog.csdn.net/cpcpcp123/article/details/51259498

  3. 『TCP/IP详解——卷一:协议』读书笔记——10

    2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...

  4. 『TCP/IP详解——卷一:协议』读书笔记——01

    从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...

  5. 【TCP/IP详解 卷一:协议】第二章:链路层

    2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...

  6. 《TCP/IP详解卷一:协议》 概述

    分层           TCP/IP协议族是一组不同层次上的多个协议的组合.TCP/IP通常被认为是一个四层次协议系统.   链路层(数据链路层或网络接口层):通常包括操作系统中的设备驱动程序和计算 ...

  7. 『TCP/IP详解——卷一:协议』读书笔记——02

    2013-08-16 20:07:11 1.3 TCP/IP的分层 这是一个很好的图,要多看!!图上有些细节会在今后的笔记中提到,看不懂不必深究. IP是网络层上的主要协议,同时被TCP和UDP(这两 ...

  8. 『TCP/IP详解——卷一:协议』读书笔记——11

    2013-08-23 20:00:18 第4章 ARP:地址解析协议 4.1 引言 ARP(Address Resolution Protocol,地址解析协议)是获取物理地址的一个TCP/IP协议. ...

  9. 『TCP/IP详解——卷一:协议』读书笔记——18

    2013-08-27 15:44:52 第7章 Ping程序 7.1 引言 “ping”这个名字来源于声纳定为操作.Ping程序由Mike Muuss编写,目的是为了测试另一台主机是否可达.该程序发送 ...

  10. 『TCP/IP详解——卷一:协议』读书笔记——14

    2013-08-25 11:32:06 第5章 RARP:逆地址解析协议 5.1 引言 具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址.但是无盘机,如X终端或无盘工作站,则需要采用其 ...

随机推荐

  1. scons学习

    http://blog.csdn.net/andyelvis/article/category/948141 http://www.scons.org/doc/production/HTML/scon ...

  2. jquery fadeOut 异步

    1. 概述 jquery实现动画效果的函数使用起来很方便,不过动画执行是异步的, 所以要把自定义的操作放在回调函数里. 2. example <html> <body> < ...

  3. python学习笔记2(pycharm、数据类型)

    Pycharm 的使用 IDE(Integrated  Development  Environ ment) :集成开发环境 Vim  :经典的linux下的文本编辑器(菜鸟和大神喜欢使用) Emac ...

  4. sphinx使用随笔

    为什么需要进行全文搜索呢? 一个表中有a.b.c多个字段.我们使用sql进行like搜索的时候,往往只能匹配某个字段.或者是这样的形式:a LIKE “%关键词%”or b LIKE “关键词” 这样 ...

  5. JSON-RPC轻量级远程调用协议介绍及使用

    这个项目能够帮助开发人员利用Java编程语言轻松实现JSON-RPC远程调用.jsonrpc4j使用Jackson类库实现Java对象与JSON对象之间的相互转换.jsonrpc4j包含一个JSON- ...

  6. AutoCAD .NET二次开发(四)

    在CAD中,属性信息一般是以注记的形式存在,但当属性数据内容较多时,显示就成了问题.扩展属性(Xdata)可以解决这一问题,比如南方Cass中就利用了这一点.我们经常用Lisp来读取操作扩展属性. 查 ...

  7. Microsoft Dynamics CRM 2013 安装过程 图解

    在安装前,先持一下SQL配置管理,将相关的服务打开.(由于在虚拟机里,许多服务需要时才会打开,像Reporting Services需要处理报表时才打开) 注:Analysis Services 登录 ...

  8. Oracle Spatial中SDO_Geometry详细说明[转]

    在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等 ...

  9. How to upgrade workflow assembly in MOSS 2007

    This problem generally start when you are having an existing custom workflow and there are instances ...

  10. java多线程系列8-线程的优先级

    在java中设置线程优先级使用setPriority,在jdk中的源代码如下: public final void setPriority(int newPriority) { ThreadGroup ...