Linux ping 命令简介及用法

转自:微点阅读 https://www.weidianyuedu.com

不管在windows平台,还是在linux平台,ping都是非常常用的网络命令;ping命令通过ICMP(Internet控制消息协议)工作;ping可以用来测试本机与目标主机是否联通、联通速度如何、稳定性如何。

一 、ping 用法

ping命令运行在命令提示符终端,用法为:“ping 参数 目标主机”。其中参数为零到多个,目标主机可以是IP或者域名。

1

2

3

4

Usage: ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]

[-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]

[-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]

[-w deadline] [-W timeout] [hop1 ...] destination

二、ping 参数解释

参数详解

-aAudible ping.

-A自适应ping,根据ping包往返时间确定ping的速度;

-b允许ping一个广播地址;

-B不允许ping改变包头的源地址;

-c countping指定次数后停止ping;

-d 使用Socket的SO_DEBUG功能;

-F flow_label为ping回显请求分配一个20位的“flow label”,如果未设置,内核会为ping随机分配;

-f极限检测,快速连续ping一台主机,ping的速度达到100次每秒;

-i interval设定间隔几秒发送一个ping包,默认一秒ping一次;

-I interface指定网卡接口、或指定的本机地址送出数据包;

-l preload设置在送出要求信息之前,先行发出的数据包;

-L抑制组播报文回送,只适用于ping的目标为一个组播地址

-n 不要将ip地址转换成主机名;

-p pattern指定填充ping数据包的十六进制内容,在诊断与数据有关的网络错误时这个选项就非常有用,如:“-p ff”;

-q不显示任何传送封包的信息,只显示最后的结果

-Q tos设置Qos(Quality of Service),它是ICMP数据报相关位;可以是十进制或十六进制数,详见rfc1349和rfc2474文档;

-R记录ping的路由过程(IPv4 only);

注意:由于IP头的限制,最多只能记录9个路由,其他会被忽略;

-r忽略正常的路由表,直接将数据包送到远端主机上,通常是查看本机的网络接口是否有问题;如果主机不直接连接的网络上,则返回一个错误。

-S sndbufSet socket sndbuf. If not specified, it is selected to buffer not more than one packet.

-s packetsize指定每次ping发送的数据字节数,默认为“56字节”+“28字节”的ICMP头,一共是84字节;

包头+内容不能大于65535,所以最大值为65507(linux:65507, windows:65500);

-t ttl设置TTL(Time To Live)为指定的值。该字段指定IP包被路由器丢弃之前允许通过的最大网段数;

-T timestamp_option设置IP timestamp选项,可以是下面的任何一个:

"tsonly" (only timestamps)

"tsandaddr" (timestamps and addresses)

"tsprespec host1 [host2 [host3]]" (timestamp prespecified hops).

-M hint 设置MTU(最大传输单元)分片策略。

可设置为:

"do":禁止分片,即使包被丢弃;

"want":当包过大时分片;

"dont":不设置分片标志(DF flag);

-m mark设置mark;

-v使ping处于verbose方式,它要ping命令除了打印ECHO-RESPONSE数据包之外,还打印其它所有返回的ICMP数据包;

-U Print full user-to-user latency (the old behaviour).

Normally ping prints network round trip time, which can be different f.e. due to DNS failures.

-W timeout以毫秒为单位设置ping的超时时间;

-w deadlinedeadline;

参考内容:http://ss64.com/bash/ping.html

三 、输出格式

下图为简单的ping产生的响应内容,图中返回内容具体的含义如下:

① ping目标主机的域名和IP(ping会自动将域名转换为IP)② 不带包头的包大小和带包头的包大小(参考“-s”参数)③ icmp_seq:ping序列,从1开始;如果数字不是按顺序递增也就意味着丢包了  ttl:剩余的ttl;见四TTL解释  time: 响应时间,数值越小,联通速度越快;④ 发出去的包数,返回的包数,丢包率,耗费时间;⑤ 最小/最大/平均响应时间和本机硬件耗费时间;

