Skip to content

Active measurements

mappel edited this page Aug 27, 2021 · 2 revisions

All time ranges are [start, end) so the end time is excluded.

Daily

Fetch traceroute data from RIPE Atlas

Script: traceroute.py (not included in this repository)

When: XT00:30 UTC

Range: 24 hours of the previous day from (X-1)T00:00 to XT00:00.

Output topic: ihr_atlas_traceroutev4_topology

Output timestamp: The timestamp field (start of measurement) from each traceroute is used to assign a message timestamp in Kafka.

What: Fetch traceroute data from the RIPE Atlas Measurement Results REST API. We fetch data for the Built-in Measurements 5051 and 5151, corresponding to traceroute measurements over UDP and ICMP.

Convert traceroute data to BGP RIBs

Script: traceroute_to_bgp.py

When: XT00:30 UTC

Range: 24 hours of the previous day from (X-1)T00:00 to XT00:00.

Input topics: ihr_atlas_traceroutev4_topology, ihr_peeringdb_ix, ihr_peeringdb_netixlan, ip2asn

Output topics: ihr_bgp_traceroutev4_topology_ribs, ihr_bgp_traceroutev4_topology_updates, ihr_bgp_traceroutev4_topology_stats

Output timestamp: XT00:00

What: Convert the Atlas traceroute data into a RIB-like format with AS path, peer address, etc. All traceroutes in the input range get the same output timestamp.

Compute AS visibility

Script: compute_as_visibility.py

When: XT00:30 UTC

Range: XT00:00 (corresponding to [(X-1)T00:00, XT00:00))

Input topics: ihr_bgp_traceroutev4_topology_ribs, ihr_bgp_traceroutev4_topology_updates

Output topic: ihr_bgp_traceroutev4_topology_as_visibility

Output timestamp: XT00:00

What: Iterate over the AS and IP paths and:

  • count the total number AS paths in the interval (i.e., number of traceroutes in the interval)
  • count in how many paths each AS occurs
  • count in how many paths each AS occurs as the last hop
  • build a set of IPs for each AS used as transit
  • build a set of IPs for each AS used as the last hop

Compute distribution of * hops

Script: compute_star_distribution.py

When: XT00:30 UTC

Range: XT00:00 (corresponding to [(X-1)T00:00, XT00:00))

Input topic: ihr_bgp_traceroutev4_topology_ribs

Output topic: ihr_hegemony_traceroutev4_topology_star_distribution

Output timestamp: XT00:00

What: Iterate over the IP paths. For each path, get the length (total number of hops) and the number of * hops in the path. Get the scope (last AS in the AS path) and record the (path_len, stars_in_path) tuple for each (scope, as) combination (remaining ASes) in the AS path. In the end, each (scope, as) pair has a list of (path_len, stars_in_path) pairs, indicating the number of paths and their corresponding lengths / number of * hops that were used to reach scope while going through as.

Compute AS hegemony

Scripts: produce_bgp_atom.py, produce_bcscore.py, produce_hege.py (all found here)

When: XT00:30 UTC

Range: XT00:00 (corresponding to [(X-1)T00:00, XT00:00))

Input topics: ihr_bgp_traceroutev4_topology_ribs, ihr_bgp_traceroutev4_topology_updates

Output topics: ihr_bgp_atom_traceroutev4_topology, ihr_bcscore_traceroutev4_topology, ihr_hegemony_traceroutev4_topology

Output timestamp: XT00:00

What: Compute AS hegemony scores.

Classify AS dependencies

Script: classify_dependencies.py

When: XT01:00 UTC

Range: XT00:00 (corresponding to [(X-1)T00:00, XT00:00) for traceroute and the exact timestamp for BGP)

Input topics: ihr_hegemony, ihr_hegemony_traceroutev4_topology

Output topic: ihr_hegemony_classification

Output timestamp: XT00:00

What: Classify AS dependencies by comparing the dependencies / hegemony scores calculated based on traceroute data with BGP data. The detailed process should be described somewhere.

Filter bgp_only-only and equal-only dependencies

Script: check_class_visibility.py

When: XT01:00 UTC

Range: XT00:00 (corresponding to [(X-1)T00:00, XT00:00)) for ihr_hegemony_classification and [(X-7)T00:00, XT00:00) for ihr_bgp_traceroutev4_topology_as_visibility

Input topics: ihr_hegemony_classification, ihr_bgp_traceroutev4_topology_as_visibility

Output topics: ihr_hegemony_classification_bgp_only_dependencies, ihr_hegemony_classification_equal_dependencies

Output timestamp: XT00:00

What: The script is run two times, once for bgp_only and once for equal. Read the visibility information for the last week (Note: The input ranges of the classification and visibility topics differ here, since we are interested in long-term visibilty). For each AS, built sets of transit, last hop, and unique (union of transit and last hop) IPs that were seen in traceroutes during this interval. Read the classification topic and only retrieve dependencies that are exclusively classified as bgp_only / equal for all scopes in which they occur. For each of these dependencies, write the (scope, as) pair together with the number of unique, transit, and last hop IPs to the output topic.

Check ip2asn / PeeringDB visibility

Script: check_ip2asn_visibility.py

When: XT01:00 UTC

Range: XT00:00 (corresponding to [(X-1)T00:00, XT00:00))

