詞彙表/你會看到的程序

mDNSResponder

又稱:Bonjour和DNS

簡短回答

mDNSResponder是把每個網域名稱轉換成位址的macOS程序。它是Mac的DNS解析器,同時也執行Bonjour,不需任何設定就能找到本地網路上的印表機、AirPlay揚聲器、共享的Mac和其他裝置。

任何App打開網站或連線到伺服器時,都會向mDNSResponder詢問位址。它會快取結果,所以重複查詢會立即完成。它以自己的系統帳號_mdnsresponder執行,而不是以你的身分。

它的負載取決於要查詢多少名稱。開了很多標籤頁的瀏覽器、VPN,或有許多Bonjour裝置的繁忙本地網路,都會讓它有更多事要做。

mDNSResponder為什麼在使用CPU

短暫飆升來自一連串的查詢:許多新的標籤頁、某個App與許多伺服器同步,或有裝置加入網路。持續的用量通常表示有東西在循環重試查詢、VPN或DNS過濾工具運作異常,或網路上的Bonjour廣播永不停歇。

當網站用名稱打不開、用位址卻可以,或某個網站換了伺服器而Mac仍連到舊的伺服器時,快取就是頭號嫌疑。

如何清除DNS快取

在較新的macOS上,只要在「終端機」中執行兩個指令,就能清除快取並讓mDNSResponder重新載入,不需要重新啟動。

  1. 打開「終端機」。
  2. 執行sudo dscacheutil -flushcache,並在系統詢問時輸入你的密碼。
  3. 執行sudo killall -HUP mDNSResponder。

如何查看mDNSResponder在做什麼

它以自己的系統帳號執行,所以在你要求顯示所有程序之前,活動監視器不會顯示它。「終端機」可以把它的兩項工作,也就是DNS和Bonjour,分開來看。

  1. 打開活動監視器,選擇「顯示方式」→「所有程序」,然後在搜尋欄位中輸入mdns。你會看到_mdnsresponder帳號底下的mDNSResponder,以及root底下的mDNSResponderHelper。
  2. 觀察「CPU」標籤頁中的「% CPU」和「網路」標籤頁中的封包欄位。短暫的高峰是正常的。如果你沒在上網,它卻一直維持穩定的負載,就值得看一看。
  3. 想查看Mac正在使用哪些DNS伺服器,就打開「終端機」並執行scutil --dns。resolver #1會在nameserver[0]、nameserver[1]等項目底下列出大多數查詢所用的伺服器。
  4. 想透過mDNSResponder本身測試一次查詢,就執行dns-sd -G v4v6 apple.com。每個位址一傳回就會顯示出來。按下Control-C即可停止。
  5. 想查看Bonjour在你的網路上找到了什麼,就執行dns-sd -B _services._dns-sd._udp local.。它會列出你周圍的裝置所廣播的服務類型,例如印表機的_airplay和_ipp。按下Control-C即可停止。

mDNSResponder的正常用量與異常情況

正常:接近零,在你打開很多標籤頁、加入網路,或網路上的某台裝置被喚醒時,會有短暫的高峰。

值得檢查:連續好幾個小時穩定使用CPU或網路,或某些名稱在一個網路上解析失敗,在另一個網路上卻正常。常見原因如下:

  • VPN或DNS過濾工具加入了自己的解析器,而且不斷更改。當VPN把某些名稱交給自己的伺服器解析時,scutil --dns會顯示帶有domain這一行的額外解析器。
  • 某個App或指令碼在密集的迴圈中查詢名稱,常見的是一直重試一台連不上的伺服器。
  • 忙碌的區域網路,例如辦公室或共用的大樓,有許多裝置透過Bonjour廣播自己。
  • 網路配發的DNS伺服器很慢或沒有回應,於是查詢只能等待並重試。

DNS和Bonjour:兩項工作

網際網路上的名稱(例如apple.com)會送到你的網路或你自己設定的DNS伺服器。以.local結尾的名稱(例如你Mac自己的網路名稱)則從不離開區域網路:mDNSResponder會直接詢問周圍的裝置,這就是多點傳送DNS,也是它名稱中那個m的由來。

所以scutil --dns會列出標記為mdns的local解析器。如果在家能用.local名稱連到印表機或共享的Mac,在公司卻不行,那是公司網路封鎖了這些區域廣播,而不是網際網路的問題。

大家常問的問題

Mac上的mDNSResponder是什麼?

它是為每個App把網域名稱解析成位址的macOS程序,也會執行Bonjour,用來找到你網路上的印表機、AirPlay揚聲器和其他裝置。

可以結束mDNSResponder嗎?

macOS會立刻再次啟動它,而在它消失的這段時間,任何東西都無法查詢網站。若要清除錯誤的結果,請清除DNS快取,而不是結束它。

mDNSResponder為什麼要接受傳入的連線?

Bonjour會監聽本地網路上其他裝置發出的自我宣告。macOS的防火牆預設允許它;如果你的防火牆詢問,允許它就能讓AirPlay、印表機探索和螢幕共享正常運作。

mDNSResponder安全嗎?

安全。它是macOS的一部分,由Apple簽署,位於/usr/sbin/mDNSResponder。它以自己受限的系統帳號執行,既不是以你的身分,也不是以root執行。

mDNSResponderHelper是什麼?

它是mDNSResponder的小搭檔,以root執行,負責處理受限帳號自己做不到的少數幾項工作。它是macOS的一部分,平常處於閒置狀態。

相關詞條

想找比活動監視器更好的工具?請參閱Mac上最好用的活動監視器替代方案,或瀏覽詞彙表中的所有詞條。