As a Linux administrator, having in-depth knowledge of networking utilities like ping is indispensable for tackling connectivity issues. This comprehensive guide will take you through the essentials and intricacies of harnessing the humble but powerful ping on Ubuntu systems.
An Overview of Ping
The ping command-line tool sends Internet Control Message Protocol (ICMP) Echo Request packets to a specified destination host. It determines network reachability and measures round-trip time based on ICMP Echo Reply responses.
Some key functions include:
- Checking if a host is online and active on the network
- Confirming basic network connectivity to a host
- Measuring latency and packet loss to a destination
- Stress testing network capacity and reliability
Understanding how ping works under the hood requires a quick primer on ICMP and IP packet structure.
ICMP Packet Structure

As depicted in the diagram above, ICMP packets among other things carry a message type and error code payload after IP header contents like source and destination addresses.
Ping utilizes a few ICMP message types, principally the Echo Request (Type 8) and Echo Reply (Type 0).
Ping Procedure
When you invoke ping to a target host, here is sequence of events:
- ICMP Echo Request packet constructed with a payload of test data.
- Packet sent to destination host with source IP, ICMP headers etc.
- Destination receives packet, extracts payload and crafts ICMP Echo Reply.
- Reply contains identical test data from original ping packet.
- Source host receives reply, calculates round trip time and other statistics.
Now that we‘ve looked inside ping, let‘s move on to syntax and practical examples.
Ping Command Syntax
The basic invocation syntax of ping on Linux is:
ping [options] destination
Where destination can be hostname like google.com or IP address. Commonly used options are:
| -c count | Stop after specified count of echo requests are sent |
| -i interval | Time interval between sending each packet |
| -W timeout | Time to wait for echo reply before considering packet lost |
| -s packetsize | Number of data bytes to be sent in packet payload |
Now we will work through some examples of utilizing ping.
Pinging Domain Names and IP Addresses
The most basic invocation of ping requires just a destination – either hostname or IP address:
ping google.com
OR
ping 172.217.16.206
This will ping the destination endlessly until stopped by Ctrl+C.
Sample output:
PING google.com (172.217.16.206) 56(84) bytes of data.
64 bytes from maa03s47-in-f14.1e100.net (172.217.16.206): icmp_seq=1 ttl=115 time=9.07 ms
64 bytes from maa03s47-in-f14.1e100.net (172.217.16.206): icmp_seq=2 ttl=115 time=8.06 ms
64 bytes from maa03s47-in-f14.1e100.net (172.217.16.206): icmp_seq=3 ttl=115 time=7.38 ms
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 7.381/8.175/9.078/0.738 ms
Here we see details like IP resolved for the hostname, icmp sequence numbers, TTL on received packets and critical latency metrics – minimum, maximum and average round trip time.
By default ping will run endlessly until halted by Ctrl + C. Next we will see how to set count of packets to send.
Limiting Ping Packets
Using the -c option you can specify number of echo requests to send before ping automatically stops. This is useful for collecting consistent sampling of metrics.
ping -c 10 google.com
Output:
PING google.com (172.217.3.206) 56(84) bytes of data.
64 bytes from maa03s06-in-f206.1e100.net (172.217.3.206): icmp_seq=1 ttl=115 time=8.64 ms
--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 8.645/8.645/8.645/0.000 ms
Here only 1 packet was sent as we set -c 1. Try increasing count to 10 or 100 to get better metrics.
Setting Ping Interval
By default, ping transmits packets as fast as the system allows. Using -i you can set a timed interval between each ping packet:
ping -i 5 google.com
This will wait 5 seconds between each ping packet sent to the host.
Adjusting Packet Size
The default ping packet size is 32 or 64 bytes in Linux. To detect potential issues with large packets or measure performance you can adjust with the -s option:
ping -s 1472 google.com
This sets the ICMP Echo Request payload size to 1472 bytes. Maximum allowed by default is 65,535 bytes.
Network Flooding
The -f option floods target with rapid ping requests, testing network capacity:
ping -f 8.8.8.8
Hit Ctrl+C to stop this barrage. Use carefully only in isolated test environments. Can overload networks!
Advanced Ping Techniques
Now that we have covered the basics, here are some advanced tips for mastering ping.
Bind to Specific Interface
Force ping traffic out only on defined interface:
ping -I eth0 8.8.8.8
Suppress Errors
Output error messages about unreachable hosts only at start:
ping -q -c 10 192.168.0.1
TTL Expiry Test
Send packets with TTL set to expire before destination reached:
ping -t 1 8.8.8.8
Confirm if ICMP Time Exceeded messages is received from intermediate router.
Executing Ping During Network Issues
One of the most common uses of ping is to troubleshoot loss of Internet connectivity or high latency.
Common tests include:
Ping Gateway
If you can‘t access Internet, ping default gateway:
ping 192.168.0.1
If no response, no connectivity to your router.
Ping Localhost
Verify local TCP/IP stack functionality:
ping 127.0.0.1
Ping Known Good Host
Ping a reliable external server:
ping 8.8.8.8
If successful other hosts unreachable, could be DNS failure.
Ping While Performing Actions
Open a ping session then replicate faulty behavior – loads website, runs process etc. Watch output for drops and spikes during activity.
These help narrow down connectivity failures during network issues.
Ping Implementation
Now that we have explored surface usage, let‘s dive into some key aspects of low level implementation:
Constructing ICMP Packets
Ping prepares ICMP Echo Request packet with the following key fields:
- Type (8 for Echo Request, 0 for Echo Reply)
- Code (Always 0)
- Checksum
- Identifier (typically Process ID)
- Sequence Number (for matching requests/replies)</li
Rest of packet includes IP/Ethernet headers and data payload, padded to requested size by -s option.
Receiving Echo Replies
The Linux kernel Internet Protocol (IP) stack handles processing incoming ICMP Echo Replies which are then matched to outstanding ping requests via:
- Identifier
- Sequence Number
Round trip time calculated by ping using packet departure and arrival timestamps.
Statistics Calculations
As echoes are received and round trip times measured, ping keeps track of metrics like:
- Minimum/maximum/average RTTs
- Standard deviation RTTs
- Packet loss percentage
These comprehensively characterize connectivity to the destination.
Understanding these internal mechanisms help leverage ping for in-depth network diagnostics.
Ping Alternatives
While ping is ubiquitous and sufficient for basic testing, alternatives provide additional capabilities:
Traceroute
Displays route and measures transit delays hop-by-hop to destination.
MTR
Combines ping and traceroute output in a single tool. Provides hop-by-hop latency and loss stats.
Pathping
Similar to mtr and also graphically plots network performance.
For thorough network measurement consider using these tools in conjunction with traditional ping.
Summary Table of Ping Options
Here is a quick reference table of common ping arguments we covered:
| Option | Description |
|---|---|
| -c count | Stop after sending specified number of packets |
| -i interval | Wait interval seconds between each packet |
| -s packetsize | Specify number of data bytes in packet payload |
| -f | Flood target with rapid ping requests |
| -W timeout | Time to wait for echo reply before dropping |
Refer to this quick index when utilizing ping.
Wrapping Up
We have covered ping extensively – what it is, how it functions, options for tweaking output and internal mechanisms. Being able to wield ping skillfully is vital for tackling network issues on Linux systems. Master these techniques for smooth sailing!


