Learning the OSI Model in Practice with FILIUS

FILIUS Lab Notebook — Switching, Routing & the OSI Model
Lab Notebook · Networking Fundamentals

Learning the OSI Model in Practice with FILIUS

FILIUS is a free network simulator: drag devices onto a canvas, cable them together, and watch real packets move. This notebook walks the lab in nine stages — from two bare computers to two routed subnets exchanging application-layer traffic — and traces what happens on the wire at each step.

9 stages Switching & routing Packet-capture replay Subnet reachability tool
filius — lab-overview.sh
[0]

What is FILIUS?

FILIUS is a network simulator built for learning. It strips a real network down to something you can see and click: drag devices — computers, switches, routers — onto a canvas, connect them with cables, then run the simulation and watch packets actually move between them.

Why it's usefulMost networking concepts are invisible in real life — you send an email and it just works. FILIUS makes the invisible part visible: every ARP lookup, every ping, every hop through a router shows up as a line you can inspect.
[1]

Basic networking: two computers

The smallest possible network. Enter Design mode with the hammer tool, drag two PCs onto the canvas, then use the cable tool to link them directly.

  1. Click the Hammer tool to enter Design mode
  2. Drag two PCs onto the canvas
  3. Click the Cable icon, then click each PC in turn to link them
PC 1192.168.0.10
PC 2192.168.0.11
Netmask (both)255.255.255.0

Right-click a PC and choose Configure to set its IP address and netmask — putting both machines on the same subnet. Checking "Use IP address as name" saves time labeling devices as the lab grows.

Cabling noteTwo PCs wired directly to each other would traditionally need a cross-over cable, though most modern NICs auto-detect (auto MDI/MDIX) and work with either type.

Press Run to leave Design mode and start the simulation.

[2]

Ping and observe OSI layers

Install an Echo server on PC 1 (Software Installation → Echo server → Apply changes), start it on port 55555, then install a Command Line on PC 2 and ping across the link.

/> ping 192.168.0.10
PING 192.168.0.10 (192.168.0.10)
From 192.168.0.10: icmp_seq=1 ttl=64 time=22ms
From 192.168.0.10: icmp_seq=2 ttl=64 time=117ms
From 192.168.0.10: icmp_seq=3 ttl=64 time=113ms
From 192.168.0.10: icmp_seq=4 ttl=64 time=112ms
--- 192.168.0.10 packet statistics ---
4 packet(s) transmitted, 4 packet(s) received, 0% packet loss

Right-click PC 2 and choose Show data exchange to open the packet log for this link. Run the capture below to see what it actually records.

Data exchange — 192.168.0.11 ↔ 192.168.0.10

No capture yet — click "Run capture" to simulate the ping.
What to noticeThe very first two entries are always ARP — a broadcast search for "who has this IP" and the reply that maps it to a MAC address. Only after that does the actual ICMP echo request/reply exchange begin.
[3]

Add a third computer → add a switch

Add a server at 192.168.0.12 and connect all three devices to a switch instead of direct cables.

A switch's whole job is learning: it builds a table mapping which MAC address sits on which port. The first frame to a given address is slower, since the switch has to flood it out every port while it figures out where things are. After that first lookup, forwarding gets faster because the switch already knows the answer.

[4]

Echo server and client communication

Install and start an Echo server on the server device on port 55555, then install a Generic Client on a PC and send it a few messages.

  • This is where the transport layer starts to matter — a client-server exchange touches more layers than a bare ping does
  • The data exchange window will still show ARP first, since a device always needs a MAC address before it can send anything
  • Check the packet window after every step — later actions (like an email) generate noticeably more traffic than a ping ever does
[5]

Two networks + one router — an intentional failure

Build a second subnet of three computers and connect the two networks with one router.

Subnet A192.168.0.10–.12
Subnet B192.168.1.10–.12
Router → Subnet A192.168.0.1
Router → Subnet B192.168.1.1
This is supposed to failTry ping 192.168.1.10 from 192.168.0.10 — it fails on purpose. Neither PC has a gateway configured yet, so neither one knows where to hand off traffic bound for a network it isn't directly connected to.
[6]

Fix communication using gateways

Set each subnet's gateway to its router interface, then repeat the same ping.

Subnet A gateway192.168.0.1
Subnet B gateway192.168.1.1

The ping should succeed now. Watch the timing too — the first packet is usually the slowest, since the switches' forwarding tables start empty and everything downstream of them still has to learn. Later packets move faster once those tables fill in.

Try it — can these two devices reach each other directly?

[7]

Final step: trace end-to-end communication

Put a client on 192.168.1.10 and point it at the echo server on 192.168.0.12 — across the router. Send a message, then open the data exchange window and trace the whole path.

SUBNET A · 192.168.0.0/24 SUBNET B · 192.168.1.0/24 PC .0.10 SW1 SRV .0.12 — echo server :55555 RTR .0.1 ↔ .1.1 SW2 PC .1.10 — client

This one trace proves the whole chain: the message starts at the application layer on the client, the OS wraps and routes it toward the configured gateway, the router forwards it into Subnet A, and it lands on the echo server on a completely different network — all of it visible, packet by packet, inside the data exchange window.

[8]

Summary

Everything this lab demonstrates, condensed.

FILIUS LAB NOTEBOOK · OSI MODEL IN PRACTICE · SWITCHING & ROUTING