四 、TTL解释

当我们在使用ping命令时,返回结果里会带一个TTL值。这个东西的含义其实就是Time To Live,指的是报文在网络中能够‘存活’的限制。以前这个限制方式是设定一个时间(Time To Live中的Time就是这样来的),当报文在网络中转发时,时间超过这个限制,最后一个收到报文的‘路由点’就会把它扔掉,而不继续转发。后来把时间限制改为了跳数限制,就是当报文在网络中转发时,每经过一个‘路由点‘,就把预先设定的这个TTL数值减1,直到最后TTL=1时报文就被扔掉,不向下转发。

路由点:我这里是指完成路由功能的机器,因为并不是只有路由器才可以完成路由转发功能,比如主机可以配置路由转发。

ping命令中的TTL

上边解释的TTL是基础,然后,我们这篇文章要说明的是ping中的TTL到底是什么意思。因为不管怎么想,返回了一个TTL这东西,是说被你ping的主机预设的报文TTL是这个值吗?还是说你ping它的时候自己的报文自动设定了TTL是这个值?还是说你的报文经过了TTL跳到达被ping主机?。。。总之就是不能明确地说出这个TTL的意义。

其实这个TTL是指:被ping主机那里返回的报文,到了你这里,从它自己预设的TTL减小到还剩下多少。

有点绕口,举个例子就明白了。

我们先tracert www.baidu.com

这里表示,我们发出的ICMP报文从自己主机到目标主机一共经过12跳,这里可以想成我们发过去的和对方返回的路由路径是一样的(其实网络很复杂的,这样说是在基本理论上简化问题——一般网络情况不变化就是这样的),也就是目标主机它预设的报文TTL要减掉12。现在,按照刚才说的“被ping主机那里返回的报文,到了你这里,从它自己预设的TTL减小到还剩下多少。”,我们可以计算ping www.baidu.com时的TTL了。

TTL = 目标主机预设报文TTL - 12

现在等式中有两个未知数,但是“目标主机预设报文TTL”其实比较容易知道。并且有一个前提:一般有64、128等几个值(这些东西大家另外去查资料吧)

我们先来ping www.baidu.com

这里我们看到 TTL = 52。一般就可以推断目标主机预设的报文TTL为64,因为它比较接近(一般啦)。然后对比一下上边的等式,代入数值:

52 = 64 - 12

默认情况下,Linux系统的TTL值为64或255,Windows NT/2000/XP系统的TTL值为128,Windows 98系统的TTL值为32,UNIX主机的TTL值为255。

五 、简单示例

1、每隔0.6秒ping一次,一共ping 5次:

1

2

3

4

5

6

7

8

9

10

11

[root@aiezu.com ~]# ping -c 5 -i 0.6 qq.com

PING qq.com (14.17.32.211) 56(84) bytes of data.

64 bytes from 14.17.32.211: icmp_seq=1 ttl=54 time=16.5 ms

64 bytes from 14.17.32.211: icmp_seq=2 ttl=54 time=17.0 ms

64 bytes from 14.17.32.211: icmp_seq=3 ttl=54 time=16.6 ms

64 bytes from 14.17.32.211: icmp_seq=4 ttl=54 time=18.3 ms

64 bytes from 14.17.32.211: icmp_seq=5 ttl=54 time=19.9 ms

--- qq.com ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 2405ms

rtt min/avg/max/mdev = 16.520/17.692/19.919/1.293 ms

2、极限快速的使用大包ping:

以最快的速度,使用最大的包进行ping,可用于测试目标主机的承压能力:

1

2

3

4

5

6

[root@aiezu ~]# ping -f -s 65507 10.0.0.52

PING 10.0.0.52 (10.0.0.52) 65507(65535) bytes of data.

.^

--- 10.0.0.52 ping statistics ---

646 packets transmitted, 646 received, 0% packet loss, time 1675ms

