Netalyzr: Illuminating The Edge Network - SIGCOMM

Transcription

Netalyzr: Illuminating The Edge NetworkChristian KreibichICSI1947 Center StreetBerkeley, CA, 94704, USAchristian@icir.orgBoris NechaevHIIT & Aalto UniversityPO Box 1980000076 Aalto, FinlandNicholas WeaverICSI1947 Center StreetBerkeley, CA, 94704, USAnweaver@icsi.berkeley.eduVern PaxsonICSI & UC Berkeley1947 Center StreetBerkeley, CA, 94704, CTreliability—is largely determined by the configuration and management of their edge network, i.e., the specifics of what their Internet Service Provider (ISP) gives them in terms of Internet access.While conceptually we often think of users receiving a straightforward “bit pipe” service that transports traffic transparently, inreality a myriad of factors affect the fate of their traffic.It then comes as no surprise that this proliferation of complexityconstantly leads to troubleshooting headaches for novice users andtechnical experts alike, leaving providers of web-based services uncertain regarding what caliber of connectivity their clients possess.Only a few tools exist to analyze even specific facets of these problems, and fewer still that people with limited technical understanding of the Internet will find usable. Similarly, the lack of such toolshas resulted in the literature containing few measurement studiesthat characterize in a comprehensive fashion the prevalence and nature of such problems in the Internet.In this work we seek to close this gap. We present the design,implementation, and evaluation of Netalyzr,1 a publicly availableservice that lets any Internet user obtain a detailed analysis of theoperational envelope of their Internet connectivity, serving both asa source of information for the curious as well as an extensive troubleshooting diagnostic should users find anything amiss with theirnetwork experience. Netalyzr tests a wide array of properties ofusers’ Internet access, starting at the network layer, including IPaddress use and translation, IPv6 support, DNS resolver fidelity andsecurity, TCP/UDP service reachability, proxying and firewalling,antivirus intervention, content-based download restrictions, contentmanipulation, HTTP caching prevalence and correctness, latencies,and access-link buffering.We believe the breadth and depth of analysis Netalyzr provides isunique among tools available for such measurement. In addition, asof this writing we have recorded 130,000 runs of the system from99,000 different public IP addresses, allowing us both to construct alarge-scale picture of many facets of Internet edge behavior as wellas to track this behavior’s technological evolution over time. Themeasurements have found a wide range of behavior, on occasioneven revealing traffic manipulation unknown to the network operators themselves. More broadly, we find chronic over-bufferingof links, a significant inability to handle fragmentation, numerousincorrectly operating HTTP caches, common NXDOMAIN wildcarding, impediments to DNSSEC deployment, poor DNS performance, and deliberate manipulation of DNS results.In this paper we present Netalyzr, a network measurement and debugging service that evaluates the functionality provided by people’s Internet connectivity. The design aims to prove both comprehensive in terms of the properties we measure and easy to employand understand for users with little technical background. We structure Netalyzr as a signed Java applet (which users access via theirWeb browser) that communicates with a suite of measurementspecific servers. Traffic between the two then probes for a diverseset of network properties, including outbound port filtering, hidden in-network HTTP caches, DNS manipulations, NAT behavior,path MTU issues, IPv6 support, and access-modem buffer capacity.In addition to reporting results to the user, Netalyzr also forms thefoundation for an extensive measurement of edge-network properties. To this end, along with describing Netalyzr’s architectureand system implementation, we present a detailed study of 130,000measurement sessions that the service has recorded since we madeit publicly available in June 2009.Categories and Subject DescriptorsC.4 [Performance of Systems]:NIQUESMEASUREMENT TECH-General TermsMeasurement, Performance, Reliability, SecurityKeywordsNetwork troubleshooting, network performance, network measurement, network neutrality1.INTRODUCTIONFor most Internet users, their network experience—perceivedservice availability, connectivity constraints, responsiveness, andPermission to make digital or hard copies of all or part of this work forpersonal or classroom use is granted without fee provided that copies arenot made or distributed for profit or commercial advantage and that copiesbear this notice and the full citation on the first page. To copy otherwise, torepublish, to post on servers or to redistribute to lists, requires prior specificpermission and/or a fee.IMC’10, November 1–3, 2010, Melbourne, Australia.Copyright 2010 ACM 978-1-4503-0057-5/10/11 . 10.00.1246http://netalyzr.icsi.berkeley.edu

