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.mzph.cn/news/541310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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 可能不熟悉的知识点 逻辑表达式的求解 如果…

模板模式(部分方法延迟到子类实现)

项目中,用到了抽象类作为父类,有部分实现。 提供了了模板方法作为子类公共方法,模板方法中调用了抽象类的抽象方法和部分非抽象方法。 执行代码时,发现模板方法调用了抽象类的抽象方法,当时比较好奇,后来发…

【转载】浏览器缓存详解: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: …

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…

微软宣布以 262 亿美元现金收购 LinkedIn

北京时间6月13日20:45(美国当地时间6月13日上午8:45),微软(Nasdaq: MSFT)和LinkedIn(领英,NYSE: LNKD)对外宣布,双方达成协议,微软宣布将以每股196美元、总价262亿美元的价格收购LinkedIn,由现金…

本月初 本月末 java_本月内容作家(2018年8月)

本月初 本月末 javaWe are feeling glad to announce that Prerana Jain is the Content Writer Of The Month (August 2018) on the basis of her excellent contribution and her support to us. 我们很高兴地宣布, Prera​​na Jain凭借其出色的贡献和对我们的支…

c语言案例朗读工具源码,C语言编写简单朗读小工具(有源码)

原标题:C语言编写简单朗读小工具(有源码)最近不少人在后台留言说学C都是面对枯燥的控制台程序,能不能体现一下C语言的实际用途,今天我们就理论结合实践一把:C语言结合VBS脚本编写一个简单的朗读小工具,做一个能够发音的…

WAS集群系列(5):集群搭建:步骤3:安装IHS软件

选择“安装IBM HTTPServer”选项,点击“安装向导”。例如以下图提示: 安装提示,逐步点击“下一步”,当中偶有几处细节注意就可以。列举例如以下: (1)、产品安装路径与先前WAS软件所安装路径统一…

WordPress数据表wp-options数据字段存JSON数据

2019独角兽企业重金招聘Python工程师标准>>> wp_options表是WordPress中最重要的表,一切程序设置、主题设置和绝大多数插件的设置大都保存在此表。 WordPress里面数据表wp-options数据字段存JSON数据 : a:90: {s:11:"^wp-json/?$"…

css scroll属性_CSS中的scroll-behavior属性

css scroll属性CSS | 滚动行为属性 (CSS | scroll-behavior property) Who does not want their links to function smoothly and attractively? This type of functionality is very easy to implement. All you need is a bit of awareness about the property that would h…

基于HTML5 Canvas 实现弹出框

用户鼠标移入时,有弹出框出现,这样的需求很常见。这在处理HTML元素实现时简单,但是如果是对 HTML5 Canvas 构成的图形进行处理,这种方法不再适用,因为 Canvas 使用的是另外一套机制,无论在 Canvas 上绘制多…

JavaScript | 嵌套if的示例

Example: 例: In this example, we are reading salary of an employee and finding the discount and net pay based on given salary and discount rate. 在此示例中,我们正在读取员工的薪水,并根据给定的薪水和折扣率找到折扣和净工资。 …

node.js 中间件_Node.js中的Passport中间件(模块)

node.js 中间件Hi! Welcome to Node.js Authentication Series, where well study and program the passport module or middleware. 嗨! 欢迎使用Node.js身份验证系列 ,我们将在其中研究和编程通行证模块或中间件 。 Nowadays, an important tool in m…

android开发自动提示框,Android 多种简单的弹出框样式设置代码

简介这是一个基于AlertDialog和Dialog这两个类封装的多种弹出框样式,其中提供各种简单样式的弹出框使用说明。同时也可自定义弹出框。项目地址:http://www.easck.com/jjdxmashl/jjdxm_dialogui特性1.使用链式开发代码简洁明了2.所有的弹出框样式都在Dial…

小程序中利用Moment.js格式时间

2019独角兽企业重金招聘Python工程师标准>>> LeanCloud给的日期是ISO格式,比如2017-06-05T14:08:20.589Z,直接显示在页面上体验不好。 凡是有关日期的,格式化、计算,用moment就够了。 1.下载 http://momentjs.com/ 选m…

JEESZ分布式架构3--CentOs下安装MySQL(环境准备)

声明:因为运行环境是基于Linux系统的,在做此框架之前需要做一些前期的环境准备工作CentOs下安装MySQL网上很多实例,因为博客后期作为框架的原生教程,故这边做详细的安装记录,我这边已经下载好了MySQL,通过s…