學習筆記 - DNS協議

淋雨一直走49發表於2024-09-02

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

相關文章