Please enable Javascript to view the contents

Linux网络-命令: ping

 ·  ☕ 2 分钟

环境说明

本文介绍的是Linux系统,包iputils20211215版本中的ping命令,Window系统中的选项有所不同。

1. 简介

ping 是一个非常常用的网络诊断工具,用于测试主机之间的网络连接是否正常。

它通过发送 ICMP(Internet Control Message Protocol) 回显请求消息, 来检查网络主机之间的连通性。

2. 基本用法

1
ping [选项] 目标主机

常见选项:

  • -c :指定发送回显请求的次数。单位次,默认值为不限次。

  • -w :设置超时时间(秒)。如果在指定的时间内没有收到任何回应, ping命令将终止。默认值为 10 秒。

  • -s : 设置ICMP报文数据部分大小,默认值为56字节(数据部分,不含ICMP头8字节。实际ICMP数据包大小64字节)。

  • -M : 设置路径MTU发现策略(pmtudisc_option, Path MTU Disovery Option),
    do = 设置DF(Don’t Fragment)标志位, 不允许任何分片;
    want = 允许本地分片;
    dont = 不设置DF标志位, 允许数据包在任何路径中被分片;

  • -i :指定发送回显请求的时间间隔(秒)。默认值为 1 秒。

  • -t :设置TTL(Time To Live)。TTL是一个8位的字段,表示数据包在丢弃之前可以经过的最大跳数(hops),每经过一个路由器 TTL 减 1, 当TTL为0时数据包被丢弃。默认值为 64 。

3. 示例

3.1 默认选项

-c 次数 = 无限,-s 数据包大小 = 56字节(数据部分大小,不含ICMP头8字节。实际数据包大小64字节), -t 跳数 = 64

3.1 指定等待时间、探测次数

探测主机192.168.1.254是否有回应。 探测仅等待 3 秒,也仅探测 2 次。

1
ping -c 2 -W 3 192.168.1.254

3.2 指定发送的数据包大小

ping -c 4 -s 1024 www.example.com

用来测试MTU值不合适带来的丢包问题

3.3 探测整个网络传输的最大MTU值

-c 2 发2次探测ICMP报文
-s 1472 1472(-s 数据部分大小) = 1500(MTU默认大小) - 28(因为IP头20字节,icmp包头8字节);
-M do 参数不允许路由器、交换机进行拆包、包重组。

1
ping -c 2 -s 1472 -M do 192.168.1.254

ICMP协议说明

ICMP(Internet Control Message Protocol)协议位于OSI的网络层(三层),ICMP报文被封装在IP数据包中。依赖IP协议传输。

报文结构如下:

1
2
3
4
+-------------------+-------------------+-------------------+
|     IP 头部       |     ICMP 头部     |     数据部分       |
+-------------------+-------------------+-------------------+
      20字节              8字节               可变长度
分享

Hex
作者
Hex
CloudNative Developer

目录