Entire Linux Network stack diagram (2024)

(zenodo.org)

279 points | by hhutw 7 hours ago ago

26 comments

  • elevation 5 hours ago

    This place needs more of this kind of documentation.

    I failed to use IP tables for years. I bought books. I copied recipes from blog posts. Nothing made sense, everything I did was brittle. Until I finally found a schematic showing the flowchart of a packet through the kernel, which gives the exact order that each rule chain is applied, and where some of the sysctl values are enforced. All of a sudden, I could write rules that did exactly what I wanted, or intelligently choose between rules that have equivalent behaviors in isolation but which could have different performance implications.

    After studying the schematic, every would just work on the first try. A good schematic makes a world of difference!

  • hhutw 5 hours ago

    For anyone who is interested, the author of this diagram also made a Linux disk I/O diagram (https://zenodo.org/records/15234151). These diagrams are from his book Operativni sustavi i računalne mreže - Linux u primjeni (https://zenodo.org/records/17371946)

    Shout out to the brilliant and generous work of the author!

    • N-Krause 4 hours ago

      Do you know if there is a English version of the book?

      • hhutw 4 hours ago

        To my knowledge, sadly I can't find an English version of it. I'm too wishing for a future English version so that I can read it. But I guess it will be a lot of work to translate it into English.

    • stuxnet79 3 hours ago

      The Disk I/O diagram is excellent, thank you for sharing.

  • jruohonen 5 hours ago

    That's pretty cool!

    If someone could program a visualization tool that would generate such diagrams automatically, that would be even cooler (but likely a mission impossible).

  • rfmoz 4 hours ago
  • mixedbit 3 hours ago

    For containers you will also have own TCP/IP stack similarly to what is shown for VM on the diagram, this is done when a container uses slirp4netns to provide networking. An alternative is to use kernel TCP/IP stack, this is done when pasta is used for networking, diagram on this page shows the details:https://passt.top/passt/about/.

  • RossBencina 2 hours ago

    Any recommendations for a map of Linux user-space network management options?

  • roomey 5 hours ago

    I'm not sure if this takes into account para-virtualized networks on VMs, ie. VMware vm's with "virtual" hardware access

    It's been a few years for me tho, so perhaps it's covered with the VM section.

    Lovely diagram, thanks for sharing it!

    • SSLy an hour ago

      These usually attach in the bridge or NAT flow.

  • colordrops 6 hours ago

    I'm surprised to realize I'm familiar with most of the stack just from decades of Linux usage and no formal study of the stack.

  • billfruit 5 hours ago

    Is it possible we see the diagram as an svg? I am seeing it only as embedded in the pdf, and really difficult to read .

    • makkes 3 hours ago

      Click on "Download" below the embedded PDF viewer and you'll get the PDF.

  • nolist_policy 2 hours ago

    qdisc is too small in this diagram and to easy to miss.

  • ee99ee 6 hours ago

    wow

  • snvzz 4 hours ago

    Fools admire complexity.

    • 9dev 3 hours ago

      There’s complication, and there’s complexity. Fools admire complication, engineers design solutions to complex problems. This is a diagram explaining the latter.

      • KronisLV 2 hours ago

        I think it was put pretty well by describing things as accidental complexity (of which you want as little as possible) and essential complexity, which is inherent to the problem domain that you're working with and which there is no way around for.

        The same thing could sometimes fall into different categories as well - like going for a microservices architecture when you need to serve about 10'000 clients in total vs at some point actually needing to serve a lot of concurrent requests at any given time.