We begin by presenting Netalyzr’s architecture and implementation (§ 2) and the specifics of the different types of measurements itconducts (§ 3). We have been operating Netalyzr publicly and continuously since June 2009, and in § 4 report on the resulting datacollection, including flash crowds, their resulting measurement biases, and our extensive calibration tests to assess the correct operation of Netalyzr’s test suite. In § 5 we present a detailed analysisof the resulting dataset and some consequences of our findings. Wedefer our main discussion of related work to § 6 in order to havethe context of the details of our measurement analysis to compareagainst. § 7 discusses our plans for future tests and development.Finally, we summarize in § 8.2. %!"# % ! SYSTEM DESIGNWhen designing Netalyzr we had to strike a balance between atool with sufficient flexibility to conduct a wide range of measurement tests, yet with a simple enough interface that unsophisticatedusers would run it—giving us access to a much larger (and less biased towards “techies”) end-system population than possible if themeasurements required the user to install privileged software. Tothis end, we decided to base our approach on using a Java applet( 5,000 lines of code) to drive the bulk of the test communicationwith our servers ( 12,000 lines of code), since (i) Java appletsrun automatically within most major web browsers, (ii) applets canengage in raw TCP and UDP flows to arbitrary ports (though notwith altered IP headers), and, if the user approves trusting the applet, contact hosts outside the same-origin policy, (iii) Java appletscome with intrinsic security guarantees for users (e.g., no host-levelfile system access allowed by default runtime policies), (iv) Java’sfine-grained permissions model allows us to adapt gracefully if auser declines to fully trust our applet, and (v) no alternative technology matches this level of functionality, security, and convenience.Figure 1 shows the conceptual Netalyzr architecture, whose components we now discuss in turn.Application Flow. Users initiate a test session by visiting theNetalyzr website and clicking Start Analysis on the webpage withthe embedded Java test applet. Once loaded, the applet conductsa large set of measurement probes, indicating test progress to theuser. When testing completes, the applet redirects to a summarypage that shows the results of the tests in detail and with explanations (Figure 2). The users can later revisit a session’s results via apermanent link associated with each session. We also save the session state (and server-side packet traces) for subsequent analysis.Front- and Back-end Hosts. The Netalyzr system involvesthree distinct locations: (i) the user’s machine running the test applet in a browser, (ii) the front-end machine responsible for dispatching users and providing DNS service, and (iii) multiple backend machines that each hosts both a copy of the applet and a fullset of test servers. All back-end machines run identical configurations and Netalyzr conducts all tests in a given client’s session using the same back-end machine. We use Amazon’s EC2service (http://aws.amazon.com/ec2/) to facilitate scalability, employing 20 back-end hosts during times of peak load. Givena conservative, hard-wired maximum number of 12 parallel sessions per minute, this allows Netalyzr to serve up to 240 sessionsper minute.2Front-end Web Server. Running on the front-end machine,this server provides the main website, including a landing/dispatchpage, documentation, FAQs, an example report, and access to re-Figure 1: Netalyzr’s conceptual architecture. ❶ The user visits the Netalyzr website. ❷ When starting the test, the frontend redirects the session to a randomly selected back-end node.❸ The browser downloads and executes the applet. ❹ The applet conducts test connections to various Netalyzr servers onthe back-end, as well as DNS requests which are eventually received by the main Netalyzr DNS server on the front-end. ❺ Westore the test results and raw network traffic for later analysis.❻ Netalyzr presents a summary of the test results to the user.ports from previous sessions. The front page also includes an appletthat ensures that the user has Java installed and then directs the userto a randomly selected back-end server to load-balance the actualtesting process. Finally, the front page rate-limits visitors to a fixednumber of measurements per minute per back-end server.Back-end Web Servers. The back-end web servers host the actual measurement applet (so that its probe connections to the serveraccord with the same-origin policy) and perform HTTP testing andoverall session management. When sending the measurement applet, the server includes a set of configuration parameters, includinga globally unique session ID.Measurement Applet. The Java applet implements 38 types oftests, some with a number of subtests. We describe them in detail inSection 3. The applet conducts the test cases sequentially, but alsoemploys multithreading to ensure that test sessions cannot stall theentire process, and to speed up some parallelizable tasks. As testscomplete, the applet transmits detailed test results to the back-endserver; it also sends a continuously recorded client-side transcriptof the session. Note that we sign our applet with a certificate froma trusted authority so that browsers indicate a valid signature.DNS Servers.These run on the front-end as wellas the back-end machines.On the front-end, it actsas the authoritative resolver for the two subdomains employed by Netalyzr, netalyzr.icsi.berkeley.edu andnetalyzr.icir.org. (In the following, we abbreviate theseto netalyzr.edu and netalyzr.org, respectively.) On theback-ends, the server receives DNS test queries generated directlyfrom the applet rather than through the user’s DNS resolver library. The server interprets queries for specific names as commands, generating replies that encode values in A and CNAMErecords. For example, requesting has edns.netalyzr.eduwill return an A record reflecting whether the query message indicated EDNS support. The server also accepts names with arbitrary interior padding to act as a cache-busting nonce, ensuring thatqueries reach our server.Echo Servers. An array of simple TCP and UDP echo serversallow us to test service-level reachability and content modifica-2We limited each node to conducting 12 sessions per minute toprevent the UDP-based network bandwidth/buffer stress test frominterfering with other tests.247

