linux網絡延遲命令,2. Linux使用ping命令查看網絡延遲

ping命令持續發送少量互聯網流量到遠程地址并報告收到回應的總時間。如果流量因為網絡故障或者錯誤配置而被丟棄,它也會報告。ping命令是最基本和初級的診斷網絡問題的工具之一。

ping常被用來測試網絡延遲,但是有時ping的延遲并不是網絡引起的,所以為了正確理解ping的結果,有必要了解影響ping延遲的幾個因素。

ping的原理是通過發送ICMP echo request包,在收到ICMP echo reply包之后,計算發送時間與接收時間之間的差值,得出延遲的時間。ping的輸出舉例如下:

dde2598463a7

ping缺省每秒發一個echo request,發包的時候不會輸出任何信息,直至收到echo reply的時候才輸出一條信息,格式如上,最后一列是延遲時間,ms表示毫秒。

影響ping延遲的因素主要有:

ping延遲包含了進程調度的延遲

由于ping本身是用戶態的程序,它首先會受到進程調度的影響,比方說高優先級的進程與ping爭搶CPU的話,ping的執行就會遭到拖延,這個調度延遲如果是發生在發包之后、收包之前,就會被計入ping的延遲之中。

多個同時運行的ping進程之間會互相干擾,導致延遲

ping通過raw socket發送和接收ICMP包,而raw socket不僅會收到給自己的包,也會收到給別人的包,假如有多個ping進程同時在運行,你的ping就有可能會收到別人的ping的echo reply,當然,ping程序可以從中挑出給自己的包,因為包里嵌入了對應的ping進程號,但是每個包都打開看看、并判斷是不是給自己的——這都要消耗時間的,所以說,多個ping進程之間會互相干擾,導致延遲加大。不同的UNIX版本由于實現方式的差異,受這個因素的影響程度也不一樣,比如HP-UX受影響較大,而Linux受影響相對較小,因為Linux采用了一種過濾機制:Linux Socket Filtering,亦即Berkeley Packet Filter (BPF),ping程序利用BPF給raw socket加上一個過濾器,這樣內核會只把對應的echo reply傳遞給ping程序,給其他ping進程的echo reply不會再傳給這個ping,避免了CPU和buffer資源的浪費,也減少了ping延遲。

其他類型的ICMP包也會對ping造成干擾

ICMP包有好幾種類型,ping希望收到的是ICMP_ECHOREPLY,但是其他類型的包也都會傳遞給ping,我們上面說過,這是因為ping使用raw socket的緣故,raw socket會看到所有的ICMP包。ping需要消耗額外的時間和資源去查看這些本來不相干的包,故而有可能會產生延遲。以下列出各種ICMP包的類型供參考:

ICMP_ECHO

ICMP_ECHOREPLY

ICMP_SOURCE_QUENCH

ICMP_REDIRECT

ICMP_DEST_UNREACH

ICMP_TIME_EXCEEDED

ICMP_PARAMETERPROB

注1:在Linux上,雖然ping采用了BPF過濾機制,但是只過濾掉了發給其他ping進程的ICMP_ECHOREPLY包,其他類型的包是不過濾的,所以仍然會受到影響。

注2:在HP-UX上ICMP_SOURCE_QUENCH是最常見的影響ping延遲的因素。Source Quench是一種簡陋的流控機制,當接收端有緩沖區滿的時候,通過向發送端返回Source Quench,告知發送端降低發送速度,而滿溢的緩沖區不一定與ICMP有關,更常見的事UDP的緩沖區。由于這種機制存在種種問題,有許多反對使用Source Quench的聲音,比如:RFC6633。Linux從2.2起就不再支持ICMP Source Quench了。

還有些其它因素,比如網卡驅動,防火墻軟件什么的,但比較少見,就不深入探討了。

怎樣判斷ping延遲是網絡延遲還是其它因素導致的呢?

如果有1秒以上的延遲的話,觀察一下icmp_seq,它表示包的順序,在下例中,第3個包的延遲是2.068秒,而第4個包的延遲只有0.183秒,如果發包的頻率嚴格保持每秒一次的話,第4個包應該比第3個包先收到才對,而下例中,包的順序并未顛倒,這說明第4個包的發送也被延遲了。發送延遲,那就不是網絡延遲了,肯定有其它原因。

dde2598463a7

還有一個簡單的方法可以一試,ping一下127.0.0.1或者ping本機的IP地址,它們不用通過網絡,甚至不用進入網卡驅動程序,所以延遲應該非常小,可以作為一個基準值,如果它們的延遲比較大,那最大的可能是存在調度延遲或者ICMP包干擾之類的問題。

dde2598463a7

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541310.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541310.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541310.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一、簡單工廠模式

# public class Operation //基類{private double _numberA 0;private double _numberB 0;public double NumberA{get{ return _numberA; }set{_numberA value;}}public double NumberB{get{ return _numberB; }set{_numberB value;}}public virtual double GetResult(){d…

軟件生命周期模型及其類型

A life cycle model is also known as a process model. As the name suggests, the software life cycle model (or the software process model) gives us a pictorial representation of the entire software development process. 生命周期模型也稱為過程模型 。 顧名思義&…

linux查看磁盤io帶寬,[Linux] 磁盤IO性能查看和優化以及iostat命令

iostat命令:%user:CPU處在用戶模式下的時間百分比。%nice:CPU處在帶NICE值的用戶模式下的時間百分比。%system:CPU處在系統模式下的時間百分比。%iowait:CPU等待輸入輸出完成時間的百分比。%steal:管理程序維護另一個虛…

Jsoup 數據修改

