Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Understanding Network Protocols & Server Configuration

Understanding Network Protocols & Server Configuration

In the previous talk, we covered some easy wins with performance optimisation. In this talk, we’ll look at aspects of frontend performance that need to be tuned or fixed server-side, either via a web server, or operating system configuration.

We’ll look at HTTP level questions like:
* How does H2 prioritization work?
* How does H2 push work?
* What is QUIC (HTTP/3)?

We’ll also look at TCP level questions like:
* What are MTU, MSS, and TCP Windows and how do they affect performance?
* What are TCP slow-start and fast-open?
* How to use Wireshark to study network activity?

At the end of this session, attendees will understand how to debug low network level performance problems, and configure systems for performance improvements.

Philip Tellis

May 22, 2019
Tweet

More Decks by Philip Tellis

Other Decks in Technology

Transcript

  1. Network Protocols &
    Servers
    Extracting performance gains like a crazy person

    View full-size slide

  2. Philip Tellis
    Principal RUM Distiller @ Akamai
    Author of the OpenSource boomerang RUM
    library
    twitter:@bluesmoon ⦿ github:@bluesmoon
    speakerdeck:@bluesmoon

    View full-size slide

  3. Sort in ascending order of signal latency
    ● Electrons through copper
    ● Light through fibre
    ● Pulsars
    ● Station Wagons
    ● Smoke Signals

    View full-size slide

  4. Sort in ascending order of signal latency
    1. Pulsars (light through vacuum)
    2. Smoke Signals (light through air)
    3. Electrons through copper / Light through fibre
    4. Station Wagons — highest bandwidth loaded with

    View full-size slide

  5. TCP Handshake and Congestion Control
    https://www.cdnplanet.com/blog/tune-tcp-initcwnd-for-optimum-performance/

    View full-size slide

  6. initcwnd
    The Initial Congestion Window is the number of
    packets that a TCP peer waits for before sending an
    acknowledgement.
    Lower values increase latency, higher values
    increase probability of error.

    View full-size slide

  7. initcwnd
    @mobtec

    View full-size slide

  8. initcwnd
    With the current value set at 10, how many bytes can
    you send across before you have to wait for an ACK?

    View full-size slide

  9. https://www.imperva.com/blog/mtu-mss-explained/
    MTU & MSS

    View full-size slide

  10. Slow Start
    The kernel will reset Slow Start windows once a
    connection goes idle.
    net.ipv4.tcp_slow_start_after_idle=0
    https://hpbn.co/building-blocks-of-tcp/

    View full-size slide

  11. Then there’s Fast Open
    Client can send the first data packet along with the
    ACK
    net.ipv4.tcp_fastopen=3
    listen 80 fastopen=256
    https://lwn.net/Articles/508865/

    View full-size slide

  12. Wireshark Demo
    Doo Doo...

    View full-size slide

  13. H2 Prioritization
    ● Browser opens a single TCP connection to a domain regardless of
    number of resources
    ● Browser tells server about all required resources
    ● Browser includes hints based on dependencies
    ● Server can optionally decide which resources to send in parallel
    to the browser based on availability and hints

    View full-size slide

  14. H2 Push
    ● Client request an HTML page
    ● Server sends back page and other same-domain assets on the
    same response
    Link: ; rel=preload; as=style, ; rel=preload; as=script
    ● Pushing only the CSS seems to have the most benefit, but YMMV
    ● Definitely don’t overpush
    https://www.smashingmagazine.com/2017/04/guide-http2-server-push/

    View full-size slide

  15. QUIC / HTTP3
    ● Quick UDP Internet Connections
    ● Send HTTP over UDP rather than TCP
    ● Application layer takes care of ACKs and retries
    > performance.getEntriesByType("navigation")[0].nextHopProtocol
    "http/2+quic/43"

    View full-size slide

  16. Summary
    ● Split your bundles up into smaller chunks
    ● Use the Link header to push as it falls back to a preload hint
    ● Use wireshark to get detailed debugging about network
    behaviour
    ● Configure TCP Slow Start and Fast Open correctly.

    View full-size slide

  17. References
    ● High Performance Browser Networking (book)
    ● Tune Initial Congestion Window for optimal
    performance
    ● initcwnd settings of major CDNs
    ● Optimizing TCP slow start
    ● TCP Fast Open – Expediting web services
    ● Performance Impacts of H2 Prioritization
    ● Visualizing H2 Prioritization
    ● Complete guide to H2 Push
    ● H2 Push is tougher than I thought
    ● HTTP/3 is coming
    ● Transmission Control Protocol (TCP)
    ● The difference between TCP & UDP
    ● TCP Congestion Control
    ● Building blocks of TCP
    ● Maximum Transmission Unit (MTU)
    ● Maximum Segment Size (MSS)
    ● MTU & MSS explained
    ● Latency Improvements by Tuning initcwnd
    ● Wireshark
    ● HTTP/3 / IETF draft

    View full-size slide