3.MEASUREMENTS CONDUCTEDWe now describe the types of measurements Netalyzr conductsand the particular methodology used, beginning with layer-3 measurements and then progressing to higher layers, and obtaining userfeedback.3.1Network-layer InformationAddressing. We obtain the client’s local IP address via the JavaAPI, and use a set of raw TCP connections and UDP flows to ourecho servers to learn the client’s public address. From this set ofconnections we can identify the presence of NAT, and if so howit renumbers addresses and ports. If across multiple flows we observe more than one public address, then we assess whether theaddress flipped from one to another—indicating the client changednetworks while the test was in progress—or alternates back andforth. This latter implies either the use of load-balancing, or thatthe NAT does not attempt to associate local systems with a single consistent public address but simply assigns new flows out of apublic address block as convenient. (Only 1% of sessions includedan address change from any source.)IP Fragmentation. We test for proper support of IP fragmentation (and also for MTU measurement; see below) by sending UDPpayloads to our test servers. We first check for the ability to sendand receive fragmented UDP datagrams. In the applet serverdirection, we send a 2 KB datagram which, if received, generatesa small confirmation response. Due to the prevalence of Ethernetframing, we would expect most clients to send this packet in fragments, but it will always be fragmented by the time it reaches theserver. We likewise test the server applet direction by our servertransmitting (in response to a small query from the client) a 2 KBmessage to the client. This direction will definitely fragment, as theback-end nodes have an interface MTU of 1500 bytes.If either of the directional tests fails, the applet performs binarysearch to find the maximum packet size that it can successfullysend/receive unfragmented.Path MTU. A related set of tests conducts path MTU probing.The back-end server for this test supports two modes, one for eachdirection. In the applet server direction, the applet sends a largeUDP datagram, resulting in fragmentation. The server monitors arriving packets and reports the IP datagram size of the entire original message (if received unfragmented) or of the original message’sinitial resulting fragment. This represents a lower bound on MTUin the applet server direction, since the first fragment’s size isnot necessarily the full path MTU. (Such “runts” occurred in only ahandful of sessions). Additionally, the applet tests for a path MTUhole in the applet server direction by sending a 1499 B packetusing the default system parameters.In the server applet direction, the applet conducts a binarysearch beginning with a request for 1500 bytes. The server responds by sending datagrams of the requested size with DF set. Ineach iteration one of three cases occurs. First, if the applet receivesthe DF-enabled response, its size is no more than the path MTU.Second, if the response exceeds the path MTU, the server processesany resulting ICMP “fragmentation required” messages and sendsto the applet the attempted message size, the offending location’sIP address, and the next-hop MTU conveyed in the ICMP message.Finally, if no messages arrive at the client, the applet infers that theICMP “fragmentation required” message was not generated or didnot reach the server, and thus a path MTU problem exists.Latency, Bandwidth, and Buffering. We measure packet delivery performance in terms of round-trip latencies, directional bandwidth limits, and buffer sizing. With these, our primary goal is notto measure capacity itself (which numerous test sites already ad-Figure 2: A partial screen capture of Netalyzr’s results page asseen by the user upon completion of all tests. The full reportis 4–10 times this size, depending on whether the user expandsthe different sections.tion of traffic on various ports. The servers mostly run on wellknown ports but do not implement the associated application protocol. Rather, they use their own simple payload schema to conveytiming, sequencing, and the requester’s IP address and source portback to the client. An additional server can direct a DNS request tothe user’s public address to check if the user’s NAT or gateway actsas a proxy for external DNS requests.Bandwidth Measurement Servers. To assess bandwidth, latency, buffer sizing, and packet dynamics (loss, reordering, duplication), we employ dedicated UDP-based measurement servers. Likethe echo servers, these use a custom payload schema that includestiming information, sequence numbers, instructions regarding future sending, and aggregate counters.Path MTU Measurement Server. To measure directional pathMTUs, we use a server that can capture and transmit raw packets,giving us full access to and control over all packet headers.Storage. To maintain a complete record of server-side sessionactivity, we record all relevant network traffic on the front- andback-end machines, except for the relatively high-volume bandwidth tests. Since Java applets do not have the ability to recordpackets, we cannot record such traces on the client side.Session Management. The back-end web servers establish andmaintain session state as test sessions progress, identifying sessionsvia RFC 4122 UUIDs. We serialize completed session state todisk on the back-end hosts and periodically archive it on the frontend where it can still be accessed by the web browser. Thus, theURL summarizing the results can be subsequently refetched whendesired, which enables third-party debugging where an individualruns Netalyzr but others can interpret the results.33The “League of Legends” online game community regularly usesNetalyzr in this way, as part of their Internet connection troubleshooting instructions.248

dress), but as a means to measure the sizing of bottleneck buffers,which can significantly affect user-perceived latency. We do soby measuring the increase in latency between quiescence and thatexperienced during the bandwidth test, which in most cases willbriefly saturate the path capacity in one direction and thus fill thebuffer at the bottleneck.Netalyzr conducts these measurements in two basic ways. First,early in the measurement process it starts sending in the background small packets at a rate of 5 Hz. We use this test to detecttransient outages, such as those due to a poor wireless signal.Second, it conducts an explicit latency and bandwidth test. Thetest begins with a 10 Hz train of 200 small UDP packets, for whichthe back-end’s responses provide the baseline mean latency usedwhen estimating buffer sizing effects. The test next sends a trainof small UDP packets that elicit 1000-byte replies, with exponentially ramping up (over 10 seconds) the volume in slow-start fashion: for each packet received, the applet sends two more. In thesecond half of the interval, the applet measures the sustained rateat which it receives packets, as well as the average latency. (Italso notes duplicated and reordered packets over the entire run.)After waiting 5 seconds for queues to drain, it repeats with sizesreversed, sending large packets to the server that trigger small responses. Note that most Java implementations will throttle sendingrates to 20 Mbps, imposing an upper bound on the speed we canmeasure.4IPv6 Adoption. To measure IPv6 connectivity we have to relyon an approximation because neither our institution nor AmazonEC2 supports IPv6. However, on JavaScript-enabled hosts the analysis page requests a small logo from ipv6.google.com, reachable only over IPv6. We report the outcome of this request to ourHTTP server. Since we cannot prevent this test from possibly fetching a cached image, we could overcount IPv6 connectivity if theuser’s system earlier requested the same resource (perhaps due to aprevious Netalyzr run from an IPv6-enabled network).3.2the IP address of the origin server, or throws an exception if theresult is not the origin server’s address, while the latter (which runsif the user trusts the applet) can look up arbitrary names, allowingus to conduct much more comprehensive testing. Also, our DNSauthority server interprets requests for specific names as commandstelling it what sort of response to generate. We encode Boolean results by returning distinct IP addresses (or hostnames) to representtrue and false, with true corresponding to the origin server’s address. For brevity in the following discussion, we abbreviate fullyqualified hostnames that we actually look up by only referring tothe part of the name relevant for a given test. The actual namesalso have embedded in them the back-end node number. When weemploy a nonce value to ensure cache penetration, we refer using“nonce” in the name.Glue Policy. One important but subtle aspect of the DNS resolution process concerns the acceptance and promotion of responsedata in the Authoritative or Additional records of a response, commonly referred to as “glue” records. Acceptance of such recordscan boost performance by avoiding future lookups, but also riskscache poisoning attacks [5]. Assessing the acceptance of theserecords is commonly referred to as “bailiwick checking,” but theguidelines on the procedure allow latitude in how to conduct it [10].Netalyzr leverages glue acceptance to enable tests of the DNS resolver itself.We first check acceptance of arbitrary A records in the Additional section by sending lookups of special names (made distinctwith nonces) that return particular additional A records. We thenlook up those additional names directly to see whether the resolverissues new queries for the names (which would return false whenthose names are queried directly) or answers them from its cache(returning true), indicating that the resolver accepted the glue. Wecheck for arbitrary glue records as well as for those that indicatenameservers. We then likewise check for caching of Authority Arecords. Finally, we check whether the server will automaticallyfollow CNAME aliases by returning one value for the alias in anAdditional record, but a different value for any query for the aliasmade directly to our server.DNS Server Identification and Properties. We next probemore general DNS properties, including resolver identity, IPv6 support, 0x20 support [7], respect for short TTLs, port randomizationfor DNS requests, and whether the user’s NAT, if present, acts as aDNS proxy on its external IP address.When able to conduct unrestricted DNS measurements, weidentify the resolver’s IP address (as seen by our server)by returning it in an A record in response to a query forserver.nonce.netalyzr.edu. This represents the addressof the final server sending the request, not necessarily the onethe client uses to generate the request. During our beta-testingwe changed the applet code to conduct this query multiple timesbecause we observed that some hosts will shift between DNS resolvers, and some DNS resolvers actually operate as clusters.We test IPv6 AAAA support by resolving ipv6 set.nonce.This test is slightly tricky because the resolver will often first request an A record for the name prior to requesting a AAAA record.Thus, the back-end server remembers whether it saw a AAAArecord and returns true/false indicating if it did in response to afollow-on query that our client makes.Queries for the name 0x20 return true if the capitalization in amix-cased request retains the original mix of casing.If the DNS resolver accepts glue records for nameservers (NSresponses in Authority or Additional), we leverage this to checkwhether the resolver respects short TTLs. Responses to the namettl0 or ttl1 place a glue record for return false in theService ReachabilityTo assess any restrictions the user’s connectivity may impose onthe types of services they can access, we attempt to connect to 25well-known services along with a few additional ports on the backend. For 80/tcp and 53/udp connectivity, the applet speaksproper HTTP and DNS, respectively. We test all other servicesusing our echo server protocol as described in Section 2.In addition to detecting static blocking, these probes also allow us to measure the prevalence of proxying. In the absenceof a proxy, our traffic will flow unaltered and the response willinclude our public IP address as expected. On the other hand,protocol-specific proxies will often transform the echo servers’non-protocol-compliant responses into errors, or simply abort theconnection. For HTTP and DNS, we include both compliant andnon-compliant requests, which will likewise expose proxies. Further protocol content such as banners or headers often conveys additional information, such as whether a proxy resides on the endhost (e.g., as part of an AV system) or in the network.3.3DNS MeasurementsNetalyzr performs extensive measurements of DNS behavior,since DNS performance, manipulations, and subtle errors can havea major impact on a user’s network experience. We implementtwo levels of measurement, restricted and unrestricted. The formercomplies with Java’s default same-origin policy, which for mostJVMs allows the lookup of arbitrary names but only ever returns4This is the only significant performance limitation we faced usingJava compared with other programming languages.249

