The Hi-Story of PING

A big thanks for coming here to know the history of PING utility. Please do let me know in the comments the source and interest that made you come across this article. I request you to do a small favor to me by reading this article until the last word [you might be gifted with something while reading]

Many of us use ping command in our Windows, Linux, Unix systems to troubleshoot network-related issues and most of us are not aware of how ping works. In this article, we are going to understand how PING works and what is the history of it.

What is PING?

PING is a computer utility that helps to check whether a host is reachable or not and the response time of the host. It was developed by Mike Muuss who was a Senior Scientist at US Army Research Laboratory.

The primary functionality of PING is to check Network Connectivity, Host Reachable Status, Response Time, Network Interface Card and to troubleshoot DNS related issues.

According to Mike, PING uses timed IP/ICMP ECHO_REQUEST and ECHO_REPLY packets to probe the “distance” to the target machine.

Is PING a utility or a command?

Before answering the above question, let me tell you what is a utility first. A utility can be anything that is useful and beneficial. PING is a utility that works on the command ping in cmd or terminal of our computer.

PING Workflow

PING will send four ICMP (Internet Control Message Protocol) echo requests to the target host. If the host is up and running it will send ICMP echo reply (response).

It will calculate the turn around time from request transmission to reply received and the packet loss. If all the 4 packets received from the target host, the connection was good else not.

PING WorkFlow

There are many reasons for packet loss like network connectivity, target machine powered off, physical damage to the target machine, network congestion due to heavy traffic, etc.,

Usage of PING

ping [Options]

Extension Details
-t Ping the specified host until stopped. To see statistics and continue – type Control-Break; To stop – type Control-C.
-a Resolve addresses to hostnames.
-n Number of echo requests to send.
-l Send buffer size.
-f Set Don’t Fragment flag in packet (IPv4-only).
-i Time To Live.
-v Type Of Service (IPv4-only. This setting has been deprecated and has no effect on the type of service field in the IP Header).
-r Record route for count hops (IPv4-only).
-s Timestamp for count hops (IPv4-only).
-j Loose source route along host-list (IPv4-only).
-k Strict source route along host-list (IPv4-only).
-w Timeout in milliseconds to wait for each reply.
-R Use routing header to test reverse route also (IPv6-only). Per RFC 5095 the use of this routing header has been deprecated. Some systems may drop echo requests if this header is used.
-S Source address to use.
-c Compartment Routing compartment identifier.
-p Ping a Hyper-V Network Virtualization provider address.
-4 Force using IPv4.
-6 Force using IPv6.

Pinging Google DNS

We all try to ping google DNS which is 8.8.8.8 to know whether the network is working or not. I entered the command ping 8.8.8.8 in my cmd and it gave me the following information

Pinging Google

In the above screenshot, we can see the responses from 8.8.8.8 which is Google DNS. We got those 4 replies for the 4 ICMP Echo request that we sent. Just by looking at number of responses, we can confirm whether there is any packet loss or not.

Otherwise, you can go through with ping statistics which was pretty simple to understand. Four packets sent (Echo Requests), Four packets received (Echo replies), Zero lost.

The approximate round trip time is calculated from the time request sent to the reply received. We got the first response in 150ms, second on 156ms, third on 173ms and last on 181ms.

PING Error Codes

Error Possible Reason
Request Timed Out Server Down
Firewall Blocking ICMP Echo Requests
Network Connectivity Issues
Packet Loss Network Congestion
Physical Damage
Destination Host is Unreachable No Network
No Route for Destination
Server Down

NMAP’s Note on PING (ICMP)

NMAP PING

History Of PING

Do you believe that the code for PING was written in one evening? but it’s true. Mike developed this utility to solve his network issues. I think Mike would have never thought that ping is mandatory for every system in the future which was happened.

Mike mentioned a small story behind the origin and interest to develop ping as follows.

My original impetus for writing PING for 4.2a BSD UNIX came from an offhand remark in July 1983 by Dr. Dave Mills while we were attending a DARPA meeting in Norway, in which he flatly stated that the UNIX kernel couldn’t support this sort of measurement. I disagreed, but let the matter drop. In December of 1983 I encountered some odd behavior of the network. Recalling Dr. Mills’ comments, I quickly coded up the PING program, which revolved around opening an ICMP style SOCK_RAW AF_INET Berkeley-style socket(). The code compiled just fine, but it didn’t work — just as Dr. Mills had pronounced, there was no kernel support for a raw ICMP socket. Incensed, I coded up the kernel support and had everything working well before sunrise. Not surprisingly, Chuck Kennedy (aka “Kermit”) had found and fixed the network hardware before I was able to launch my very first “ping” packet. But I’ve used it a few times since then. *grin* If I’d known then that it would be my most famous accomplishment in life, I might have worked on it another day or two

Mike mentioned in his blog that “I named it after the sound that a sonar makes, inspired by the whole principle of echo-location. In college I’d done a lot of modeling of sonar and radar systems, so the “Cyberspace” analogy seemed very apt. It’s exactly the same paradigm applied to a new problem domain: ping uses timed IP/ICMP ECHO_REQUEST and ECHO_REPLY packets to probe the “distance” to the target machine.”

I taught about explaining his story in my way, but I think you should read his blog. Click here to download the PDF of his blog or click here to visit his blog [not active but available on Wayback Machine].

Mike’s friend also shared some information about Mike and the ping utility. Click here to read the article.

The story behind the name ping

Mike used to work on Sonar and radar system when he was at college. He was inspired by the sound that a sonar makes underwater which is the root of the name ping. It’s the main principle of echo-location.

A lot of people spread fake names for ping which is an acronym for Packet InterNet Grouper. However, the creator of PING confirmed in his blog that it’s not correct.

“From my point of view PING is not an acronym standing for Packet InterNet Grouper, it’s a sonar analogy,” says the creator of PING Mike Muuss.

The Gift that you’re searching for is a famous book “The Story of Ping”. Click here to download the PDF version of the book. I hope this book will impress you. Please bookmark this link. Post-reading the book, please share your valuable feedback on this article in comments.

The Source Code of PING

Click here to download the source code of PING developed by Mike Muuss.

Suggestion

If you wish to get into more technical aspects of PING, I would suggest you read this blog https://www.hackingarticles.in/forensics-investigation-of-ping-command/

References

https://blog.codinghorror.com/the-story-about-ping/
https://en.wikipedia.org/wiki/Ping_(networking_utility)
https://www.techrepublic.com/article/new-to-networking-introducing-the-ping-command/
https://www.colocationamerica.com/how-does-ping-work
https://www.speedcheck.org/wiki/ping/
https://web.archive.org/web/19970620224138/http://ftp.arl.mil/~mike/ping.html

Leave a Comment

eight − 1 =

This site uses Akismet to reduce spam. Learn how your comment data is processed.