You are here

Scamper

Description:

scamper is a parallelised packet-prober capable of large-scale Internet measurement using many different measurement techniques. Briefly, scamper obtains a sequence of measurement tasks from the input sources and probes each in parallel as needed to meet a packets-per-second rate specified on the command line. Tasks currently being probed are held centrally by scamper in a set of queues the probe queue if the task is ready to probe, the wait queue if it is waiting for time to elapse, and the done queue if the task has completed and is ready to be written out to disk. Each measurement technique is implemented in a separate module that includes the logic for conducting the measurement as well as the input/output routines for reading and writing measurement results, allowing measurement techniques to be implemented independently of each other. When a new measurement task is instantiated, the task attaches a set of callback routines to itself that \scamper then uses to direct the measurement as events occur, such as when it is time to probe, when a response is received, or when a time-out elapses. Sockets required as part of a measurement are held centrally by scamper in order to share them amongst tasks where possible so that resource requirements are reduced. Finally, scamper centrally maintains a collection of output files where completed measurements are written.

The scamper tools integrated in the mPlane framework are: ping, traceroute (various versions), tracelb and tracebox.

Metrics and Capabilities

Metrics

Scamper's mPlane interface also allows to run the following tools, all tools are available for IPv4 and IPv6 networks:

  • ping
  • trace (traceroute)
  • tracelb (a tool that infers all per-flow load-balanced paths between a source and destination.)
  • tracebox (a middlebox detection and localization tool)

Capabilities

Scamper's mPlane interface has 7 capabilities, each of them is available for both IPv4 and IPv6 networks. To obtain the name of IPv4 and IPv6 versions of a capability, replace respectively by 4 and 6. Every capability
comes with multiple parameters that are documented in the Scamper man pages and in the registry file. Moreover, as many parameters are specific and not always needed, default value suggestion are available in the README file.

  • scamper-ping-detail-ipV: This capability aims at measuring the round-time trip between a source and a destination and returns a value for every probe sent/received.
  • scamper-ping-average-ipV: This capability aims at measuring multiple round-time trips between a source and a destination and returns minimum, maximum and means of observed RTT values.
  • scamper-trace-standard-ipV: This capability make use of Scamper's traceroute implementation to measure IP-level routes between a source and a destination and RTTs to each intermediate cooperative hop.
  • scamper-tracelb-standard-ipV: This capability is used to infer all per-flow load-balanced paths between a source and destination.
  • scamper-tracebox-standard-ipV: This capability runs a simple tracebox probe over TCP between a source and a destination and aims at infering middlebox modifications.  For more detailed information about the tracebox algorithm, please refer to this page.
  • scamper-tracebox-specific-ipV: This capability runs a tracebox probe that you can precisely specify by setting IP fields value (ECN, DSCP, IPID/IPFLOW), the transport layer (TCP or UDP) and various TCP options/features (MSS, WScale, ECN, MPTCP, ...) and more (refer to scamper man page for an exhaustive list of probe definition possibilities). It returns all infered middlebox modifications accross the measured path. For more detailed information about the tracebox algorithm, please refer to this page.
  • scamper-tracebox-specific-quotesize-ipV: This capability is similar to scamper-tracebox-specific-ipV, but adds an additional result column containing the ICMP quoting size standard used by each hop. This information allows to identify a sub-path on which the modication occured. For more detailed information about the tracebox algorithm, please refer to this page.

Capabilities details

|mplane| showcap scamper-ping-average-ip4
capability: measure
    label       : scamper-ping-average-ip4
    link        : /
    token       : 2378eb9c718a2a2038a71f7afc10a73e
    when        : now ... future / 1s
    registry    : http://ict-mplane.eu/registry/core
    parameters  ( 9):
                         destination.ip4: *
                         scamper.ping.tos: 0 ... 255
                         scamper.ping.size: 84 ... 140
                         scamper.ping.dport: 0 ... 65535
                         scamper.ping.sport: 0 ... 65535
                         scamper.ping.ttl: 0 ... 255
                         scamper.ping.method:  tcp-ack, udp-dport, tcp-ack-sport,icmp-echo, udp, icmp-time
                         scamper.ping.rr: *
                         source.ip4: *
    metadata    ( 3):
                          System_type: Scamper
                          System_ID: Scamper-Proxy
                          System_version: 0.1
    results     ( 4):
        delay.twoway.icmp.us.min
        delay.twoway.icmp.us.mean
        delay.twoway.icmp.us.max
        delay.twoway.icmp.count

|mplane| showcap scamper-ping-average-ip4
capability: measure
    label       : scamper-ping-average-ip4
    link        : /
    token       : 2378eb9c718a2a2038a71f7afc10a73e
    when        : now ... future / 1s
    registry    : http://ict-mplane.eu/registry/core
    parameters  ( 9):
                         destination.ip4: *
                         scamper.ping.tos: 0 ... 255
                         scamper.ping.size: 84 ... 140
                         scamper.ping.dport: 0 ... 65535
                         scamper.ping.sport: 0 ... 65535
                         scamper.ping.ttl: 0 ... 255
                         scamper.ping.method:  tcp-ack, udp-dport, tcp-ack-sport,icmp-echo, udp, icmp-time
                         scamper.ping.rr: *
                         source.ip4: *
    metadata    ( 3):
                         System_type: Scamper
                         System_ID: Scamper-Proxy
                         System_version: 0.1
    results     ( 4):
        delay.twoway.icmp.us.min
        delay.twoway.icmp.us.mean
        delay.twoway.icmp.us.max
        delay.twoway.icmp.count

