当前位置 博文首页 > 积水成渊:DNS查询器的linux C实例程序

    积水成渊:DNS查询器的linux C实例程序

    作者:[db:作者] 时间:2021-07-29 09:41

    DNS( Domain Name System)域名系统提供了主机名和IP地址之间的转换。通常我们在应用程序中使用库函数 gethostbyname()gethostbyaddr()来完成两者之间的转换。但是为了更深入的学习网络底层知识,有必要从源代码级别来分析和实现

    RFC 1034说明了DNS的概念和功能, RFC 1035详细说明了DNS的规范和实现。通过阅读RFC,我们知道明白了,应用程序对DNS的访问是通过解析器来( resolver)完成的,解析器并不像TCP/IP协议那样是OS的内核,而是通过网络访问DNS服务器来得到名字和地址的对应关系。OS的TCP/IP协议簇对DNS一点都知道。

    工欲善其事必先利其器,先得进行些基础知识的复习: 《bit与byte的区别》和 《 bit与byte的联系》及《 位运算》,一个int是4个byte(十六进制中 01 02 03 04转化为十进制为 16909060),一个char是1个byte(十六进制中 97转化为字符为 a)。例如在十六进制中 0x80,用bit来表示就是 1000 0000,此时如果我们对它实施位( >>5)运算,得到的结果就是 0000 0100,十六进制值为 0x04

    在Linux的内核代码中,经常可以看见形如 #define do{ }while(0)的宏定义,是否感到疑惑呢?宏定义只是帮助我们进行替换而已,当定义多条语句时,会在if...else...语句中产生歧义,详细解释参考 链接。(小插曲,我在测试中只 #include <stdlib.h>,忘记了 #include <stdio.h>,然后在后面使用了 printf等,结果编译的时候产生警告:
    cs
    下一篇:没有了