rtt min/avg/max/mdev = 1.202/2.406/8.253/0.507 ms, ipg/ewma 2.598/2.318 ms

注意:此用法非常危险,65535(包头+内容)*100个包每秒=6.25MB,每秒发送6.25MB的数据,相当于50Mbps的带宽,完全可能导致目标主机拒绝服务。请勿用于非法用途,造成不良后果自负。

3、联通不稳定,丢包严重的情形:

下面的ping发出17个ping icmp包,而只有序号为8、9、12的包收到响应信息,丢包率达82%,联通非常不稳定:

1

2

3

4

5

6

7

8

9

[root@aiezu.com ~]# ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

64 bytes from 8.8.8.8: icmp_seq=8 ttl=43 time=32.3 ms

64 bytes from 8.8.8.8: icmp_seq=9 ttl=43 time=32.2 ms

64 bytes from 8.8.8.8: icmp_seq=12 ttl=43 time=32.0 ms

^C

--- 8.8.8.8 ping statistics ---

17 packets transmitted, 3 received, 82% packet loss, time 16003ms

rtt min/avg/max/mdev = 32.038/32.208/32.362/0.246 ms

4、完全无法ping通的情形:

1

2

3

4

5

[root@aiezu.com ~]# ping -c 3 9.9.9.9

PING 9.9.9.9 (9.9.9.9) 56(84) bytes of data.

--- 9.9.9.9 ping statistics ---

3 packets transmitted, 0 received, 100% packet loss, time 1999ms

六:常见错误

1、错误一:

1

ping: packet size too large: 70000

1

2

3

4

WARNING: packet size 65508 is too large. Maximum is 65507

PING 10.0.0.52 (10.0.0.52) 65508(65536) bytes of data.

ping: local error: Message too long, mtu=1500

ping: local error: Message too long, mtu=1500

解决:

将ping的“-s”参数设置一个更小的值,windows最大值为“65500”,linux最大值为“65507”。

