PING是數據中心里進行網絡診斷的重要工具,哪個網絡工程師在日常工作中都離不開PING。PING發送一個ICMP回聲請求消息給目的地并報告是否收到所預期的ICMP回聲應答,如果在設定的時間內,沒有收到回應報文,則認為網絡是不通的,顯示為Timeout,如果受到了回應報文,則打印出從發出請求報文到收到回應報文所花費的時間,這個時間就是網絡延遲。在一個數據中心內部,網絡延遲自然越低越好,這說明單位時間內,業務流量轉發的速度越快,網絡性能越高,反之網絡性能越低。所以PING是一個很好的檢測網絡延遲的工具,很多數據中心也用PING延遲的指標來判斷網絡運行是否高效。實際上,如果簡單地用PING的結果來判斷網絡延遲,是不夠準確的,甚至還會誤導。本文就來說一說PING延遲的那些事兒。
PING工具在數據中心所有設備中基本都有安裝,包括服務器、網絡、存儲和安全等設備,在這些設備上直接輸入PING,然后帶上一些必要參數,就可以進行PING操作,結果可以很快得到回應。PING延遲是通過發送ICMP echo request包,收到ICMP echo reply包之后,計算發送時間與接收時間之間的差值而得出的。PING缺省每秒發一個echo request,發包的時候不會輸出任何信息,直至收到回應報文的時候才輸出一條信息:
從輸出的信息中可以清楚地看到每個回應報文的花費時間,這個就是PING延遲。除了延遲信息,還有多包總體統計,TTL等信息。很多時候數據中心網絡運維的人員就拿這個數據進行對比,看網絡延遲是否符合要求,如果過大就要人工介入進行排查。在一般情況下,延遲分為四類:
實際上,用PING測出來的網絡延遲是不夠準確的,甚至與實際網絡延遲相差甚遠,為什么呢?首先,PING本身是一個應用層的小工具,PING時與設備CPU繁忙程度有關,很多高優先級的任務都可以搶占PING的資源,PING收發報文的過程在設備本身處理上也要耗費一定時間,這些時間當然也要記錄在延遲中。如果設備收發比較多的報文,PING報文也會受到影響,在很多設備上PING報文優先級都比較低,設備CPU自然優先處理更為重要的業務報文,這樣在有多種報文同時進入設備時,PING報文就會被擠到后面,增大了報文回應的時間,這部分時間也要算到網絡延遲中,這時會看到PING報文延遲時間是有些波動的。其次,很多網絡設備,尤其是交換機設備,交換機是一次學習多次轉發的網絡設備。CPU處理的報文和轉發報文并不在一起處理,CPU一旦學習完成,就將轉發表項下發到硬件中,這樣大部分業務流量由硬件完成轉發,而CPU只處理發向自己的報文以及一些網絡協議報文。交換機的CPU能力都比較弱,如果對交換機進行PING測試會發現,經過交換機轉發的流量延遲非常小,而目的地址是交換機的PING延遲就不夠穩定,并且延遲要大得多,這是因為CPU要耗費比較多的處理報文時間,所以這時用PING來判斷網絡延遲并不準確,此時網絡延遲也許上百毫秒,但是業務流量依然會表現得非常穩定,這時的PING延遲時間并不能反映網絡性能的真實情況。而對于很多路由器、防火墻等設備,所有的業務報文都是CPU處理,這時如果不對PING報文做優先處理,延遲效果也不會太好。所以在用PING進行延遲測試時,要將這些因素排除在外。第三,PING報文都叫ICMP包,ICMP報文也有好多種類型,PING希望收到的是ICMP_ECHOREPLY,但是其他類型的包也都會傳遞給PING,如果網絡中ICMP類型報文很多,PING需要消耗額外的時間和資源去查看這些本來不相干的包,也會產生延遲。最后,服務器網卡驅動、防火墻軟件、網絡設備鏈路質量等等都會影響PING延遲,這些各種各樣因素疊加在一起的時間都要算到PING測的網絡延遲時間中,可見這種PING測試網絡延遲是不準確的,只能從大面上判斷網絡性能的好與差,有時這種判斷還是錯誤的。
經過以上介紹,PING雖然是延遲測試常用工具,但不夠準確。實際上,對數據中心網絡進行延遲測試時,都是用專業的測試儀進行測量,在數據中心網絡的兩個端點接入測試儀,用測試儀打入流量,查看延遲時間,這類延遲測試是非常準確的。在運營商集采測試中,延遲時間已經成為一個必測項,用測試儀測量設備的延遲。為消除各種影響因素,采用專業測試儀測得的結果最接近網絡真實水平。測試儀是非常昂貴的設備,很多數據中心不具備購入測試儀的條件,這樣只能采用PING的方式。為消除設備自身的影響,可以PING一下127.0.0.1或者PING本機的IP地址,這樣不用通過網絡,甚至不用進入網卡驅動程度,這時耗費的時間就是設備自身耗費的時間,從PING延遲時間中將這部分時間去掉。還有,可以多選一些IP地址,多使用一些設備進行PING,然后輸出PING延遲時間的表格,進行統計分析,綜合得出數據中心網絡各個部分的延遲時間,這樣PING延遲才能更接近實際網絡的延遲時間。