2019獨角獸企業重金招聘Python工程師標準>>> 1 設置屬性的值 在解析一個Document之后可能想修改其中的某些屬性值,然后再保存到磁盤或都輸出到前臺頁面。 可以使用屬性設置方法 Element.attr(String key, String value), 和 Elements.attr(String key, S…

軟件靜態架構 軟件組件圖_組件圖| 軟件工程

軟件靜態架構 軟件組件圖什么是組件圖? (What is Component Diagram?) A Component Diagram breaks down the real system under development into different heights of working. Every component is reactive for the main aim in the entire system and only re…

如何卸載非linux系統分區,如何卸載Linux系統分區?卸載Linux系統分區的方法-站長資訊中心...

系統為windows xp sp2和redhat as 5雙系統,其中linux系統后安裝的在D盤,華彩軟件站www.huacolor.com小編今天發現硬盤不夠用了,想干掉linux分區,在虛擬機中用linux。就在windows的磁盤管理(命令為:diskmgmt)下刪除linux分區&#…

順序結構復習

復習一些易錯知識點還有習題 目錄 可能不熟悉的知識點 邏輯表達式的求解 if,else的配隊 條件運算符 運算符優先級的問題 switch的使用 goto和if構成的循環 例題講解 1 2 3 4 ?編輯 5 ?編輯 6賦值 ?編輯 7 可能不熟悉的知識點 邏輯表達式的求解 如果…

模板模式(部分方法延遲到子類實現)

項目中,用到了抽象類作為父類,有部分實現。 提供了了模板方法作為子類公共方法,模板方法中調用了抽象類的抽象方法和部分非抽象方法。 執行代碼時,發現模板方法調用了抽象類的抽象方法,當時比較好奇,后來發…

ruby 集合 分組_在Ruby中找到兩個集合之間的區別

ruby 集合 分組Finding differences simply means that finding elements that are uncommon between two sets as well as are only present in the first set. We can find this, with the help of a – operator. You can also consider the objective as to find the uniqu…

怎樣在linux卸載java,卸載linux自帶java,linux自帶java

卸載linux自帶java,linux自帶java第一步:rpm查詢java安裝包名稱[rootlocalhost java]# rpm -qa | grep javajava-1.7.0-openjdk-headless-1.7.0.51-2.4.5.5.el7.x86_64tzdata-java-2014b-1.el7.noarchpython-javapackages-3.4.1-5.el7.noarchjava-1.7.0-…

Swift iOS : 內存管理

Swift是自動管理內存的。這意味著,你不需要主動釋放內存。 比如Foo內包含的Bar,可以隨同Foo一起被釋放: import UIKit UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate {var window : UIWindow?func application(…

python實現接口_Python | 使用類實現接口

python實現接口In this program, we are implementing the concept of Interface using class. Here, Class Shape worked as Interface. In Interface all methods must be non-implemented it must be implemented in child class unlike abstract class, where we can have …

linux lp 打印中文,Linux基礎命令---lp打印文件

lplp指令用來打印文件,也可以修改存在的打印任務。使用該指令可以指定打印的頁碼、副本等。此命令的適用范圍:RedHat、RHEL、Ubuntu、CentOS、Fedora、openSUSE、SUSE。1、語法lp [ -E ] [ -U username ] [ -c ] [ -d destination[/instance] ] [ -h…

【轉載】瀏覽器緩存詳解:expires cache-control last-modified

下面的內容展示了一個常見的 Response Headers,這些 Headers 要求客戶端最多緩存 3600 秒,也給出了一個 pub1259380237;gz 的校驗值。 HTTP/1.x 200 OK Transfer-Encoding: chunked Date: Sat, 28 Nov 2009 04:36:25 GMT Server: LiteSpeed Connection: …

ctype函數_PHP ctype_xdigit()函數與示例

ctype函數PHP ctype_xdigit()函數 (PHP ctype_xdigit() function) ctype_xdigit() function is a character type (CType) function in PHP, it is used to check whether a given string contains hexadecimal digits or not. ctype_xdigit()函數是PHP中的字符類型(CType)函數…

linux ldd運行不成功,Linux_Linux:Ldd命令介紹及使用方法,1、首先ldd不是一個可執行程序 - phpStudy...

Linux:Ldd命令介紹及使用方法1、首先ldd不是一個可執行程序,而只是一個shell腳本2、ldd能夠顯示可執行模塊的dependency,其原理是通過設置一系列的環境變量,如下:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_L…

開發原生的 Google 眼鏡應用 【已翻譯100%】(2/2)

使用傳感器 Glass沒有鍵盤或觸摸屏,但仍然具有移動設備所有的標準的傳感器。你可以使用標準的傳感器組件來訪問這些傳感器。 定位和GPS Glass內置有GPS。TLocationSensor具有一個OnLocationChanged事件,這一事件在GPS組件被激活時產生,在有除…

linux下php的安裝,Linux下PHP安裝

1 下載php源碼安裝包 個人是php-5.6.30.tar.gzphp2 解壓文件mysqltar -zxvf php-5.6.30.tar.gznginx3 編譯安裝sqlcd php-5.6.30api建立www用戶和www用戶組curlgroupadd wwwsocketuseradd -g www wwwphp-fpm在編譯以前先把依賴包都裝上urlyum install curl curl-develyum inst…

PHP array_filter()函數與示例

PHP array_filter()函數 (PHP array_filter() Function) array_filter() function is used to apply a filter on array elements based on the function and returns the array with filtered elements, it accepts an array to be checked and a callback function. The call…

微軟宣布以 262 億美元現金收購 LinkedIn

北京時間6月13日20:45(美國當地時間6月13日上午8:45),微軟(Nasdaq: MSFT)和LinkedIn(領英,NYSE: LNKD)對外宣布,雙方達成協議,微軟宣布將以每股196美元、總價262億美元的價格收購LinkedIn,由現金…