学习笔记 - DNS协议
DNS协议
概括
我们通常通过域名来访问服务器,但是对于网络层来说,其无法识别域名,所以需要将域名先转换成IP地址,
而DNS协议就是完成域名到IP地址的映射。
细节
DNS服务的步骤
- 本机向DNS服务器发起查询 [域名对应IP地址] 的请求。
- DNS服务器根据收到的域名查询是否存在该域名对应的记录,如果查询不到,可以向其他DNS服务器进行递归查询(每个DNS服务器上都维护这大量的域名到IP地址的映射记录)。
- DNS服务器将查询到的 [域名对应IP地址] (或者查询失败)结果返回给本机。
体验一下
-
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(其中第一个为首选,第二个为次选)
-
通过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 查 域名 (反向查询)
-
我们可以通过 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) (表示数据包大小)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通