誰的鍋?一個 ping 案例
昨天一個同事向我反饋了一個問題,雖然最後分析出和我們服務沒關係,但我覺得特別有意義,特此分享給大家。當時反饋電信使用者連線我們的 pop 服務有異常,聽到問題後,在我的阿里雲 ECS 上ping了下,正好發現連線到電信 vip,如下圖:
奇怪的是第一幀到第二幀之間特別慢(大概有15秒),但是 ping 命令整體顯示的連線速度卻很快,平均每一個ping的響應只有15ms,開始猜測是不是 ping 工具的內部工作機制導致的,ping 了下其他網站卻非常快,不管三七二十一,先使用 tcpdump 抓個包,打算排除到 vip 的網路問題:
$ tcpdump -s 0-i eth1 host 49.7.36.125 -w 11-17-ping1.pcap
關鍵輸出如下:
可見每一對icmp包(ping背後就是icmp協議)的請求和響應非常快,基本排除了網路問題,但第2個包後15秒後才有第三個包,這讓人感覺非常奇怪。
為了進一步尋找靈感,我運行了一個 strace 命令,如下:
$ strace -e trace=network -o 11-17-1.log -Tt ping pop3.sina.net -c 2
其中輸出截圖:
進一步驗證每一對的icmp包請求響應是非常快的。但發現了一些奇怪的輸出,如下圖:
雖然輸出很多,但可以看出主要是 DNS 解析花了很長時間,其中 10.202.72.118 和 10.202.72.116 是阿里雲的 local DNS,也就是說 ping pop3.sina.net 的時候,需要通過 local DNS 解析出它的 ip 地址 49.7.36.125。
為了進一步驗證是 DNS 解析的問題,我又運行了下列命令:
$ strace -e trace=network -o 11-17-2.log-Tt ping 49.7.36.125 -c 2
輸出非常快速,而且輸出的內容也非常少(去除了很多 DNS 網路呼叫),從而進一步確認了 DNS 解析的問題,那是阿里雲 local DNS 的問題還是我們公司 DNS 域名伺服器的問題?我又測試了下:
$ strace -e trace=network -o 11-17-3.log -Tt ping www.baidu.com -c 2
執行非常快速,說明是公司 DNS 域名伺服器的問題?還是 ping 內部工作機制的問題?我又單獨運行了兩個命令,主要抓取 DNS 解析:
$ tcpdump -s 0-i eth0port 53 -w 11-17-dns2.pcap#抓 ping pop3.sina.net 包 $ tcpdump -s 0-i eth0port 53 -w 11-17-dns3.pcap#抓 dig -t a pop3.sina.net 包
第二條命令輸出很簡單,如下圖:
說明 dig 解析 pop3.sina.net 非常快。
第一條命令輸出很複雜,ping 內部在進行域名解析的時候遇到了很多問題。最後我將local dns 改為了 8.8.8.8,不管是ping還是dig,速度都非常快。
到底是誰的鍋呢?阿里雲local dns?公司 dns 伺服器?ping 內部dns解析機制?可以一起討論討論。
我的新書 ofollow,noindex">《深入淺出HTTPS:從原理到實戰》 ,本書github地址是 https://github.com/ywdblog/httpsbook,大家可以一起討論本書。本書豆瓣地址 https://book.douban.com/subject/30250772/(或點選文末“閱讀原文”),如果你讀了本書,還請在豆瓣寫個評論。或者關注我的公眾號(ID:yudadanwx,虞大膽的嘰嘰喳喳),會分享我的原創文章。