#ping #output #networking #tries #ms #variation #ewma

app wping

A ping command that tries to provide more useful output

2 unstable releases

Uses old Rust 2015

0.3.0 Mar 11, 2017
0.2.0 Mar 3, 2017

#5 in #variation

GPL-3.0 license

33KB
671 lines

wping

wping is similar to ping, except it tries to produce more useful output

Motivation

Estimating packet loss with ping usually involves either eyeballing the output or developing an intuition for the percentage of lost packets by looking at the timing of the output. Alternatively, one can run it in a loop and observe the cumulative statistics that ping prints out when it exits, then try to follow them over time. We can do better.

How wping works

wping calculates and displays an exponential weighted moving average (EWMA) of the round-trip time and apparent packet loss. For the purposes of calculating the packet loss, a packet is considered lost if no response has been received within smoothed(RTT) + 2 * variation(RTT). If, however, a response arrives for a previously sent packet, wping will revise the packet loss upward.

When the apparent packet loss drops below 1% (i.e. when packet losses are far enough in the past), the packet loss is reported as 0%.

The EWMA calculation is performed according to RFC6298.

Updated statistics are printed once per send interval: when a response is received or, failing that, when the next probe is about to be sent.

Installation

Currently, the way to install wping is via cargo. If cargo is not avaliable as a distribution package, the easiest way to get it is by installing rustup and then:

$ cargo install wping
$ sudo setcap cap_net_raw+ep ~/.cargo/bin/wping

Usage

On an interface with emulated packet loss:

$ wping en.wikipedia.org
PING 91.198.174.192 for en.wikipedia.org (91.198.174.192)
 Seq      RTT      smooth RTT   RTT variation   Packet loss
  1      96 ms       96 ms          48 ms           0%
  2      95 ms       96 ms          36 ms           0%
  3     108 ms       97 ms          30 ms           0%
  4     100 ms       98 ms          23 ms           0%
  -        -         98 ms          23 ms           12%
  6      97 ms       97 ms          17 ms           11%
  7      95 ms       97 ms          14 ms           10%
  8      95 ms       97 ms          10 ms           8%
  9      96 ms       97 ms          8 ms            7%
 10      97 ms       97 ms          6 ms            6%
 11      98 ms       97 ms          5 ms            6%
 12      97 ms       97 ms          3 ms            5%
  -        -         97 ms          3 ms            17%
 14      96 ms       97 ms          3 ms            15%
 15     108 ms       98 ms          5 ms            13%
 16      97 ms       98 ms          4 ms            11%
 17      97 ms       98 ms          3 ms            10%
  -        -         98 ms          3 ms            21%
 19      96 ms       98 ms          3 ms            18%
 20     111 ms       99 ms          5 ms            16%
 21      96 ms       99 ms          5 ms            14%

The default send interval is 1s and the adaptive packet loss window includes 20 probes (the effects of a packet loss event drop to below 1% after that). At startup, wping prints out all IP addresses retrieved for the target domain as a gentle reminder that round-robin DNS might be at play.

Usage:
    wping [OPTIONS] [ADDRESS]


positional arguments:
  address               Target hostname or IPv4 address

optional arguments:
  -h,--help             show this help message and exit
  -i                    Send interval
  -s,--packet-size PACKET_SIZE
                        Payload size in bytes
  --window WINDOW       Adaptive packet loss calculation for the last N probes
  -x,--extended         Include additional information in the output

Current limitations

  • Does not notice/handle other ICMP packet types (e.g. ICMP_REDIRECT)
  • No IPv6

Dependencies

~5MB
~110K SLoC