Input topics: ihr_hegemony_classification_bgp_only_dependencies, ihr_peeringdb_ix, ihr_peeringdb_netixlan, ip2asn

Output topic: , ihr_bgp_only_dependencies_ip2asn_visibility

Output timestamp: XT00:00

What: This script basically enhances the messages of the ihr_hegemony_classification_bgp_only_dependencies topic, since it includes them verbatim + additional information. Check for each AS if we have a IP-to-AS mapping either provided by ip2asn or by PeeringDB data. This script looks at bgp_only dependencies and there might exist ASes in paths from the BGP data that do not have a mapping. If a mapping is found, record the number of prefixes as well as the sum of IP addresses covered by these prefixes. (separately for ip2asn and PeeringDB data).

Check usage of transit IPs

Script: check_transit_ips.py

When: XT01:00 UTC

Range: XT00:00 (corresponding to [(X-1)T00:00, XT00:00)) for ihr_bgp_traceroutev4_topology_ribs and [(X-7)T00:00, XT00:00) for ihr_bgp_traceroutev4_topology_as_visibility

Input topics: ihr_bgp_traceroutev4_topology_as_visibility, ihr_bgp_traceroutev4_topology_ribs, ihr_hegemony, ihr_hegemony_classification_bgp_only_dependencies

Output topic: , ihr_bgp_only_dependencies_transit_ips

Output timestamp: XT00:00

What: Check if IPs that are used for transit in traceroute are used as transit to scopes as expected by BGP. Read all ASes that are bgp_only dependencies and get the set of transit IPs, as well as the set of scopes that depend on these ASes. Go through the IP paths (*_ribs topic) and if the path includes a transit IP for one of the ASes, check if the target of that path is a scope that depends on the corresponding AS.

Weekly

The script description is omitted if it is the same as above.

Convert traceroute data to BGP RIBs

Script: traceroute_to_bgp.py

When: Every Monday at XT02:00 UTC

Range: The last week from (X-7)T00:00 to XT00:00.

Input topics: ihr_atlas_traceroutev4_topology, ihr_peeringdb_ix, ihr_peeringdb_netixlan, ip2asn

Output topics: ihr_bgp_traceroutev4_topology_weekly_ribs, ihr_bgp_traceroutev4_topology_weekly_updates, ihr_bgp_traceroutev4_topology_weekly_stats

Output timestamp: XT00:00

Compute distribution of * hops

Script: compute_star_distribution.py

When: Every Monday at XT02:00 UTC

Range: XT00:00 (corresponding to [(X-7)T00:00, XT00:00))

Input topic: ihr_bgp_traceroutev4_topology_weekly_ribs

Output topic: ihr_hegemony_traceroutev4_topology_weekly_star_distribution

Output timestamp: XT00:00

Compute AS hegemony

Scripts: produce_bgp_atom.py, produce_bcscore.py, produce_hege.py (all found here)

When: Every Monday at XT02:00 UTC

Range: XT00:00 (corresponding to [(X-7)T00:00, XT00:00))

Input topics: ihr_bgp_traceroutev4_topology_weekly_ribs, ihr_bgp_traceroutev4_topology_weekly_updates

Output topics: ihr_bgp_atom_traceroutev4_topology_weekly, ihr_bcscore_traceroutev4_topology_weekly, ihr_hegemony_traceroutev4_topology_weekly

Output timestamp: XT00:00

Classify AS dependencies

Script: classify_dependencies.py

When: Every Tuesday at XT02:00 UTC

Range: (X-1)T00:00 (corresponding to [(X-8)T00:00, (X-1)T00:00) for traceroute and the exact timestamp for BGP)

Input topics: ihr_hegemony, ihr_hegemony_traceroutev4_topology_weekly

Output topic: ihr_hegemony_classification_weekly

Output timestamp: (X-1)T00:00

Filter bgp_only-only and equal-only dependencies

Script: check_class_visibility.py

When: Every Tuesday at XT02:00 UTC

Range: (X-1)T00:00 (corresponding to [(X-8)T00:00, (X-1)T00:00))

Input topics: ihr_hegemony_classification_weekly, ihr_bgp_traceroutev4_topology_as_visibility

Output topics: ihr_hegemony_classification_weekly_bgp_only_dependencies, ihr_hegemony_classification_weekly_equal_dependencies

Output timestamp: (X-1)T00:00

Check ip2asn / PeeringDB visibility

Script: check_ip2asn_visibility.py

When: Every Tuesday at XT02:00 UTC

Range: (X-1)T00:00 (corresponding to [(X-8)T00:00, (X-1)T00:00))

Input topics: ihr_hegemony_classification_weekly_bgp_only_dependencies, ihr_peeringdb_ix, ihr_peeringdb_netixlan, ip2asn

Output topic: , ihr_weekly_bgp_only_dependencies_ip2asn_visibility

Output timestamp: (X-1)T00:00

Check usage of transit IPs

When: Every Tuesday at XT02:00 UTC

Range: (X-1)T00:00 (corresponding to [(X-8)T00:00, (X-1)T00:00))

Input topics: ihr_bgp_traceroutev4_topology_as_visibility, ihr_bgp_traceroutev4_topology_weekly_ribs, ihr_hegemony, ihr_hegemony_classification_weekly_bgp_only_dependencies

Output topic: , ihr_weekly_bgp_only_dependencies_transit_ips

Output timestamp: (X-1)T00:00