{"id":85,"date":"2026-05-25T10:06:37","date_gmt":"2026-05-25T14:06:37","guid":{"rendered":"https:\/\/beckesch.dev\/ops\/?p=85"},"modified":"2026-05-25T10:13:49","modified_gmt":"2026-05-25T14:13:49","slug":"learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab","status":"publish","type":"post","link":"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/","title":{"rendered":"Learning Modern Networking: From IP Basics To Spine\u2011Leaf Fabrics With containerlab"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">I just finished a deeply hands-on networking course that took me from basic IP fundamentals all the way to building a BGP\u2011driven spine\u2011leaf fabric with containerlab and Nokia SR Linux. What started as \u201clet\u2019s recall how IP and routing work\u201d ended with me automating data\u2011center\u2011style topologies and understanding why this architecture is the de\u2011facto standard in modern clouds.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why This Course Was Different<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Unlike many theoretical networking resources, this course was built entirely around labs running in containerlab on my own machine. Every concept\u2014IP addressing, routing decisions, BGP policies, spine\u2011leaf fabrics\u2014was immediately tested in a live environment with real containers, real CLIs, and real break\/fix scenarios.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The structure was incremental: start with simple point\u2011to\u2011point links, then add hosts and routers, then multiple routers with static routes, then dynamic routing with BGP, and finally a spine\u2011leaf fabric that looks very close to what you\u2019d find in a modern data center.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Networking Foundations In Practice<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The early modules revisited core IP and routing concepts, but in a very lab\u2011driven way. I worked with:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IP addressing and subnetting on small topologies, including host and network bits, netmasks, and basic reachability checks.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/742e5f70-f634-4db2-addb-cdd9ad92a462\/04-IP-Fundamentals-7.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>ARP and how hosts discover MAC addresses before sending packets to a default gateway.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/742e5f70-f634-4db2-addb-cdd9ad92a462\/04-IP-Fundamentals-7.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>Route tables on Linux and SR Linux nodes, focusing on connected routes, static routes, and the idea of a default route as the \u201cgateway of last resort.\u201d<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/0f30ddbe-bc33-4b74-9782-eaf43e0535b5\/05-Routing-Basics-10.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of treating these as abstract OSI\u2011layer theory, the course constantly tied them to specific lab topologies built in containerlab, e.g. a four\u2011node linear setup with two routers and two Alpine Linux hosts.<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/742e5f70-f634-4db2-addb-cdd9ad92a462\/04-IP-Fundamentals-7.md\"><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Getting Productive With containerlab<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">containerlab was the backbone of the entire course, and it was one of the most valuable things I learned. I started with a tiny lab: two Nokia SR Linux containers linked via a single interface, defined in a&nbsp;<code>lab.clab.yml<\/code>&nbsp;file and deployed with a single&nbsp;<code>clab deploy<\/code>. From there, we extended to:<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/6dec0c96-0569-44fc-9fa8-cac7da344f24\/03-Containerlab-Primer-4.md\"><\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Multi\u2011node topologies (e.g. three SR Linux routers in a line, or mixed SR Linux plus Alpine hosts).<\/li>\n\n\n\n<li>Automated link creation, management networks, and lab directories that containerlab generates behind the scenes.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/6dec0c96-0569-44fc-9fa8-cac7da344f24\/03-Containerlab-Primer-4.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>Helpful commands like\u00a0<code>containerlab inspect<\/code>\u00a0for inventory and addresses, and\u00a0<code>containerlab graph<\/code>\u00a0to visualize the topology or export it as PNG\/Draw.io.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/6dec0c96-0569-44fc-9fa8-cac7da344f24\/03-Containerlab-Primer-4.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">I also ran into real\u2011world issues, such as SSH key handling inside the SR Linux containers and how containerlab manages SSH client configs for each lab. Debugging that forced me to explore bind mounts, container internals, and the configuration directories that containerlab creates alongside each topology file.<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/6dec0c96-0569-44fc-9fa8-cac7da344f24\/03-Containerlab-Primer-4.md\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Overall, the course made containerlab feel like a practical everyday tool for quickly spinning up realistic network labs, not just something to demo once and forget.<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/6dec0c96-0569-44fc-9fa8-cac7da344f24\/03-Containerlab-Primer-4.md\"><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Automation With Ansible And gNMIc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Beyond containerlab itself, the course introduced two important automation angles: Ansible and gNMIc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On the Ansible side, I learned how to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Build simple inventories and host\u2011specific variables describing interface addresses and static routes for each SR Linux router.<\/li>\n\n\n\n<li>Use Jinja2 templates to generate JSON\u2011RPC payloads for SR Linux, including interface and static route configurations.<\/li>\n\n\n\n<li>Apply those configurations via\u00a0<code>ansible.builtin.uri<\/code>, then verify state by querying back the configured interfaces and routes.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Later, with BGP and more complex topologies, we used gNMIc as a programmatic interface into SR Linux, pushing BGP policies and reading back routing state. That included:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Installing gNMIc and connecting to SR Linux using TLS\u2011secured gNMI endpoints.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/1686cac2-c196-4220-92fb-b35564c4db8f\/06-Dynamic-Routing-BGP-13.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>Using JSON (and sometimes YAML) representations of SR Linux configuration to define routing policies and BGP sessions.<\/li>\n\n\n\n<li>Pushing complete BGP configs to multiple routers from the command line with\u00a0<code>gnmic set --request-file<\/code>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The combination of containerlab plus Ansible\/gNMIc made the labs feel very close to how you\u2019d manage real production network devices in a modern DevOps\/SRE environment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">From Static Routing To BGP<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Once the fundamentals and automation basics were in place, the course ramped up into routing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We started using static routes on SR Linux to connect multiple networks, introducing:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Next\u2011hop groups and how SR Linux models static routes through them.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/0f30ddbe-bc33-4b74-9782-eaf43e0535b5\/05-Routing-Basics-10.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>Candidate vs running configuration on SR Linux, and the explicit commit workflow.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/0f30ddbe-bc33-4b74-9782-eaf43e0535b5\/05-Routing-Basics-10.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>The principle of \u201clongest prefix match\u201d and why specific routes override a default route.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/0f30ddbe-bc33-4b74-9782-eaf43e0535b5\/05-Routing-Basics-10.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Then the course moved to BGP as a dynamic routing protocol:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>BGP\u2019s role as the protocol that \u201cruns the Internet\u201d and, increasingly, data\u2011center and Kubernetes networking.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/1686cac2-c196-4220-92fb-b35564c4db8f\/06-Dynamic-Routing-BGP-13.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>The idea of autonomous systems (ASNs) and eBGP sessions between routers in different administrative domains.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/1686cac2-c196-4220-92fb-b35564c4db8f\/06-Dynamic-Routing-BGP-13.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>Basic BGP operations\u2014neighbor establishment, state transitions to \u201cestablished,\u201d and what it means when sessions are stuck in other states.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/1686cac2-c196-4220-92fb-b35564c4db8f\/06-Dynamic-Routing-BGP-13.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">We configured BGP on SR Linux to advertise connected and learned prefixes, then validated connectivity with ping and traceroute between hosts at the edges of the topology. This included looking at BGP route tables, attributes, and policies that control what gets exported or imported.<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/1686cac2-c196-4220-92fb-b35564c4db8f\/06-Dynamic-Routing-BGP-13.md\"><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Spine\u2011Leaf: A Modern Data Center Fabric<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The most exciting part for me was the final section on spine\u2011leaf architecture, which is essentially a folded Clos network adapted for modern data centers and cloud environments. This topology is designed for massive east\u2011west traffic\u2014service\u2011to\u2011service and server\u2011to\u2011server flows\u2014rather than just north\u2011south client\u2011to\u2011server traffic.<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/dadfc4ed-d044-484b-bfb4-5f4beb2548ca\/07-Spine-Leaf-Architecture-16.md\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the lab, we built a classic two\u2011tier spine\u2011leaf fabric:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Leaf switches at the edge, where servers or server\u2011like hosts connect.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/dadfc4ed-d044-484b-bfb4-5f4beb2548ca\/07-Spine-Leaf-Architecture-16.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>Spine switches in the middle, providing a high\u2011bandwidth, non\u2011blocking core.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/dadfc4ed-d044-484b-bfb4-5f4beb2548ca\/07-Spine-Leaf-Architecture-16.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>Every leaf connected to every spine, so any leaf\u2011to\u2011leaf path is a consistent, low\u2011latency sequence of leaf \u2192 spine \u2192 leaf.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/dadfc4ed-d044-484b-bfb4-5f4beb2548ca\/07-Spine-Leaf-Architecture-16.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The course highlighted key properties that explain why spine\u2011leaf has become a standard in data centers and clouds:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>It scales horizontally very well: you can add more leafs to attach more servers, or add more spines to increase fabric bandwidth, without redesigning the entire topology.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/dadfc4ed-d044-484b-bfb4-5f4beb2548ca\/07-Spine-Leaf-Architecture-16.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>It provides many equal\u2011cost paths between leafs, which BGP and ECMP can exploit for load\u2011balancing and resilience.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/dadfc4ed-d044-484b-bfb4-5f4beb2548ca\/07-Spine-Leaf-Architecture-16.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>It is optimized for heavy east\u2011west traffic patterns generated by microservices, distributed storage, and modern application architectures.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/dadfc4ed-d044-484b-bfb4-5f4beb2548ca\/07-Spine-Leaf-Architecture-16.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">We then used BGP across the fabric\u2014following recommendations like RFC 7938\u2014to build the control plane:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Spines sharing the same ASN and acting as eBGP peers to each leaf.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/dadfc4ed-d044-484b-bfb4-5f4beb2548ca\/07-Spine-Leaf-Architecture-16.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>BGP policies on leafs: permit connected host subnets, import all, and control which prefixes are exported.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/dadfc4ed-d044-484b-bfb4-5f4beb2548ca\/07-Spine-Leaf-Architecture-16.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>Enabling multipath so that traffic can use multiple equal\u2011cost BGP paths through different spines.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/dadfc4ed-d044-484b-bfb4-5f4beb2548ca\/07-Spine-Leaf-Architecture-16.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, we tested end\u2011to\u2011end reachability between hosts connected to different leaf switches, observing how BGP learned and propagated the various 10.20.x.0\/24 host networks across the fabric. Seeing a full spine\u2011leaf fabric come to life in containerlab, controlled by BGP and gNMIc, was a great way to connect theory with an architecture I usually only see in diagrams and vendor whitepapers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Break\/Fix And Troubleshooting Mindset<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Another aspect I appreciated was the deliberate \u201cbreak\/fix\u201d exercises. Instead of only happy\u2011path labs, the course included scenarios like:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A stopped container that makes a node unreachable even though the topology file looks correct.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/6dec0c96-0569-44fc-9fa8-cac7da344f24\/03-Containerlab-Primer-4.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>A missing link in the topology, where interfaces stay down even though both nodes are running.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/6dec0c96-0569-44fc-9fa8-cac7da344f24\/03-Containerlab-Primer-4.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li>Routing issues that require looking at route tables, BGP neighbors, and exported routes, not just ping output.<a href=\"https:\/\/ppl-ai-file-upload.s3.amazonaws.com\/web\/direct-files\/attachments\/81145566\/1686cac2-c196-4220-92fb-b35564c4db8f\/06-Dynamic-Routing-BGP-13.md\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These exercises encouraged a structured troubleshooting workflow: check container state, inspect topology with&nbsp;<code>containerlab inspect<\/code>, verify interfaces and routing on SR Linux, and only then adjust configs or redeploy. That\u2019s exactly the mindset you need in real operations and SRE work.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How This Helps Me As A DevOps\/SRE<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">From a DevOps and SRE perspective, this course sits right at the intersection of networking and automation:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>I\u2019m now comfortable using containerlab to quickly spin up realistic network topologies for experiments, regression tests, or design validation.<\/li>\n\n\n\n<li>I have a practical feel for how IP, routing, and BGP behave on real devices, rather than treating the network as a black box under Kubernetes or cloud abstractions.<\/li>\n\n\n\n<li>I got hands\u2011on practice with Ansible and gNMIc for network automation, which is directly transferable to production infrastructure.<\/li>\n\n\n\n<li>Most importantly, I now understand spine\u2011leaf as more than a buzzword: I\u2019ve built it, configured BGP on it, and debugged it in a lab environment.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If you work in cloud, platform engineering, or SRE, this kind of lab work is incredibly valuable\u2014it bridges the gap between \u201cI know that AWS uses spine\u2011leaf\u201d and \u201cI can reason about why a particular path is chosen and how to troubleshoot when something is off.\u201d<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I just finished a deeply hands-on networking course that took me from basic IP fundamentals all the way to building a BGP\u2011driven spine\u2011leaf fabric with containerlab and Nokia SR Linux. What started as \u201clet\u2019s recall how IP and routing work\u201d ended with me automating data\u2011center\u2011style topologies and understanding why this architecture is the de\u2011facto standard &#8230; <a title=\"Learning Modern Networking: From IP Basics To Spine\u2011Leaf Fabrics With containerlab\" class=\"read-more\" href=\"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/\" aria-label=\"Read more about Learning Modern Networking: From IP Basics To Spine\u2011Leaf Fabrics With containerlab\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":88,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[8,9,6,13,1],"tags":[],"class_list":["post-85","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","category-learning","category-linkedin-post","category-network","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Learning Modern Networking: From IP Basics To Spine\u2011Leaf Fabrics With containerlab - Ralf Beckesch - Devops<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Learning Modern Networking: From IP Basics To Spine\u2011Leaf Fabrics With containerlab - Ralf Beckesch - Devops\" \/>\n<meta property=\"og:description\" content=\"I just finished a deeply hands-on networking course that took me from basic IP fundamentals all the way to building a BGP\u2011driven spine\u2011leaf fabric with containerlab and Nokia SR Linux. What started as \u201clet\u2019s recall how IP and routing work\u201d ended with me automating data\u2011center\u2011style topologies and understanding why this architecture is the de\u2011facto standard ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/\" \/>\n<meta property=\"og:site_name\" content=\"Ralf Beckesch - Devops\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-25T14:06:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-25T14:13:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/beckesch.dev\/ops\/wp-content\/uploads\/2026\/05\/a8fe7d94-f8ce-43ba-9189-ee2c17c75940-1024x1024.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"rb\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"rb\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/2026\\\/05\\\/25\\\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/2026\\\/05\\\/25\\\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\\\/\"},\"author\":{\"name\":\"rb\",\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/#\\\/schema\\\/person\\\/90c6e9e800fff61c7ceb65be6ab43b69\"},\"headline\":\"Learning Modern Networking: From IP Basics To Spine\u2011Leaf Fabrics With containerlab\",\"datePublished\":\"2026-05-25T14:06:37+00:00\",\"dateModified\":\"2026-05-25T14:13:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/2026\\\/05\\\/25\\\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\\\/\"},\"wordCount\":1433,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/#\\\/schema\\\/person\\\/90c6e9e800fff61c7ceb65be6ab43b69\"},\"image\":{\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/2026\\\/05\\\/25\\\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/a8fe7d94-f8ce-43ba-9189-ee2c17c75940.png\",\"articleSection\":[\"Devops\",\"Learning\",\"LinkedIn Post\",\"Network\"],\"inLanguage\":\"en-CA\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/beckesch.dev\\\/ops\\\/2026\\\/05\\\/25\\\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/2026\\\/05\\\/25\\\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\\\/\",\"url\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/2026\\\/05\\\/25\\\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\\\/\",\"name\":\"Learning Modern Networking: From IP Basics To Spine\u2011Leaf Fabrics With containerlab - Ralf Beckesch - Devops\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/2026\\\/05\\\/25\\\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/2026\\\/05\\\/25\\\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/a8fe7d94-f8ce-43ba-9189-ee2c17c75940.png\",\"datePublished\":\"2026-05-25T14:06:37+00:00\",\"dateModified\":\"2026-05-25T14:13:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/2026\\\/05\\\/25\\\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\\\/#breadcrumb\"},\"inLanguage\":\"en-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/beckesch.dev\\\/ops\\\/2026\\\/05\\\/25\\\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-CA\",\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/2026\\\/05\\\/25\\\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\\\/#primaryimage\",\"url\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/a8fe7d94-f8ce-43ba-9189-ee2c17c75940.png\",\"contentUrl\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/a8fe7d94-f8ce-43ba-9189-ee2c17c75940.png\",\"width\":1254,\"height\":1254},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/2026\\\/05\\\/25\\\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Learning Modern Networking: From IP Basics To Spine\u2011Leaf Fabrics With containerlab\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/#website\",\"url\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/\",\"name\":\"Ralf Beckesch - Devops\",\"description\":\"Evolving from linux freak to devops and cloud-native engineer\",\"publisher\":{\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/#\\\/schema\\\/person\\\/90c6e9e800fff61c7ceb65be6ab43b69\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-CA\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/#\\\/schema\\\/person\\\/90c6e9e800fff61c7ceb65be6ab43b69\",\"name\":\"rb\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-CA\",\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/cropped-fotor-ai-20231018165442.jpg\",\"url\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/cropped-fotor-ai-20231018165442.jpg\",\"contentUrl\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/cropped-fotor-ai-20231018165442.jpg\",\"width\":1534,\"height\":307,\"caption\":\"rb\"},\"logo\":{\"@id\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/cropped-fotor-ai-20231018165442.jpg\"},\"sameAs\":[\"https:\\\/\\\/beckesch.dev\\\/ops\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/ralf-beckesch\\\/\"],\"url\":\"https:\\\/\\\/beckesch.dev\\\/ops\\\/author\\\/rbadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Learning Modern Networking: From IP Basics To Spine\u2011Leaf Fabrics With containerlab - Ralf Beckesch - Devops","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/","og_locale":"en_US","og_type":"article","og_title":"Learning Modern Networking: From IP Basics To Spine\u2011Leaf Fabrics With containerlab - Ralf Beckesch - Devops","og_description":"I just finished a deeply hands-on networking course that took me from basic IP fundamentals all the way to building a BGP\u2011driven spine\u2011leaf fabric with containerlab and Nokia SR Linux. What started as \u201clet\u2019s recall how IP and routing work\u201d ended with me automating data\u2011center\u2011style topologies and understanding why this architecture is the de\u2011facto standard ... Read more","og_url":"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/","og_site_name":"Ralf Beckesch - Devops","article_published_time":"2026-05-25T14:06:37+00:00","article_modified_time":"2026-05-25T14:13:49+00:00","og_image":[{"width":1024,"height":1024,"url":"https:\/\/beckesch.dev\/ops\/wp-content\/uploads\/2026\/05\/a8fe7d94-f8ce-43ba-9189-ee2c17c75940-1024x1024.png","type":"image\/png"}],"author":"rb","twitter_card":"summary_large_image","twitter_misc":{"Written by":"rb","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/#article","isPartOf":{"@id":"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/"},"author":{"name":"rb","@id":"https:\/\/beckesch.dev\/ops\/#\/schema\/person\/90c6e9e800fff61c7ceb65be6ab43b69"},"headline":"Learning Modern Networking: From IP Basics To Spine\u2011Leaf Fabrics With containerlab","datePublished":"2026-05-25T14:06:37+00:00","dateModified":"2026-05-25T14:13:49+00:00","mainEntityOfPage":{"@id":"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/"},"wordCount":1433,"commentCount":0,"publisher":{"@id":"https:\/\/beckesch.dev\/ops\/#\/schema\/person\/90c6e9e800fff61c7ceb65be6ab43b69"},"image":{"@id":"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/#primaryimage"},"thumbnailUrl":"https:\/\/beckesch.dev\/ops\/wp-content\/uploads\/2026\/05\/a8fe7d94-f8ce-43ba-9189-ee2c17c75940.png","articleSection":["Devops","Learning","LinkedIn Post","Network"],"inLanguage":"en-CA","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/","url":"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/","name":"Learning Modern Networking: From IP Basics To Spine\u2011Leaf Fabrics With containerlab - Ralf Beckesch - Devops","isPartOf":{"@id":"https:\/\/beckesch.dev\/ops\/#website"},"primaryImageOfPage":{"@id":"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/#primaryimage"},"image":{"@id":"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/#primaryimage"},"thumbnailUrl":"https:\/\/beckesch.dev\/ops\/wp-content\/uploads\/2026\/05\/a8fe7d94-f8ce-43ba-9189-ee2c17c75940.png","datePublished":"2026-05-25T14:06:37+00:00","dateModified":"2026-05-25T14:13:49+00:00","breadcrumb":{"@id":"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/#breadcrumb"},"inLanguage":"en-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/"]}]},{"@type":"ImageObject","inLanguage":"en-CA","@id":"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/#primaryimage","url":"https:\/\/beckesch.dev\/ops\/wp-content\/uploads\/2026\/05\/a8fe7d94-f8ce-43ba-9189-ee2c17c75940.png","contentUrl":"https:\/\/beckesch.dev\/ops\/wp-content\/uploads\/2026\/05\/a8fe7d94-f8ce-43ba-9189-ee2c17c75940.png","width":1254,"height":1254},{"@type":"BreadcrumbList","@id":"https:\/\/beckesch.dev\/ops\/2026\/05\/25\/learning-modern-networking-from-ip-basics-to-spine-leaf-fabrics-with-containerlab\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/beckesch.dev\/ops\/"},{"@type":"ListItem","position":2,"name":"Learning Modern Networking: From IP Basics To Spine\u2011Leaf Fabrics With containerlab"}]},{"@type":"WebSite","@id":"https:\/\/beckesch.dev\/ops\/#website","url":"https:\/\/beckesch.dev\/ops\/","name":"Ralf Beckesch - Devops","description":"Evolving from linux freak to devops and cloud-native engineer","publisher":{"@id":"https:\/\/beckesch.dev\/ops\/#\/schema\/person\/90c6e9e800fff61c7ceb65be6ab43b69"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/beckesch.dev\/ops\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-CA"},{"@type":["Person","Organization"],"@id":"https:\/\/beckesch.dev\/ops\/#\/schema\/person\/90c6e9e800fff61c7ceb65be6ab43b69","name":"rb","image":{"@type":"ImageObject","inLanguage":"en-CA","@id":"https:\/\/beckesch.dev\/ops\/wp-content\/uploads\/2025\/09\/cropped-fotor-ai-20231018165442.jpg","url":"https:\/\/beckesch.dev\/ops\/wp-content\/uploads\/2025\/09\/cropped-fotor-ai-20231018165442.jpg","contentUrl":"https:\/\/beckesch.dev\/ops\/wp-content\/uploads\/2025\/09\/cropped-fotor-ai-20231018165442.jpg","width":1534,"height":307,"caption":"rb"},"logo":{"@id":"https:\/\/beckesch.dev\/ops\/wp-content\/uploads\/2025\/09\/cropped-fotor-ai-20231018165442.jpg"},"sameAs":["https:\/\/beckesch.dev\/ops","https:\/\/www.linkedin.com\/in\/ralf-beckesch\/"],"url":"https:\/\/beckesch.dev\/ops\/author\/rbadmin\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/beckesch.dev\/ops\/wp-content\/uploads\/2026\/05\/a8fe7d94-f8ce-43ba-9189-ee2c17c75940.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/beckesch.dev\/ops\/wp-json\/wp\/v2\/posts\/85","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beckesch.dev\/ops\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beckesch.dev\/ops\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beckesch.dev\/ops\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/beckesch.dev\/ops\/wp-json\/wp\/v2\/comments?post=85"}],"version-history":[{"count":1,"href":"https:\/\/beckesch.dev\/ops\/wp-json\/wp\/v2\/posts\/85\/revisions"}],"predecessor-version":[{"id":89,"href":"https:\/\/beckesch.dev\/ops\/wp-json\/wp\/v2\/posts\/85\/revisions\/89"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/beckesch.dev\/ops\/wp-json\/wp\/v2\/media\/88"}],"wp:attachment":[{"href":"https:\/\/beckesch.dev\/ops\/wp-json\/wp\/v2\/media?parent=85"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beckesch.dev\/ops\/wp-json\/wp\/v2\/categories?post=85"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beckesch.dev\/ops\/wp-json\/wp\/v2\/tags?post=85"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}