Linux Command Guide: ping - Network Connectivity Tester
1. Introduction
The ping command is a fundamental and widely used command-line utility for testing network connectivity between a host and a specified destination. It operates by sending ICMP (Internet Control Message Protocol) ECHO_REQUEST packets to the target host and waiting for ICMP ECHO_RESPONSE replies. The command’s output provides valuable information, including whether the destination is reachable, the round-trip time (RTT) for packets, and any packet loss.
ping is an indispensable tool for network administrators and users alike for diagnosing network issues, verifying host reachability, and getting a basic measure of network latency. Its simplicity and effectiveness make it a go-to tool for initial network troubleshooting. This guide provides an in-depth exploration of the ping command, its options, and practical applications. ping6 is the equivalent command for IPv6 networks. For simplicity, this guide will primarily refer to ping, but most options apply to ping6 as well, with specific IPv6-related notes included where relevant.
This tool is available on virtually all operating systems with a command-line interface, though this guide focuses on its usage in Linux environments, where it is typically provided by the iputils package. Its cross-platform nature and consistent core functionality make it a universal starting point for network diagnostics.
2. Basic Syntax
The basic syntax for the ping command is:
# Basic syntax of the ping command
$ ping [OPTION]... DESTINATION-
[OPTION]...: These are optional flags that modify the behavior of thepingcommand. Options can control various aspects such as the number of packets to send, the interval between packets, the size of the packets, and more. Multiple options can be combined to tailor the command to specific needs. Options are typically prefixed with a single hyphen (e.g.,-c), and some have arguments that follow immediately or after a space. -
DESTINATION: This is the target you want to test connectivity with. It can be specified as a hostname (e.g.,google.com) or an IP address (e.g.,8.8.8.8). If a hostname is used,pingwill resolve it to an IP address using DNS before sending the packets. For IPv6, an IPv6 address (e.g.,2001:4860:4860::8888) can be used withpingorping6, depending on the system.
When executed without options that limit the number of packets (e.g., -c), ping will continuously send ECHO_REQUEST packets to the DESTINATION at approximately one-second intervals until manually interrupted, typically by pressing Ctrl+C. This default behavior is useful for ongoing monitoring but can be adjusted with options for more specific tasks.
3. Core Use Cases with Examples
The primary use of ping is to check if a remote host is reachable and responsive. Below are several core use cases with examples, each demonstrating a common scenario for using ping. These examples assume a working network connection and do not require specific file or directory setups.
3.1. Pinging a Host by Name
This use case tests connectivity to a remote host by its hostname, relying on DNS to resolve the name to an IP address.
# Ping google.com to test connectivity using its hostname
$ ping google.comPING google.com (142.250.196.142) 56(84) bytes of data.
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.2 ms
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=2 ttl=116 time=14.8 ms
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=3 ttl=116 time=15.5 ms
^C # User presses Ctrl+C to stop
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 14.800/15.166/15.500/0.300 msExplanation of Output:
-
PING google.com (142.250.196.142) 56(84) bytes of data.: Indicates the target hostname (google.com), its resolved IP address (142.250.196.142), and the size of the data being sent. Here, 56 bytes is the ICMP payload, and 84 bytes is the total IP packet size (56 data + 8 ICMP header + 20 IP header). -
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.2 ms: This line appears for each successful reply. It shows:64 bytes: The size of the received packet (typically 56 data + 8 ICMP header).lhr48s26-in-f14.1e100.net (142.250.196.142): The hostname and IP of the replying host (via reverse DNS).icmp_seq=1: Sequence number of the packet, useful for tracking order and loss.ttl=116: Time To Live, indicating the number of hops remaining in the packet’s journey.time=15.2 ms: Round-trip time in milliseconds.
-
--- google.com ping statistics ---: Summary of the session after interruption. -
3 packets transmitted, 3 received, 0% packet loss, time 2003ms: Shows packets sent, received, loss percentage, and total duration. -
rtt min/avg/max/mdev = 14.800/15.166/15.500/0.300 ms: Round-trip time statistics (minimum, average, maximum, and mean deviation).
3.2. Pinging a Host by IP Address
This bypasses DNS resolution, directly targeting an IP address, which can be faster and useful when DNS is unreliable.
# Ping 8.8.8.8 (Google Public DNS server) directly by IP
$ ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=14.9 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=15.1 ms
^C
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 14.900/15.000/15.100/0.100 msExplanation: Similar to pinging by hostname, but no DNS resolution occurs, so the output directly references the IP (8.8.8.8). This is useful for isolating network issues from DNS problems.
3.3. Pinging the Localhost
This tests the local machine’s network stack by pinging the loopback address.
# Ping the loopback address to verify local network functionality
$ ping localhost
# Alternative command using the loopback IP
$ ping 127.0.0.1PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.050 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.060 ms
^C
--- localhost ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.050/0.055/0.060/0.005 msExplanation: The very low RTT (e.g., 0.050 ms) is expected since packets don’t leave the local machine. This confirms the network stack and ICMP handling are functional.
3.4. Pinging an IPv6 Address
This tests connectivity to an IPv6 host, using ping6 or ping -6 depending on the system.
# Ping Google’s IPv6 DNS server
$ ping6 2001:4860:4860::8888
# Alternative syntax on some systems
$ ping -6 2001:4860:4860::8888PING 2001:4860:4860::8888(2001:4860:4860::8888) 56 data bytes
64 bytes from 2001:4860:4860::8888: icmp_seq=1 ttl=118 time=10.2 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=2 ttl=118 time=10.5 ms
^C
--- 2001:4860:4860::8888 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 10.200/10.350/10.500/0.150 msExplanation: This confirms IPv6 connectivity. Note that ping6 may be required on older systems, while modern ping often supports IPv6 with the -6 flag.
3.5. Pinging an IPv6 Link-Local Address
Link-local addresses (starting with fe80::) require specifying the interface due to their link-specific scope.
# Ping an IPv6 link-local address on interface eth0
$ ping6 -I eth0 fe80::1234:5678:9abc:def0PING fe80::1234:5678:9abc:def0(fe80::1234:5678:9abc:def0) from fe80::1%eth0 eth0: 56 data bytes
64 bytes from fe80::1234:5678:9abc:def0: icmp_seq=1 ttl=64 time=0.120 ms
64 bytes from fe80::1234:5678:9abc:def0: icmp_seq=2 ttl=64 time=0.130 ms
^C
--- fe80::1234:5678:9abc:def0 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.120/0.125/0.130/0.005 msExplanation: Replace fe80::1234:5678:9abc:def0 with an actual link-local address on your network. The -I eth0 specifies the interface, as link-local addresses are only valid within a specific network segment.
4. Key Options Explained (with Examples)
ping offers numerous options to customize its behavior. Below are detailed explanations and examples for key options, ensuring no overlap with core use cases.
4.1. -c count (Packet Count)
Purpose: Stops after sending (and receiving replies for, if -w or -W is used with a deadline) a specified number of ECHO_REQUEST packets.
Syntax:
$ ping -c COUNT DESTINATIONUse Case: Ideal for sending a fixed number of pings instead of continuously pinging, useful for quick checks or automation in scripts.
# Send exactly 4 ping packets to google.com
$ ping -c 4 google.comPING google.com (142.250.196.142) 56(84) bytes of data.
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.2 ms
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=2 ttl=116 time=14.8 ms
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=3 ttl=116 time=15.5 ms
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=4 ttl=116 time=15.0 ms
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 14.800/15.125/15.500/0.294 msExplanation: The command sends 4 packets and stops automatically, displaying replies and statistics.
4.2. -i interval (Interval Between Packets)
Purpose: Sets the interval in seconds between sending each packet (default is 1 second).
Syntax:
$ ping -i SECONDS DESTINATIONUse Case:
- Increase interval (e.g.,
-i 5) to reduce network load. - Decrease interval (e.g.,
-i 0.2) for rapid testing (requires root for intervals < 0.2s).
# Ping every 3 seconds, send 2 packets
$ ping -i 3 -c 2 google.comPING google.com (142.250.196.142) 56(84) bytes of data.
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.2 ms
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=2 ttl=116 time=14.8 ms
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 14.800/15.000/15.200/0.200 ms# Ping 5 times per second (0.2s interval), requires sudo, send 3 packets
$ sudo ping -i 0.2 -c 3 google.comPING google.com (142.250.196.142) 56(84) bytes of data.
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.2 ms
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=2 ttl=116 time=14.8 ms
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=3 ttl=116 time=15.5 ms
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 402ms
rtt min/avg/max/mdev = 14.800/15.166/15.500/0.300 msExplanation: The first example spaces pings 3 seconds apart; the second sends them every 0.2 seconds, requiring elevated privileges for such a short interval.
4.3. -s packetsize (Packet Data Size)
Purpose: Specifies the number of data bytes in the ICMP payload (default 56 bytes, resulting in 64 bytes including the 8-byte ICMP header).
Syntax:
$ ping -s BYTES DESTINATIONUse Case: Test network behavior with varying packet sizes, such as checking for MTU issues or fragmentation.
# Ping with minimal payload (0 data bytes)
$ ping -s 0 -c 2 google.comPING google.com (142.250.196.142) 0(28) bytes of data.
8 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.2 ms
8 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=2 ttl=116 time=14.8 ms
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 14.800/15.000/15.200/0.200 ms# Ping with 1000 data bytes
$ ping -s 1000 -c 2 google.comPING google.com (142.250.196.142) 1000(1028) bytes of data.
1008 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.5 ms
1008 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=2 ttl=116 time=15.8 ms
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 15.500/15.650/15.800/0.150 msExplanation: Total packet size is packetsize + 8 (ICMP header) + 20 (IP header). The first example sends minimal data (28 bytes total), while the second sends a larger payload (1028 bytes total).
4.4. -W timeout (Response Timeout for Individual Packets)
Purpose: Sets the time (in seconds) to wait for a response per packet. If no reply is received, the packet is marked as lost.
Syntax:
$ ping -W SECONDS DESTINATIONUse Case: Useful on high-latency networks to adjust how long ping waits before reporting loss.
# Wait 0.5 seconds per reply, send 3 packets
$ ping -W 0.5 -c 3 192.168.1.100PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
64 bytes from 192.168.1.100: icmp_seq=1 ttl=64 time=0.200 ms
64 bytes from 192.168.1.100: icmp_seq=2 ttl=64 time=0.210 ms
64 bytes from 192.168.1.100: icmp_seq=3 ttl=64 time=0.190 ms
--- 192.168.1.100 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.190/0.200/0.210/0.010 msExplanation: If the target (e.g., 192.168.1.100) takes longer than 0.5 seconds to respond, packets would be reported as lost, even if the host is reachable.
4.5. -w deadline (Overall Deadline)
Purpose: Sets a total timeout (in seconds) for the ping command to run, regardless of packets sent or received.
Syntax:
$ ping -w SECONDS DESTINATIONUse Case: Limits the total duration, useful in scripts or time-sensitive checks.
# Ping for a maximum of 5 seconds
$ ping -w 5 google.comPING google.com (142.250.196.142) 56(84) bytes of data.
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.2 ms
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=2 ttl=116 time=14.8 ms
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=3 ttl=116 time=15.5 ms
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=4 ttl=116 time=15.0 ms
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=5 ttl=116 time=15.3 ms
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 5005ms
rtt min/avg/max/mdev = 14.800/15.160/15.500/0.259 msExplanation: ping stops after 5 seconds, even if not interrupted manually, showing all packets sent within that time.
4.6. -I interface (Specify Source Interface or Address)
Purpose: Specifies the source interface or IP address for outgoing packets.
Syntax:
$ ping -I INTERFACE_NAME_OR_IP DESTINATIONUse Case: Test from a specific interface on a multi-homed host or required for IPv6 link-local addresses.
# Ping using eth1 as the source interface
$ sudo ping -I eth1 -c 2 8.8.8.8PING 8.8.8.8 (8.8.8.8) from 10.0.0.5 eth1: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=15.0 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=15.2 ms
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 15.000/15.100/15.200/0.100 msExplanation: Assumes eth1 has IP 10.0.0.5. sudo may be required for binding to specific interfaces.
4.7. -n (Numeric Output Only)
Purpose: Disables reverse DNS lookups, showing only IP addresses.
Syntax:
$ ping -n DESTINATIONUse Case: Speeds up output when DNS resolution is slow or unnecessary.
# Ping with numeric output only
$ ping -n -c 2 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=14.9 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=15.1 ms
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 14.900/15.000/15.100/0.100 msExplanation: No hostname (e.g., dns.google) appears, only the IP, reducing DNS lookup overhead.
4.8. -q (Quiet Output)
Purpose: Suppresses per-packet output, showing only summary statistics.
Syntax:
$ ping -q DESTINATIONUse Case: Useful in scripts for concise results.
# Quietly ping, sending 3 packets
$ ping -q -c 3 google.comPING google.com (142.250.196.142) 56(84) bytes of data.
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 14.900/15.200/15.800/0.400 msExplanation: Only the initial line and summary are shown, omitting individual replies.
4.9. -f (Flood Ping)
Purpose: Sends packets as fast as replies are received or 100 times per second, whichever is greater.
Syntax:
$ sudo ping -f DESTINATIONUse Case: Stress testing networks (requires root).
# Flood ping localhost for 100 packets
$ sudo ping -f -c 100 localhostPING localhost (127.0.0.1) 56(84) bytes of data.
............ # Rapid dots and backspaces
--- localhost ping statistics ---
100 packets transmitted, 100 received, 0% packet loss, time 99ms
rtt min/avg/max/mdev = 0.030/0.045/0.060/0.010 msExplanation: Dots represent sent packets; backspaces indicate replies. Use cautiously on owned networks only.
4.10. -b (Allow Pinging Broadcast Address)
Purpose: Permits pinging a broadcast address to elicit responses from local hosts.
Syntax:
$ ping -b BROADCAST_ADDRESSUse Case: Basic network discovery (less effective than nmap).
# Ping broadcast address 192.168.1.255
$ ping -b -c 3 192.168.1.255PING 192.168.1.255 (192.168.1.255) 56(84) bytes of data.
64 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=0.300 ms
64 bytes from 192.168.1.20: icmp_seq=2 ttl=64 time=0.310 ms
--- 192.168.1.255 ping statistics ---
3 packets transmitted, 2 received, 33% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.300/0.305/0.310/0.005 msExplanation: Responses depend on network configuration; many hosts ignore broadcast pings.
4.11. -R (Record Route)
Purpose: Attempts to record the route taken by packets.
Syntax:
$ ping -R DESTINATIONUse Case: Basic path tracing (limited and often unreliable).
# Attempt to record route
$ ping -R -c 1 google.comPING google.com (142.250.196.142) 56(124) bytes of data.
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.0 ms
RR: 192.168.1.100
192.168.1.1
(incomplete route)
--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 15.000/15.000/15.000/0.000 msExplanation: Limited to 9 hops; many routers disable this feature.
4.12. -t ttl (Set IP Time To Live)
Purpose: Sets the TTL for outgoing packets.
Syntax:
$ ping -t TTL_VALUE DESTINATIONUse Case: Test reachability within a hop limit.
# Ping with TTL of 5
$ ping -t 5 -c 2 google.comPING google.com (142.250.196.142) 56(84) bytes of data.
From 192.168.1.1 icmp_seq=1 Time to live exceeded
From 192.168.1.1 icmp_seq=2 Time to live exceeded
--- google.com ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1002msExplanation: If the target is beyond 5 hops, intermediate routers report TTL exceeded.
4.13. -v (Verbose Output)
Purpose: Shows additional ICMP packet types received.
Syntax:
$ ping -v DESTINATIONUse Case: Detailed troubleshooting of ICMP responses.
# Ping with verbose output
$ ping -v -c 2 192.168.1.100PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
64 bytes from 192.168.1.100: icmp_seq=1 ttl=64 time=0.200 ms
64 bytes from 192.168.1.100: icmp_seq=2 ttl=64 time=0.210 ms
--- 192.168.1.100 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.200/0.205/0.210/0.005 msExplanation: Additional ICMP messages (e.g., “Destination Unreachable”) would be detailed if received.
4.14. -L (Suppress Loopback of Multicast Packets)
Purpose: Prevents loopback of multicast packets to the sender.
Syntax:
$ ping -L MULTICAST_ADDRESSUse Case: Multicast testing without local echo.
4.15. -B (Do Not Allow ping to Change Source Address)
Purpose: Locks the source address, preventing kernel changes.
Syntax:
$ ping -B DESTINATIONUse Case: Ensures consistent source IP on dynamic networks.
4.16. -l preload (Send Preload Packets)
Purpose: Sends an initial burst of packets without waiting for replies.
Syntax:
$ sudo ping -l PRELOAD_COUNT DESTINATIONUse Case: Quick burst for testing (root required for > 3).
# Send 5 packets immediately
$ sudo ping -l 5 -c 10 google.comPING google.com (142.250.196.142) 56(84) bytes of data.
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.2 ms
...
--- google.com ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9008msExplanation: Sends 5 packets at once, then proceeds normally.
4.17. -p pattern (Specify Padding Pattern)
Purpose: Fills the packet payload with a hex pattern.
Syntax:
$ ping -p HEX_PATTERN DESTINATIONUse Case: Diagnose data-specific network issues.
# Use pattern ff
$ ping -p ff -c 2 google.comPING google.com (142.250.196.142) 56(84) bytes of data.
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.2 ms
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=2 ttl=116 time=14.8 ms
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002msExplanation: Payload is filled with 0xFF bytes for testing.
4.18. -Q tos (Set Quality of Service)
Purpose: Sets QoS/DSCP bits in the IP header.
Syntax:
$ ping -Q TOS_VALUE DESTINATIONUse Case: Test QoS policy enforcement.
# Set ToS to 0x10 (low delay)
$ sudo ping -Q 0x10 -c 2 google.comPING google.com (142.250.196.142) 56(84) bytes of data.
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.2 ms
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=2 ttl=116 time=14.8 ms
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002msExplanation: Requires root for some values; tests network QoS handling.
4.19. -A (Adaptive Ping)
Purpose: Adapts interval to RTT, keeping one unanswered probe at most.
Syntax:
$ ping -A DESTINATIONUse Case: Dynamic monitoring.
# Adaptive ping
$ ping -A -c 10 google.comPING google.com (142.250.196.142) 56(84) bytes of data.
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.2 ms
...
--- google.com ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 152msExplanation: Interval adjusts to RTT, minimum 200ms for non-root.
4.20. -M hint (Path MTU Discovery Hint)
Purpose: Configures Path MTU Discovery (do, want, dont).
Syntax:
$ ping -M HINT -s BYTES DESTINATIONUse Case: Test MTU limits.
# Test with DF bit and 1472 bytes
$ ping -M do -s 1472 -c 2 google.comPING google.com (142.250.196.142) 1472(1500) bytes of data.
1480 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.5 ms
1480 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=2 ttl=116 time=15.8 ms
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002msExplanation: do sets DF bit; packet loss occurs if MTU is lower.
4.21. -U (Print Full User-to-User Latency)
Purpose: Shows user-to-user latency (older behavior, less used).
Syntax:
$ ping -U DESTINATIONUse Case: Historical latency measurement including DNS.
4.22. -V (Show Version and Exit)
Purpose: Displays ping version.
Syntax:
$ ping -VUse Case: Check utility version.
$ ping -Vping from iputils 20211215Explanation: Outputs version info and exits.
4.23. -S sndbuf (Set Socket Send Buffer)
Purpose: Sets socket send buffer size.
Syntax:
$ ping -S BUFFER_SIZE DESTINATIONUse Case: Advanced tuning for high-speed pings.
4.24. -T timestamp option (Set IP Timestamp Options)
Purpose: Adds timestamp options to IP header (tsonly, tsandaddr, tsprespec).
Syntax:
$ ping -T TIMESTAMP_OPTION DESTINATIONUse Case: Advanced diagnostics (rarely supported).
# Get timestamps only
$ ping -T tsonly -c 1 google.comPING google.com (142.250.196.142) 56(84) bytes of data.
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.0 ms
--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0msExplanation: Timestamps are rarely returned by modern routers.
5. Combining Options
Options can be combined for tailored behavior. Below are practical examples.
5.1. Custom Packet Count, Interval, and Size
# Send 5 packets, 0.5s interval, 100-byte payload
$ ping -c 5 -i 0.5 -s 100 google.comPING google.com (142.250.196.142) 100(128) bytes of data.
108 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.2 ms
108 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=2 ttl=116 time=14.8 ms
108 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=3 ttl=116 time=15.5 ms
108 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=4 ttl=116 time=15.0 ms
108 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=5 ttl=116 time=15.3 ms
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 14.800/15.160/15.500/0.259 msExplanation: Combines a fixed count, custom interval, and larger payload.
5.2. Flood with Preload
# Flood ping with 10 preload packets, stop after 500
$ sudo ping -f -l 10 -c 500 example.comPING example.com (93.184.216.34) 56(84) bytes of data.
.......... # Rapid dots and backspaces
--- example.com ping statistics ---
500 packets transmitted, 500 received, 0% packet loss, time 499msExplanation: Initial burst followed by flood, requires root.
5.3. Quiet with Timeout
# Quiet ping, 10 packets, 2s timeout per packet
$ ping -q -c 10 -W 2 192.168.1.1PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
--- 192.168.1.1 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9008ms
rtt min/avg/max/mdev = 0.190/0.205/0.220/0.015 msExplanation: Minimal output with specific reply wait time.
6. Handling Special Cases
Special cases for ping involve network-specific scenarios rather than file-related issues.
6.1. Firewalls Blocking ICMP
Firewalls can block ICMP packets, causing ping to fail even if the host is reachable via other protocols.
# Attempt to ping a firewalled host
$ ping -c 4 10.0.0.1PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
--- 10.0.0.1 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3057msExplanation: Check firewall rules if no replies are received.
6.2. Permissions for Advanced Options
Options like -f or low -i values require root privileges.
# Attempt flood ping without sudo
$ ping -f -c 10 localhostping: -f flag requires superuser privileges# Successful flood ping with sudo
$ sudo ping -f -c 10 localhostPING localhost (127.0.0.1) 56(84) bytes of data.
.......... # Rapid dots and backspaces
--- localhost ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9msExplanation: Use sudo for restricted options.
6.3. Network Address Translation (NAT)
Pinging hosts behind NAT involves targeting the public IP, not private IPs externally.
# Ping NAT public IP
$ ping -c 2 203.0.113.1PING 203.0.113.1 (203.0.113.1) 56(84) bytes of data.
64 bytes from 203.0.113.1: icmp_seq=1 ttl=58 time=20.0 ms
64 bytes from 203.0.113.1: icmp_seq=2 ttl=58 time=20.2 ms
--- 203.0.113.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002msExplanation: Internal IPs require VPN or port forwarding.
6.4. Non-Responding Hosts
Some hosts ignore ICMP for security.
# Ping a host that blocks ICMP
$ ping -c 4 silenthost.examplePING silenthost.example (198.51.100.1) 56(84) bytes of data.
--- silenthost.example ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3057msExplanation: Failure doesn’t confirm the host is down.
7. Frequently Asked Questions (FAQ)
Below are common questions from forums, validated and expanded with examples.
7.1. What Does “Request Timed Out” or 100% Packet Loss Mean?
Answer: No replies were received within the timeout period.
# Example of timeout
$ ping -c 4 10.0.0.1PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
--- 10.0.0.1 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3057msExplanation: Causes include host down, firewall, or network issues.
7.2. Why Does ping Fail but Websites Work?
Answer: The host may block ICMP but allow HTTP/HTTPS.
# Ping fails
$ ping -c 4 example.comPING example.com (93.184.216.34) 56(84) bytes of data.
--- example.com ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3057msExplanation: Test with curl example.com to confirm.
7.3. Can ping Measure Bandwidth?
Answer: No, it measures latency and loss, not bandwidth.
# Ping for latency
$ ping -c 4 google.comPING google.com (142.250.196.142) 56(84) bytes of data.
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.2 ms
...
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004msExplanation: Use iperf3 for bandwidth tests.
7.4. What’s the Difference Between ping and traceroute?
Answer: ping tests end-to-end; traceroute shows the path.
# Compare outputs
$ ping -c 2 google.com
$ traceroute google.comExplanation: traceroute lists hops, unlike ping’s single-target focus.
7.5. Why “Destination Host Unreachable”?
Answer: No route to the host or no ARP response.
# Unreachable host
$ ping -c 2 10.0.0.5PING 10.0.0.5 (10.0.0.5) 56(84) bytes of data.
From 192.168.1.1 icmp_seq=1 Destination Host Unreachable
From 192.168.1.1 icmp_seq=2 Destination Host Unreachable
--- 10.0.0.5 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1002msExplanation: Router or local host reports no path.
7.6. Is Continuous Pinging Okay?
Answer: Yes for testing, but avoid high-frequency on public servers.
# Continuous ping
$ ping google.comExplanation: Use responsibly to avoid abuse.
7.7. Why Does RTT Vary?
Answer: Network conditions fluctuate.
# Variable RTT
$ ping -c 5 google.comPING google.com (142.250.196.142) 56(84) bytes of data.
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=1 ttl=116 time=15.2 ms
64 bytes from lhr48s26-in-f14.1e100.net (142.250.196.142): icmp_seq=2 ttl=116 time=20.0 ms
...
rtt min/avg/max/mdev = 15.200/17.500/20.000/1.800 msExplanation: Congestion or routing changes cause variance.
7.8. What Does “Time to Live Exceeded” Mean?
Answer: Packet’s TTL reached zero before destination.
# Low TTL
$ ping -t 2 -c 2 google.comPING google.com (142.250.196.142) 56(84) bytes of data.
From 192.168.1.1 icmp_seq=1 Time to live exceeded
From 192.168.1.1 icmp_seq=2 Time to live exceeded
--- google.com ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1002msExplanation: Indicates hop limit reached.
8. Conclusion
The ping command is a fundamental diagnostic tool for anyone working with networks. Its simplicity in testing basic reachability, combined with options to control packet count, size, interval, and more, makes it invaluable for initial troubleshooting steps. While it doesn’t provide a complete network picture, the information it yields—primarily round-trip time and packet loss—is often the first indicator of network health or problems. For deeper analysis, tools like traceroute, mtr, or iperf3 can complement ping. Always use aggressive features like flood ping responsibly and with appropriate permissions.
9. ping Command: Reference Table of Key Options
| Option(s) | Description | Example Command | Use Case |
|---|---|---|---|
| (none) | Send ICMP ECHO_REQUESTs continuously | $ ping google.com | Basic connectivity test |
-c count | Stop after sending count packets | $ ping -c 5 8.8.8.8 | Send a fixed number of pings |
-i interval | Wait interval seconds between packets (default 1s) | $ ping -i 0.5 server.example.com | Adjust ping frequency (sub-second needs root) |
-s packetsize | Specify data bytes to send (default 56) | $ ping -s 1024 host.local | Test with different packet sizes, MTU issues |
-W timeout | Wait time per packet response, in seconds | $ ping -W 2 slowhost.com | Set individual packet reply timeout |
-w deadline | Total timeout in seconds before exit | $ ping -w 10 mydevice | Limit total ping duration |
-I interface | Set source interface or IP address | $ ping -I eth1 google.com | Test from specific interface |
-n | Numeric output only (no DNS lookups) | $ ping -n 8.8.4.4 | Speed up output, avoid DNS issues |
-q | Quiet output (summary only) | $ ping -q -c 10 server | Get only final statistics, script-friendly |
-f | Flood ping (rapid sending) | $ sudo ping -f localhost | Stress test (use cautiously, needs root) |
-b | Allow pinging broadcast address | $ ping -b 192.168.1.255 | Discover hosts on local network |
-R | Record route (basic path tracing) | $ ping -R -c 1 target | Limited route tracing |
-t ttl | Set IP Time To Live | $ ping -t 3 remotehost | Test reachability within hop count |
-v | Verbose output (more ICMP details) | $ ping -v host.example.net | Detailed ICMP error messages |
-A | Adaptive ping (interval adapts to RTT) | $ ping -A -c 20 server | Dynamic ping flow based on latency |
-M hint | Path MTU Discovery hint (do, want, dont) | $ ping -M do -s 1472 target | Test MTU and fragmentation |
-p pattern | Fill packet with hex pattern | $ ping -p aabb -c 3 host | Diagnose data-dependent issues |
-Q tos | Set QoS/DSCP bits | $ sudo ping -Q 0x20 target | Test QoS policies |
-V | Show version and exit | $ ping -V | Check utility version |
--help | Display help message and exit | $ ping --help | Quick usage information |