<think>好的,我现在需要回答用户关于Linux系统中ping命令用法的问题。首先,我要确保自己正确理解用户的需求。用户明确提到了想了解ping命令的使用方法,并且引用了三个相关的资料,这些资料里提到了一些参数,比如-t、-n、-l,还有IPv6相关的ping6命令。 接下来,我要组织回答的结构。根据用户的系统级指令,回答需要结构清晰,分步骤说明,并且引用资料中的内容。同时,必须使用中文,并且正确应用LaTeX格式的行内公式独立公式,不过在这个问题中可能数学公式用得不多,但如果有相关的地方需要注意。 首先,我应该从最基本的ping命令开始,解释不带参数的用法,然后逐步介绍常见的参数选项。每个参数需要给出示例,例如使用-c指定次数,-i设置间隔,-s调整包大小,-t设置TTL等。同时,用户提供的引用中提到了IPv6的ping6命令,这部分也需要包含在内,说明如何使用。 然后,我需要确保每个引用的内容都被正确标注。比如引用[1]提到了不带参数、-t、-n、-l参数,引用[2]强调了ping的重要性,引用[3]提到了ping6的使用。在回答中,每提到这些点的时候,要在句末自然地加上引用标识,比如[^1]、[^2]、[^3]。 另外,用户要求生成相关问题,所以我需要最后添加几个相关问题,这些问题应该与ping命令相关,帮助用户进一步学习。比如如何测试网络延迟、如何持续ping、如何调整包大小等。 需要注意的是,避免使用Markdown格式,但用户提供的示例中在相关问题部分用了列表,所以可能需要调整。不过根据用户的最新指示,回答应该使用中文,结构清晰,分步骤说明,所以可能用编号列表更合适。 在检查过程中,要确保所有技术细节准确,比如参数的正确性,示例命令的正确性。例如,-c参数在Linux中是发送的次数,而Windows中使用-n,但用户引用中提到的-n可能是在Linux中的某个变体,不过根据标准Linux ping命令,-c是次数,所以需要确认引用中的内容是否正确。根据引用[1],用户提到的是-n ${count}参数,但可能在Linux中实际是-c,这里可能存在混淆。因为引用[1]引用[3]可能来自不同的来源,需要核实。 根据我的知识,Linuxping命令中,指定次数的参数是-c,而Windows中是-n。但根据用户提供的引用[1],里面提到的是-n参数,这可能存在错误,或者来源可能有误。这时候需要如何处理?可能需要指出这一点,或者根据引用来调整,但这样会导致不准确。 例如,用户引用[1]说:“`ping` 命令的 `-n ${count}` 参数”,但实际在Linux中,-n是禁止反向域名解析,而-c才是次数。这里可能存在引用资料中的错误。如何处理这个矛盾? 可能的解决方案是:在回答中正确说明Linux中的参数是-c,并指出引用中的资料可能存在混淆,或者用户提供的引用可能有误。但根据用户的指示,需要引用这些资料,所以可能需要按照引用中的内容来,但这样会导致回答不准确。 这时候可能需要进一步确认。例如,引用[1]可能描述的是Windows系统中的ping命令,而引用[3]提到的是Linux系统中的ping命令。用户的问题是关于Linux系统的,所以应该以Linux的参数为准。例如,在Linux中: - -c count:指定发送次数 - -i interval:设置间隔 - -s size:指定包大小 - -t ttl:设置TTL 而引用[1]提到的-n参数在Linux中对应的是不进行DNS解析,而指定次数的是-c。因此,用户提供的引用可能存在错误,或者来源可能混淆了不同系统的参数。在这种情况下,应该以正确的Linux用法为准,并在回答中指出正确的参数,同时标注引用来源可能存在差异。 例如,在回答中说明:“使用`-c`参数指定发送次数(如`ping -c 4 example.com`)”,这样可能更准确,同时引用来源可能提到的-n参数可能适用于其他系统,但在Linux中是-c。或者,可能需要指出引用中的不一致,但这样可能会让用户困惑。 或者,可能用户提供的引用[1]本身有误,比如将Windows的参数与Linux混淆。在这种情况下,正确的做法是遵循标准的Linux ping命令参数,并在回答中正确说明,同时在引用时标注来源,但指出可能的差异。 例如,在回答中,当提到发送次数时,正确使用`-c`参数,并引用[1][2],但说明某些资料可能提到不同的参数,但在Linux中正确的方式是使用`-c`。 不过,这可能超出用户的需求,用户可能只需要根据提供的引用进行回答,但这样会导致错误。因此,我需要权衡准确性引用资料的正确性。 可能用户提供的引用[1]有误,或者存在打字错误。例如,引用[1]中的“-n”参数可能是针对其他系统,而用户的问题是关于Linux的,因此正确的参数是-c。这种情况下,正确的做法是给出正确的参数,并在引用中注明,例如: “使用`-c`参数指定发送次数,例如`ping -c 5 example.com`”,而引用[1]可能提到的是其他系统,因此可能忽略该引用中的-n参数,或者指出差异。 但根据用户给出的引用[1],它似乎将-n作为次数参数,这可能是一个错误。然而,根据引用[3],其中提到ping6的使用与ping类似,地址换成IPv6,这可能正确。因此,需要处理引用中的矛盾。 可能的解决方法是:在回答中正确描述Linux中的参数,并引用正确的来源。例如,引用[2]提到“掌握它的正确使用方法”,可能更倾向于正确参数,而引用[3]说明ping6的使用。引用[1]可能描述的是Windows的ping命令,因此用户的问题是关于Linux的,所以应忽略引用[1]中的错误参数,或者指出区别。 例如,在回答中: “2. 指定发送次数:使用`-c`参数(例如`ping -c 4 example.com`),这会限制测试包的发送次数[^3]。” 而引用[1]中的-n参数可能在Linux中不是用来指定次数的,所以不引用它。或者,可能需要指出,某些系统使用不同的参数,但在Linux中使用-c。 但用户提供的引用[1]属于站内引用,必须被引用。因此,可能需要指出,根据引用[1],某些情况下可能使用-n,但在Linux中正确的参数是-c,并引用其他资料。 这可能会导致混淆,但为了符合用户的引用要求,可能需要调整。 或者,可能用户提供的引用[1]中的-n参数是排版错误,实际应为-c。这种情况下,可能用户引用的资料有误,但作为回答者,应该给出正确的信息,同时引用提供的资料。 这确实是一个挑战。可能正确的做法是,按照正确的Linux用法回答,并引用资料中正确的部分,比如引用[2][3],而引用[1]中关于-n参数的部分可能存在系统差异,需要指出。 例如,在回答中: “2. 指定发送次数:在Linux中使用`-c`参数,例如`ping -c 5 example.com`[^3]。注意某些系统(如Windows)可能使用`-n`参数实现类似功能。” 这样既提供了正确的信息,又引用了用户提供的资料,同时指出了系统差异。 这样处理可能更合适,既准确又符合引用要求。 接下来,继续组织回答的结构: 1. 基本用法ping + 域名/IP 2. 常见参数: - -c 次数 - -i 间隔 - -s 包大小 - -t TTL - -W 超时时间 3. IPv6测试:使用ping6命令 4. 停止方式:Ctrl+C 每个部分需要结合引用资料中的内容,正确标注引用。 例如,在基本用法中引用[1][2],在参数部分引用对应的资料,IPv6部分引用[3]。 此外,示例代码块需要使用正确的格式,用反引号包裹命令示例。 最后,生成相关问题,如如何测试网络延迟、如何持续ping、如何调整包大小等。 现在,将这些内容整合成一个结构清晰的中文回答,确保正确引用,参数准确,并且涵盖用户的需求。</think>### Linux系统中ping命令的使用方法 #### 1. 基本用法 在终端输入`ping`命令后接域名或IP地址即可启动网络连通性测试。例如: ```bash ping example.com # 测试与example.com的连通性 ping 192.168.1.1 # 测试与指定IP的连通性 ``` 默认会持续发送数据包,按`Ctrl+C`手动停止。 --- #### 2. 常用参数详解 1. **指定发送次数** 使用`-c`参数限制测试包的发送次数(例如发送4次): ```bash ping -c 4 example.com ``` *注:Windows系统中使用`-n`参数实现类似功能。* 2. **调整发包间隔** 通过`-i`参数设置发包间隔(单位为秒,需管理员权限设置小于0.2秒): ```bash sudo ping -i 0.5 example.com # 每0.5秒发送一次 ``` 3. **自定义数据包大小** 使用`-s`参数定义数据包大小(单位:字节): ```bash ping -s 1024 example.com # 发送1024字节的包 ``` 4. **设置TTL生存时间** 通过`-t`参数限制数据包的最大跳数: ```bash ping -t 30 example.com # TTL设为30 ``` 5. **超时等待时间** 使用`-W`参数定义响应超时时间(单位:秒): ```bash ping -W 2 example.com # 2秒未响应则判定超时 ``` --- #### 3. 高级功能 - **IPv6测试** 使用`ping6`命令测试IPv6地址,用法与`ping`类似: ```bash ping6 2001:db8::1 # 测试IPv6地址 ``` - **持续测试(Windows特有)** 在Windows系统中,可通过`-t`参数实现无限次发送(Linux默认持续发送): ```bash ping -t example.com # Windows中持续测试 ``` --- #### 4. 输出解读 命令输出包含以下关键信息: - **时间序列**:如`64 bytes from 192.168.1.1`表示收到回复。 - **统计摘要**: ```bash --- example.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss # 丢包率 rtt min/avg/max/mdev = 10.2/15.3/20.1/3.8 ms # 往返时间统计 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值