加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Java构建TCP/IP协议:DNS,域名理会协议体系的运行流程

发布时间:2019-06-12 22:16:48 所属栏目:教程 来源:陈屹
导读:DNS协议的运转必要客户端和处事器举办交互。因为处事器端必要存储大量的域名信息,同时天天必要应答海量的理会哀求,因此它的计划必需遵安漫衍式体系。客户端向一台处事器哀求理会处事时,对方也许没有响应的域名信息,于是它会向上一层查询,得到拥有给定
副问题[/!--empirenews.page--]

DNS协议的运转必要客户端和处事器举办交互。因为处事器端必要存储大量的域名信息,同时天天必要应答海量的理会哀求,因此它的计划必需遵安漫衍式体系。客户端向一台处事器哀求理会处事时,对方也许没有响应的域名信息,于是它会向上一层查询,得到拥有给定域名信息的处事器,然后把对应处事器的信息偿还给客户端,然后客户端再从头提倡哀求。

我们还必要存眷域名信息如安在处事器上存储。在域名处事器上,信息存储有两种方法,一种是域名信息以二进制名目存储,这种名目对应的名称叫Resource Record Filed Format,同时为了利便打点员打点,这些信息又通过文本情势揭示出来,对应的名目称为Master File Representation,打点员通过修改后者就能使得对应的二进制信息举办响应调动:

Java构建TCP/IP协议:DNS,域名理会协议体系的运行流程

Resource Record 是一种特定命据布局,专门用于存储域名理会相干信息,譬喻域名对应的处事器IP,域名理会处事器地点等,在后头我们理会数据包时再深入切磋。

域名理会着实有三种情势,第一种是我们认识的,将域名发给处事器然后得到域名对应IP;第二种叫反向理会,将IP发给处事器然后得到对应域名;第三种叫电子邮件理会,将邮件地点发给处事器然后得到邮件的吸取工具IP。我们将首要存眷第一种情势的道理和实现。

当我们执行第一种域名理会时,起主要做的是得到域名处事器地点。这个进程并非一撮而就,有也许我们查询第一个处事器时,它给我们返回另一个处事器的地点,然后我们继承查询;第二步是确定处事器后,我们要理会它返返来的数据内容。在这个进程中,第二步相对轻易,而第一步则较量棘手。

在查询对应域名处事器时有两种方法,一种是轮回式,第一个域名没有对应信息,但返回另一个它以为有对应信息的处事器,接着客户端向第二个处事器哀求,第二个处事器又返回另一个处事器信息,该进程依次轮回直到找到对应处事器为止:

Java构建TCP/IP协议:DNS,域名理会协议体系的运行流程

第二种叫递归式,它与一种的区别在于,处事器包袱起客户端查找对应处事器的职责,处事器会重复向其他处事器查询,直到拿到对应域名信息后,直接返回给客户端:

Java构建TCP/IP协议:DNS,域名理会协议体系的运行流程

接下来我们看看DNS数据包的根基名目,起首第一部门叫头部,用于描写动静范例,以及后续数据布局的相干信息;第二部门叫”题目“,它用来包括客户端想向处事器查询的信息;第三部门叫”谜底“,是处事器用于回覆客户端查询;第四部门叫Authority,假如哀求没有获得所有复原,这部门内容汇报客户端向哪个处事器举办查询;第五部门叫Additional,这部门包括客户端查询信息的附加声名,它并非必需,以是数据包的根基布局如下:

Java构建TCP/IP协议:DNS,域名理会协议体系的运行流程

我们用wireshark抓取dns有关的动静包后,比较上面描写的条目举办理会。启动wireshark,然后行使要害词dns过滤,然后在赏识器里输入一个你早年没有会见过的网址,假如输入已经会见过的,赏识器会有缓存,因此不会走dns协议。以下是我抓取到的一个DNS理会哀求包:

Java构建TCP/IP协议:DNS,域名理会协议体系的运行流程

起首是头部,它包括12字节,从Transaction ID 到 Additional RRs,每个字段2字节。ID用来符号一次会话,一个会话内的数据包拥有沟通ID。Flags分为两部门,第一部门一字节叫做QR,用来暗示该数据包是查询照旧答复,假如是查询就配置为0,假如是答复就配置为1.假如是查询,那么第二个字节就是OpCode,进一步表白详细查询,它分为多少部门,前四个比特位用于表白查询范例,0暗示查询域名对应IP,1不再行使;2暗示查询域名处事器状态;3今朝不行使,4用于处事器之间的交互;5也是用于处事器之间的交互。

第五个比特位叫AA,它只在回覆包中配置,用于表白回覆的势力巨子性,它的详细内容我们暂且忽略。第六个比特位叫TC,它用于表白数据是否被截断,用于DNS支持UDP和TCP,但行使UDP时数据包不能高出512字节,假如高出数据包就得截断成多个小数据包,假如该位配置成1,它表白两边必要通过TCP来成立毗连。第8位叫RD,假如配置成1,它意味着客户端哀求递归式查询,也就是让处事器资助向其他处事器扣问,获得最终动静后再返还给客户端。

接下来字节的比特位是RA,假如配置为1暗示处事器支持递归式查询,也就是处事器把全部累活都包袱了,0则是不支持。接下来三个比特位必需配置为0,接着4个比特位暗示返回码,假如值为0暗示返回数据正常,非0暗示呈现错误,个中取值1暗示查询数据包名目错误;2暗示处事器自身妨碍;3暗示理会错误;4暗示不支持所要求的查询;5暗示拒绝查询哀求;其他值我们暂且忽略。

接下来用于暗示响应条目标数目,Questions暗示有几个查询条目,Answer RRs暗示有几个回覆条目,Authority RRs暗示有几个势力巨子信息条目,所谓“势力巨子”是指真正可以或许理会域名的处事器,假如当前处事器不能理会域名哀求,它必要把哀求转发给其他处事器时,它本身就不是Authoritive,我们家用路由器着实包袱域名理会处事器的职责,可是它自己不行能包括所必要的域名信息,它会把哀求转发给上一层处事器,因此路由器就不是”势力巨子“域名理会处事器。由此一个DNS域名理会数据包的外观如下:

Java构建TCP/IP协议:DNS,域名理会协议体系的运行流程

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读