学习笔记 - DNS协议

DNS协议

概括

我们通常通过域名来访问服务器,但是对于网络层来说,其无法识别域名,所以需要将域名先转换成IP地址,

而DNS协议就是完成域名到IP地址的映射。

细节

DNS服务的步骤

  1. 本机向DNS服务器发起查询 [域名对应IP地址] 的请求。
  2. DNS服务器根据收到的域名查询是否存在该域名对应的记录,如果查询不到,可以向其他DNS服务器进行递归查询(每个DNS服务器上都维护这大量的域名到IP地址的映射记录)。
  3. DNS服务器将查询到的 [域名对应IP地址] (或者查询失败)结果返回给本机。

体验一下

  1. DNS服务器的地址存放在 /etc/resolv.conf 中。

    [root@localhost ~]# cat /etc/resolv.conf 
    # Generated by NetworkManager
    nameserver 202.116.32.254
    nameserver 222.200.129.134
    

    可以看到系统中默认了两个DNS服务器 nameserver(其中第一个为首选,第二个为次选)

  2. 通过host命令查询一下域名 www.baidu.com 对应的IP地址(没有host命令可以先安装 bind-utils 包,centos下通过 yum install -y bind-utils 安装)。

    [root@localhost ~]# host -t A www.baidu.com
    www.baidu.com is an alias for www.a.shifen.com.
    www.a.shifen.com has address 183.2.172.185
    www.a.shifen.com has address 183.2.172.42
    

    其中 -t 表示查询类型,A 表示该查询是由 域名 查 IP地址。

    其他查询类型包括 :

    CNAME 由 域名 查 该域名的别名

    PTR 由 IP 查 域名 (反向查询)

  3. 我们可以通过 tcpdump 来抓包,看看具体的通信过程。

    3.1. 另开一个终端,开始 tcpdump 监听抓包。

    tcpdump -i ens33 -nt -s 500 port 53
    

    -i ens33 表示监听的网卡

    -s 500 表示抓取数据包的大小

    port 53 筛选端口(DNS服务的端口为53)

    3.2. 再次执行步骤2中DNS查询。

    3.3. 查看tcpdump的抓包结果。

    [root@localhost ~]# tcpdump -i ens33 -nt -s 500 port 53
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on ens33, link-type EN10MB (Ethernet), capture size 500 bytes
    
    IP 10.255.79.186.43686 > 202.116.32.254.domain: 32449+ A? www.baidu.com. (31)
    
    IP 202.116.32.254.domain > 10.255.79.186.43686: 32449 3/0/0 CNAME www.a.shifen.com., A 183.2.172.42, A 183.2.172.185 (90)
    

    可以看到抓到的两个数据包,第一个是查询数据包。

    含义解释:

    IP(使用的网络层协议)

    10.255.79.186(本机IP)

    43686(本机端口)

    ->

    202.116.32.254(DNS服务器IP)

    domain(DNS服务器监听的端口,domain表示域名服务对应的端口,可以通过 cat /etc/services | grep domain查看)

    32449(表示这个数据包是一个DNS协议的数据包)

    +(表示递归查询)

    A?(查询类型)

    (31) (表示数据包大小)

posted @   淋雨一直走49  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示