The question one may ask, is "Why would ping -f exist, if it can be used as a denial of service attack?"
Well, ping -f wasn't originally for ping-bombing someone's network to death - it was for testing. If you look at the ping manpage in a standard linux distribution, it states that it's for testing a network. From my experience, a small home network (3 or 4 computers) doesn't have much latency to it - 10 or 20 ms at most.
The "ping -f" command shows a number of dots - one for each hundred pings sent. If a ping is replied to a hundred times, the dot gets erased. This can be used to determine a network's health.
For instance, you're on computer "192.168.0.1" - let's call this one "moonshade". Computer two is "luna" at *.2, and computer three is "minimoonshade" at *.3. You're on "moonshade", the server, and you send a flood-ping (ping -f) to luna. The dots only stack up slowly - one dot or so per second. By comparison, flood-pinging minimoonshade stacks up the dots almost immediately. This could be telling you one of a few things - either the cable going to minimoonshade is bad, the connectors are bad, the NIC on minimoonshade is bad, the switch connecting the network together has a problem, or possibly the NIC on moonshade is bad. It's a quick and dirty way to test the line from NIC to NIC. More testing, say from luna to minimoonshade or luna to moonshade may help narrow down the problem using basic troubleshooting techniques.
The network configuration shown is based, very loosely, on the three computers I have on my home network.
Some notes on the command - first of all, it sends either 100 pings per second, or sends pings as quickly as they are replied to. Secondly, on a linux machine, it can only be run by the root user. Third and last, on a Windows machine, it sends the "Don't Fragment" command along with the packet.