UDP Zero Checksum Plugin

UDP uses a 16-bit field to store a checksum for data integrity. The UDP checksum field [RFC768] is calculated using information from the pseudo-IP header, the UDP header, and the data is padded at the end if necessary to make a multiple of two octets. The checksum is optional when using IPv4, and if unused a UDP checksum field carrying all zeros indicates the transmitter did not compute the checksum.

The UDPZero plugin for PATHspider aims to detect breakage in the Internet due to the use a zero-checksum field.

Usage Example

Note

The path given to the example list of web servers is taken from a Debian GNU/Linux installation and may differ on your computer. These are the same examples that can be found in the examples/ directory of the source distribution.

To use the UDPZero plugin, specify udpzero as the plugin to use on the command-line:

pspdr measure -i eth0 udpzero </usr/share/doc/pathspider/examples/webtest.ndjson >results.ndjson

This will run two DNS request connections over UDP for each job input, one with the checksum field unmodified and one with the checksum field set to all zeros.

Supported Connection Modes

This plugin supports the following connection modes:

  • dnsudp - Performs a DNS query using UDP

Output Conditions

The following conditions are generated for the UDPZero plugin:

udpzero.connectivity.Y

For each connection that was observed by PATHspider, a connectivity condition will be generated to indicate whether or not connectivity was successful using UDP zero-checksum validated against a connection with the calculated checksum left intact.

Y may have the following values:

  • works - Both connections succeeded
  • broken - Baseline connection succeeded where experimental connection failed
  • offline - Both connections failed
  • transient - Baseline connection failed where experimental connection succeeded (this can be used to give an indication of transient failure rates included in the “broken” set)

Notes

  • Setting the UDP checksum field to all zeros is performed using Python library Scapy.