(www.yahoo.cmo), other top-level domains (www.nonce.org),non-web domains (fubar.nonce.com), and a domain internal toour site (nxdomain.netalyzr.edu). The applet also attemptsto contact the host returned for www.nonce.com on 80/tcp toobtain the imposed web content, which we log.DNS proxies, NATs, and Firewalls. Another set of DNS problems arise not due to ISP interference but misconfigured or misguided NATs and firewalls. If the applet operates unrestrictedly,it conducts the following tests to probe for these behaviors. First,it measures DNS awareness and proxying. Our servers answer requests for entropy.netalyzr.edu with a CNAME encodingthe response’s parameters, including the public address, UDP port,DNS transaction ID, and presence of 0x20 encoding. The appletsends such DNS requests directly to the back-end server, bypassingthe configured resolver. If it observes any change in the response(e.g., a different transaction ID or public address), then we havefound in-path DNS proxying. The applet makes another request directly to the back-end server, now with deliberately invalid format,to which our server generates a similarly broken reply. If blocked,we have detected a DNS-aware middlebox that prohibits non-DNStraffic on 53/udp.During beta-testing we added a series of tests for the presence ofDNS proxies in NAT devices. NATs often include such a proxy,returning via DHCP its local address to clients as the DNS resolver location if the NAT has not yet itself acquired an externalDNS resolver.5 Upon detecting the presence of a NAT, the applet assumes the gateway’s local address is the a.b.c.1 address inthe same /24 as the local IP address and sends it a query forentropy.netalyzr.edu. Any reply indicates with high probability that the NAT implements a DNS proxy. In addition, we canobserve to where it forwards the request based on the client IP address seen by our server.During our beta-testing we became aware of the possibility thatsome in-gateway DNS resolvers act as open relays for the outside (i.e., for queries coming from external sources), enablingamplification attacks [19] and other mischief. We thus added atest in which the the applet instructs the back-end measurementserver to send a UDP datagram containing a DNS request forentropy.netalyzr.edu to the public IP address of the clientto see if it elicits a resulting response at our DNS server.Name Lookup Test. Finally, if unrestricted the applet looks upa list of 70 common names, including major search engines, advertisement providers, financial institutions, email providers, ande-commerce sites. It uploads the results to our server, which thenperforms reverse lookups on the resulting IP addresses to check theforward lookups for consistency. This testing unearthed numerousaberrations, as discussed below.Authoritative section with a TTL of 0 or 1 seconds, respectively.A subsequent fetch of return false reveals whether the shortTTLs were respected. (We can’t simply use A records for this testbecause both the browser and end host may cache these recordsindependently.)We also use lookups of glue ns.nonce to measure requestlatency. If the DNS resolver accepts glue records, it then alsolooks up return false.nonce to check the latency for a cachedlookup. We repeat this process ten times and report the meanvalue to the server, and also validate that return false.noncewas fetched from the resolver’s cache rather than generating a newlookup.Finally, we test DNS port randomization. For unrestricted measurements, we perform queries for port.nonce, which the serveranswers by encoding in an A record the source port of the UDPdatagram that delivered the request. For restricted measurements,the applet sends several queries for dns rand set and thenchecks the result using a follow-on query that returns true if theports seen by our DNS server appeared non-monotone.EDNS, DNSSEC, and actual DNS MTU. DNS resolvers canadvertise the ability to receive large responses using EDNS [25],though they might not actually be capable of doing so. For example, some firewalls will not pass IP fragments, creating a de-factoDNS MTU of 1478 bytes for Ethernet framing. Other firewall devices may block all DNS replies greater than 512 bytes under theout-of-date assumption that DNS replies cannot be larger. Whiletoday small replies predominate, a lack of support for large repliesposes a significant concern for DNSSEC deployment.We measure the prevalence of this limitation by issuing lookups(i) to determine whether requests arrive indicating EDNS support,(ii) to measure the DNS MTU (for unrestricted measurements), and(iii) to check whether the resolver requests DNSSEC records. Asusual, the client returns the results for these via follow-on lookuprequests.That a DNS resolver advertises (via EDNS) the ability to receive large responses does not guarantee that it can actually doso. We test its ability by requesting names edns med

plet conducts test connections to various Netalyzr servers on the back-end, as well as DNS requests which are eventually re-ceived by the main Netalyzr DNS server on the front-end. We store the test results and raw network traffic for later analysis. Netalyzr presents a summary of the test results to the user. portsfromprevioussessions.