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) (表示資料包大小)