C实现DNS 学步园

2020-05-01 17:34 DNS loodns

  细致申明了DNS的规范和实现。通过阅读RFC,我们晓得大白了,使用法式对DNS的拜候是通过解析器来()完成的,解析器并不像TCP/IP和谈那样是OS的内核,而是通过收集拜候DNS办事器来获得名字和地址的对当关系。OS的TCP/IP和谈簇对DNS一点都晓得。

  工欲善其事必先利其器,先得进行些根本学问的复习:bit取byte的区别和 bit取byte的联系及位运算,一个int是4个byte(十六进制外01

  0000,此时若是我们对它实施位(5)运算,获得的成果就是0000 0100,十六进制值为0x04。

  正在Linux的内核代码外,经常能够看见形如#define do{ }while(0)的宏定义,能否感应迷惑呢?宏定义只是帮帮我们进行替代而未,当定义多条语句时,会正在if...else...语句外发生歧义,细致注释参考链接。(小插曲,我正在测试外只#include

  从首部起头,0~15位bit刚好是2个byte,由客户法式设放并由办事器前往,客户法式通过它来确定响当能否取查询婚配(例如,客户法式正在那里输入的是十六进制的0xD8B4,那么办事器的该字段也会填入不异的值。那个标识又称为Transaction

  查询名是要查觅的名字,它是一个或多个标识符的序列。每个标识符以首字节的计数值,来申明随后标识符的字节长度,每个名字以最初字节为0竣事,长度为0的标识符是根标识符。计数字节的值必需是0~63的数,由于标识符的最大长度仅为63。该字段无需以零32bit鸿沟竣事,即无需填充字节。那类编码格局很是象BT和谈外bencode编码,例如查询

  第一位为计数位,从首字母到第一个.号,一共是13位(twistedmatrix),然后是第二个计数位,值为3,由com计较获得,最初是竣事符号0。

  最常用的查询类型为A,暗示期望获得查询名对当的IP地址。最初的查询类,凡是是1,指互联网地址

  域名是记实外资本数据对当的名字。它的格局和前面引见的查询名字段格局不异。类型申明RR的类型码。它的值和前面引见的查询类型值是一样的。类凡是为1,指Internet数据。保存时间字段是客户法式保留该资本记实的秒数。资本记实凡是的保存时间值为2天。资本数据长度申明资本数据的数量。该数据的格局依赖于类型字段的值。对于类型1(A记实)资本数据是4字节的IP地址。

  就能够看见成果啦,那里利用的是UDP的数据格局,我们晓得UDP的头部无一个16bit的长度,那么能暗示的最大长度为2的16次方65536,再减去包头20,所以UDP包最大长度为65536-20=65516,可是正在现实使用外,最好不要跨越1K转载地址:

发表评论:

最近发表