|mplane| showcap scamper-trace-standard-ip4
capability: measure
    label       : scamper-trace-standard-ip4
    link        :  /
    token       : b2855fd8415186bc582fa0ddeba433f2
    when        : now ... future
    registry    : http://ict-mplane.eu/registry/core
    parameters  (19):
                  scamper.trace.firsthop: 0 ... 255
                  scamper.trace.method:  UDP, TCP, ICMP,UDP-paris, ICMP-paris, TCP-ACK
                  scamper.trace.tos: 0 ... 255
                  scamper.trace.gaplimit: 0 ... 255
                  scamper.trace.loops: 0 ... 255
                  scamper.trace.confidence: 95.0 ... 99.0
                  scamper.trace.attempts: 0 ... 255
                  scamper.trace.T: *
                  destination.ip4: *
                  scamper.trace.M: *
                  scamper.trace.maxttl: 0 ... 255
                  scamper.trace.gapaction: 1 ... 2
                  source.ip4: *
                  scamper.trace.Q: *
                  scamper.trace.loopaction: 0.0 ... 1.0
                  scamper.trace.dport: 0.0 ... 65535.0
                  scamper.trace.sport: 0.0 ... 65535.0
                  scamper.trace.waitprobe: 0 ... 2550000
                  scamper.trace.wait: 0 ... 255
    metadata    ( 3):
                  System_type: Scamper
                  System_ID: Scamper-Proxy
                  System_version: 0.1
    results     ( 3):
        scamper.trace.hop.ip4
        rtt.ms
        rtt.us

|mplane| showcap scamper-tracelb-standard-ip4
capability: measure
    label       : scamper-tracelb-standard-ip4
    link        : /
    token       : 68d36e39841c7ed875563ff1942b6d77
    when        : now ... future
    registry    : http://ict-mplane.eu/registry/core
    parameters  (13):
                 scamper.tracelb.dport: 0 ... 65535
                 scamper.tracelb.maxprobec: 1 ... 10000
                 scamper.tracelb.method:  tcp-sport, udp-dport, tcp-ack-sport,udp-dport, icmp-echo, udp-sport
                 scamper.tracelb.attempts: 0 ... 255
                 destination.ip4: *
                 scamper.tracelb.sport: 0 ... 65535
                 scamper.tracelb.firsthop: 0 ... 255
                 source.ip4: *
                 scamper.tracelb.confidence: 95 ... 99
                 scamper.tracelb.gaplimit: 0 ... 255
                 scamper.tracelb.waitprobe: 0 ... 2550000
                 scamper.tracelb.waittimeout: 0 ... 255
                 scamper.tracelb.tos: 0 ... 255
    metadata    ( 3):
                  System_type: Scamper
                  System_ID: Scamper-Proxy
                  System_version: 0.1
    results     ( 1):
        scamper.tracelb.result

|mplane| showcap scamper-tracebox-standard-ip4
capability: measure
    label       : scamper-tracebox-standard-ip4
    link        : /
    token       : 67f7f831d6c511b6b7cc31ffd642c3aa
    when        : now ... future
    registry    : http://ict-mplane.eu/registry/core
    parameters  ( 2):
                         destination.ip4: *
                         source.ip4: *
    metadata    ( 3):
                          System_type: Scamper
                          System_ID: Scamper-Proxy
                          System_version: 0.1
    results     ( 2):
        scamper.tracebox.hop.ip4
        scamper.tracebox.hop.modifications

|mplane| showcap scamper-tracebox-specific-ip4
capability: measure
    label       : scamper-tracebox-specific-ip4
    link        : /
    token       : 9684b58ab96251ce8e279257d533289f
    when        : now ... future
    registry    : http://ict-mplane.eu/registry/core
    parameters  ( 4):
                  destination.ip4: *
                  scamper.tracebox.probe: *
                  source.ip4: *
                  scamper.tracebox.dport: 0 ... 65535
    metadata    ( 3):
                   System_type: Scamper
                   System_ID: Scamper-Proxy
                    System_version: 0.1
    results     ( 2):
        scamper.tracebox.hop.ip4
        scamper.tracebox.hop.modifications

|mplane| showcap scamper-tracebox-specific-quotesize-ip4
capability: measure
    label       : scamper-tracebox-specific-quotesize-ip4
    link        : /
    token       : 2f733b848adc6d9e604569adc71b9bb0
    when        : now ... future
    registry    : http://ict-mplane.eu/registry/core
    parameters  ( 4):
                  destination.ip4: *
                  scamper.tracebox.probe: *
                  source.ip4: *
                  scamper.tracebox.dport: 0 ... 65535
    metadata    ( 3):
                  System_type: Scamper
                  System_ID: Scamper-Proxy
                  System_version: 0.1
    results     ( 3):
        scamper.tracebox.hop.ip4
        scamper.tracebox.hop.modifications
        scamper.tracebox.hop.icmp.payload.len

Probe execution environment

Scamper is coded in C and no additional framwork/libraries are needed. It is fully standalone (e.g.: It does not require any external srevices/applications to operate). It should compile and run under FreeBSD, OpenBSD, NetBSD, Linux (Ubuntu), MacOS X, Solaris, Windows and DragonFly.

Integration into te Monitored Network

The scamper probe will typically be deployed within the clients networks, but can technically be deployed anywhere in the Internet. Its only requirement is to be deployed in an ICMP-friendly network environment (e.g.: In-network firewalls allowing ingress ICMP traffic), and a UDP-friendly network environment for the UDP-based probes.

Usage of standalone probe & Integration into an MPlane environment

Explained here.

Quick start:

Building scamper from the source is very easy:

$ ./configure
$ make
$ sudo make install
$ (optional) setuid 4755 /usr/local/bin/scamper
New features supported by the mPlane project

Thanks to the support of the mPlane project we extended scamper functionalities with the following features:

Changes since D2.2

The tracebox component has been merged into the Scamper component.

References