By the end of module 5 you knew how to design the addressing of a network like Grupo Meridiano's end to end. But a well-designed network fails too: Marta can't reach the intranet, a ping gets lost halfway, DNS resolves strangely. In this module we are going to turn what you know into a diagnostic method, and the first step is putting the toolkit in order. The tools in this lesson have already made scattered appearances throughout the course (ping in module 2, arp -a with Ethernet, nslookup with DNS, ss with sockets, ip route with TCP/IP); now we sharpen them: which options matter, how to read their outputs like a professional and — above all — when to use each one. We will always work Windows and Linux in parallel, because at Meridiano (and at almost any company) both coexist: Marta's and Ana's PCs are Windows, the intranet server (192.168.10.10) is Linux.
Contents
- Checking your own configuration:
ipconfig /allvsip addr+ip route pingin depth: options, TTL, loss and jittertraceroute/tracert: seeing the path hop by hoparp -a: confirming layer 2nslookupanddig: interrogating DNS with precisionnetstat/ss: an operational recapcurl: the application-layer probe- Final table: symptom → first tool
Checking your own configuration: ipconfig /all vs ip addr + ip route
Before blaming the network, look at your own configuration. It is the equivalent of checking that the car has fuel before calling the tow truck. On Windows, the command is ipconfig /all (the /all matters: without it you won't see the MAC, the DHCP server or the DNS servers).
On Marta's PC, in Valencia:
C:\> ipconfig /all
Ethernet adapter Ethernet0:
Connection-specific DNS Suffix . : grupomeridiano.example
Physical Address. . . . . . . . . : 5C-26-0A-4B-91-D3
DHCP Enabled. . . . . . . . . . . : Yes
IPv4 Address. . . . . . . . . . . : 192.168.10.21(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Lease Obtained. . . . . . . . . . : Monday, July 13, 2026 8:02:11 AM
Lease Expires . . . . . . . . . . : Tuesday, July 14, 2026 8:02:11 AM
Default Gateway . . . . . . . . . : 192.168.10.1
DHCP Server . . . . . . . . . . . : 192.168.10.1
DNS Servers . . . . . . . . . . . : 192.168.10.1A line-by-line reading, in the order a professional looks at it:
- IPv4 Address: is it the expected one?
192.168.10.21is Marta's DHCP reservation (tied to her MAC5c:26:0a:4b:91:d3, as we saw in module 2). If a169.254.x.xshowed up here (APIPA, module 5), the diagnosis is nearly done: DHCP didn't answer. - Subnet Mask:
/24, correct. Remember module 5's misconfigured/25mask: a wrong mask produces very confusing asymmetric failures. - Default Gateway: without it, there is no way out of the local network. Empty or wrong = Jon's case in module 3.
- DNS Servers: if the IP and the gateway are fine but "the Internet doesn't work", this field is the usual suspect.
- DHCP Enabled / lease: tells you whether the IP is dynamic and when it expires. Useful for knowing whether an
ipconfig /release+/renewmakes sense.
On Linux, the same information is split across two commands we already introduced in module 4. On the intranet server:
joan@intranet:~$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
link/ether 00:1a:4d:7e:22:0f brd ff:ff:ff:ff:ff:ff
inet 192.168.10.10/24 brd 192.168.10.255 scope global eth0
valid_lft forever preferred_lft forever
joan@intranet:~$ ip route
default via 192.168.10.1 dev eth0
192.168.10.0/24 dev eth0 proto kernel scope link src 192.168.10.10state UPandLOWER_UP: the interface is administratively up and has physical link (cable/carrier signal). IfLOWER_UPis missing, you are looking at a layer 1 problem — Ana's cable from module 3.inet 192.168.10.10/24: IP and mask in CIDR notation, on a single line.default via 192.168.10.1: the default route, i.e. the gateway.- DNS on Linux is checked separately:
cat /etc/resolv.conf(orresolvectl statuson systems with systemd-resolved).
| What to check (in order) | Windows | Linux |
|---|---|---|
| Physical link? | "Media disconnected" in ipconfig |
LOWER_UP in ip link / ip addr |
| Correct IP? (APIPA?) | ipconfig /all → IPv4 Address |
ip addr → inet |
| Correct mask? | Subnet Mask | the /NN after the IP |
| Gateway configured? | Default Gateway | ip route → default via |
| DNS configured? | DNS Servers | /etc/resolv.conf |
That order is no accident: it is "layer 1 first" (module 3) applied to your own machine.
ping in depth: options, TTL, loss and jitter
ping (module 2) sends ICMP Echo Requests and waits for Echo Replies. It is the connectivity tool par excellence, but its output says far more than "responds / doesn't respond".
Key difference between systems: Windows sends 4 packets and stops; Linux sends indefinitely until you press Ctrl+C.
| I need... | Windows | Linux |
|---|---|---|
| Continuous ping | ping -t 192.168.10.10 |
ping 192.168.10.10 (already is) |
| A specific packet count | ping -n 10 ... |
ping -c 10 ... |
| Packet size | ping -l 1400 ... |
ping -s 1400 ... |
| Don't fragment (MTU testing) | ping -f -l 1472 ... |
ping -M do -s 1472 ... |
Continuous ping (-t) is gold for intermittent problems: you leave it running while you reproduce the failure. And the size + don't-fragment options are exactly what we used in module 4 to diagnose the MTU problem on the VPN with Bilbao.
Marta pings the intranet and Jon's PC in Bilbao:
C:\> ping -n 4 192.168.10.10
Pinging 192.168.10.10 with 32 bytes of data:
Reply from 192.168.10.10: bytes=32 time<1ms TTL=64
Reply from 192.168.10.10: bytes=32 time<1ms TTL=64
Reply from 192.168.10.10: bytes=32 time=1ms TTL=64
Reply from 192.168.10.10: bytes=32 time<1ms TTL=64
Ping statistics for 192.168.10.10:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 1ms, Average = 0ms
C:\> ping -n 4 192.168.20.7
Reply from 192.168.20.7: bytes=32 time=38ms TTL=126
Reply from 192.168.20.7: bytes=32 time=41ms TTL=126
Reply from 192.168.20.7: bytes=32 time=39ms TTL=126
Reply from 192.168.20.7: bytes=32 time=112ms TTL=126The expert reading:
- TTL=64 from the intranet: recall from module 2 that every router subtracts 1 from the TTL. The typical initial values are 64 (Linux), 128 (Windows) and 255 (network equipment). A TTL of 64 with nothing subtracted tells you two things: the server is on your own network (0 hops) and it is probably Linux.
- TTL=126 from Bilbao: 128 − 126 = 2 hops → Jon's PC is Windows (it started at 128) and there are 2 routers in between (Valencia's and Bilbao's, through the VPN tunnel). The TTL lets you infer hops and operating system without touching the destination.
- Times: <1 ms on the LAN is normal; ~40 ms to Bilbao over the VPN, reasonable. Look at the fourth packet: 112 ms. That variation between times is called jitter, and it is what ruins video calls and VoIP even when the average looks fine.
- Packet loss: 0% is what you expect on a LAN. A sustained 2–5% already degrades TCP noticeably (retransmissions) and wrecks real-time traffic. We will see it "in person" in lesson 06-02.
And the most important warning of all: "Request timed out" does NOT prove the host is down. Many firewalls (including Windows' own default on "public" networks) filter ICMP: the host is alive and serving, but doesn't answer pings. We saw this in module 3 with the "closed port vs dead host" case. Practical rule: a ping that responds confirms connectivity; a ping that doesn't respond is only a clue to be cross-checked (for instance, with curl against the actual service, below).
traceroute/tracert: seeing the path hop by hop
A new tool. When a ping fails "halfway there", you want to know where the route breaks. tracert (Windows) and traceroute (Linux) show you every intermediate router.
How it works is a brilliant idea built on module 2's TTL:
- It sends a packet with TTL=1. The first router receives it, subtracts 1, hits 0, discards it… and sends back an ICMP "Time Exceeded" with its own IP as the sender. First hop identified.
- It sends another with TTL=2: it dies at the second router, which gives itself away the same way.
- Repeat with TTL=3, 4, 5… until the packet reaches the destination, which replies normally.
sequenceDiagram
participant M as Marta (.10.21)
participant R1 as Valencia router (.10.1)
participant R2 as Bilbao router (.20.1)
participant J as Jon (.20.7)
M->>R1: TTL=1 packet
R1-->>M: ICMP Time Exceeded (I am .10.1)
M->>R2: TTL=2 packet (passes through R1)
R2-->>M: ICMP Time Exceeded (I am .20.1)
M->>J: TTL=3 packet
J-->>M: normal reply (destination reached)
Marta's trace toward Bilbao (over the VPN) and toward the Internet:
C:\> tracert -d 192.168.20.7
Tracing route to 192.168.20.7 over a maximum of 30 hops:
1 <1 ms <1 ms <1 ms 192.168.10.1
2 37 ms 39 ms 38 ms 192.168.20.1
3 39 ms 40 ms 41 ms 192.168.20.7
Trace complete.
C:\> tracert -d 8.8.8.8
1 <1 ms <1 ms <1 ms 192.168.10.1
2 9 ms 8 ms 10 ms 10.140.2.1
3 11 ms 12 ms 11 ms 81.46.15.77
4 * * * Request timed out.
5 17 ms 16 ms 17 ms 8.8.8.8How to read it:
-d(Windows) /-n(Linux) disables reverse DNS resolution for each hop: the trace runs much faster, and when diagnosing that is almost always what you want.- Toward Bilbao there are only 3 hops: the VPN tunnel encapsulates the traffic, so every Internet router physically sitting between Valencia and Bilbao is invisible — the tunnel behaves like a virtual cable between .10.1 and .20.1. It matches what we deduced from the ping's TTL=126 (2 routers).
- Toward the Internet you see the gateway, the ISP (
10.140.2.1, a private address inside the carrier's network — CG-NAT, module 5) and public hops. - The asterisks
*at hop 4 do not mean a fault: that router simply doesn't answer the probes (by policy, or because its control plane deprioritizes them), but it forwards the traffic — the proof is that hop 5 responds. Worry when the asterisks appear at one hop and at every hop after it to the end: there the route really does break, and the last hop that responded is your best clue to where the problem is. - A technical detail that sometimes matters: Windows probes with ICMP Echo; Linux, by default, with UDP to high ports (use
traceroute -Ito force ICMP). Some firewalls treat each type differently, so the same trace can differ between systems.
When to use traceroute? When end-to-end connectivity fails or is slow and you need to locate the segment: if the trace from Valencia to Bilbao dies after 192.168.10.1, the problem is in the VPN or beyond; if not even hop 1 shows up, the problem is local.
arp -a: confirming layer 2
You already know ARP from module 2: it translates IPs into MACs within the local network. As a diagnostic tool, arp -a answers a very specific question: "has my machine managed to talk at layer 2 with that neighbor?"
C:\> arp -a
Interface: 192.168.10.21 --- 0xb
Internet Address Physical Address Type
192.168.10.1 a4-91-b1-0c-77-2e dynamic
192.168.10.10 00-1a-4d-7e-22-0f dynamic
192.168.10.255 ff-ff-ff-ff-ff-ff static- There is an entry with a MAC for the gateway (.10.1) and the intranet (.10.10): ARP resolution worked, so layer 1 and layer 2 up to those machines are confirmed. If a ping to .10.10 failed but its ARP entry existed and was recent, the problem would be above layer 2 (a firewall, for example).
- On Linux,
ip neighalso shows the state:REACHABLE(confirmed),STALE(old, will be revalidated) orFAILED/INCOMPLETE. - An incomplete entry (Linux:
INCOMPLETE; Windows: the entry simply never appears after attempting the ping) means the question "who has 192.168.10.10?" was asked and nobody answered: the host is powered off, unplugged or on another VLAN (remember: Meridiano's guest VLAN 20 doesn't see ARP from the corporate VLAN 10). - An important nuance: ARP only works for your own subnet. For 192.168.20.7 you will never see its MAC in Valencia; you will see traffic headed to your gateway's MAC.
Field trick: arp -a immediately after a failed ping to a neighbor is the fastest way to separate "layer 2 problem" from "host that filters ICMP".
nslookup and dig: interrogating DNS with precision
nslookup appeared in module 2 with the A/AAAA/CNAME/MX record types. As a diagnostic tool, its value lies in two abilities: asking for specific record types and asking a specific server, bypassing your local configuration.
C:\> nslookup intranet.grupomeridiano.example
Server: router.grupomeridiano.example
Address: 192.168.10.1
Name: intranet.grupomeridiano.example
Address: 192.168.10.10
C:\> nslookup intranet.grupomeridiano.example 8.8.8.8
Server: dns.google
Address: 8.8.8.8
*** dns.google can't find intranet.grupomeridiano.example:
Non-existent domainInterpretation — and this is a pattern you will see a thousand times:
- The first two lines of each query tell you who you are asking. The first query uses the configured DNS (Meridiano's router, which resolves the internal zone).
- Adding an IP at the end (
... 8.8.8.8) forces the query to that server. That Google doesn't knowintranet.grupomeridiano.examplehere is normal: it is an internal name that only exists in the company's DNS. But this technique is the key to answering "is the problem my DNS or the name in general?": if your DNS fails and 8.8.8.8 resolves, the problem is your DNS server, not the domain. - For a specific type:
nslookup -type=MX grupomeridiano.example.
On Linux, the professionals' tool of choice is dig, which is more detailed:
joan@intranet:~$ dig intranet.grupomeridiano.example A +noall +answer
intranet.grupomeridiano.example. 3600 IN A 192.168.10.10- The
3600is the record's TTL (yes, another TTL, distinct from IP's!): the seconds the answer may live in caches. It explains the classic "I changed the DNS but some users go to the old server and others to the new one": caches holding the old record will keep serving it until its TTL runs out. - Syntax for a specific server in dig:
dig @8.8.8.8 grupomeridiano.example MX. - On Windows,
ipconfig /displaydnsshows the local DNS cache andipconfig /flushdnsempties it — the first remedy when you suspect a stale cached answer.
netstat/ss: an operational recap
These two we worked through in depth in lesson 04-04 (sockets, LISTEN/ESTABLISHED/TIME_WAIT, EADDRINUSE); here we just pin down their role in the toolkit: they answer "is the service listening, and who is connected?". The invocations you should have in muscle memory:
# Linux — is the intranet listening on 443?
joan@intranet:~$ ss -tlnp | grep 443
LISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=812,fd=6))
# Windows — which connections do I have open, and who opened them?
C:\> netstat -ano | findstr ESTABLISHEDMnemonic for ss -tlnp: tcp, listening, numeric, processes. If a curl to a server fails, the check on the server side is always this one: without a socket in LISTEN, there is nothing to connect to. The fine detail (states, queues, TIME_WAIT) is in 04-04.
curl: the application-layer probe
Everything above checks layers 1–4. But "the intranet is down" can be a layer 7 failure with every lower layer in perfect shape. curl makes real HTTP/HTTPS requests from the terminal (it ships with Linux and with Windows 10+), and with -v (verbose) it shows you each phase separately — exactly the DNS→TCP→TLS→HTTP flow we dissected in module 4:
joan@intranet:~$ curl -v https://intranet.grupomeridiano.example/api/proyectos
* Host intranet.grupomeridiano.example:443 was resolved.
* IPv4: 192.168.10.10 ← DNS phase: resolved
* Trying 192.168.10.10:443...
* Connected to intranet.grupomeridiano.example (192.168.10.10) port 443
← TCP phase: handshake OK
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* Server certificate:
* subject: CN=intranet.grupomeridiano.example
* expire date: Mar 2 11:00:00 2027 GMT ← TLS phase: valid certificate
> GET /api/proyectos HTTP/1.1
> Host: intranet.grupomeridiano.example
< HTTP/1.1 200 OK ← HTTP phase: the server responds
< Content-Type: application/json
[{"id":1,"nombre":"Migración ERP Ondarreta"},{"id":2,"nombre":"Web Ayto. Mislata"}]The diagnostic power lies in where the output stops:
curl -v stops at... |
Guilty layer | Next tool |
|---|---|---|
Could not resolve host |
DNS | nslookup/dig |
Trying ... then timeout |
Network/route (or a firewall dropping packets) | ping, tracert |
Connection refused |
Service down (closed port) | ss -tlnp on the server |
| TLS certificate error | TLS (expired, name mismatch) | inspect the certificate |
| Connects but HTTP 4xx/5xx | The application itself | application logs |
Notice that Connection refused (an immediate RST: there is a host, there is no service) versus a timeout (nobody answers) is the same "closed port vs dead host" distinction from module 3 — curl serves it to you pre-labeled.
Final table: symptom → first tool
| Symptom | First tool | What it will tell you |
|---|---|---|
| "I have no network" (nothing works) | ipconfig /all / ip addr |
Link? APIPA? gateway? — layer 1 first |
| "I can't reach one specific machine" | ping then arp -a (if it's a neighbor) |
Connectivity; layer 2 confirmation |
| "I can reach some places but not others" | tracert/traceroute |
At which hop the route breaks or degrades |
| "Names don't resolve" or resolve strangely | nslookup/dig (trying another server) |
My DNS, the cache, or the domain? |
| "The web/API fails" with the network apparently fine | curl -v |
Which phase (DNS/TCP/TLS/HTTP) breaks |
| "The service refuses connections" (on the server) | ss -tlnp / netstat -ano |
Is it in LISTEN? Which process? |
| "It's slow / cuts out now and then" | ping -t (jitter, loss) + tracert |
Where the loss/latency shows up |
Common Mistakes and Tips
- Concluding "host down" because it doesn't answer pings. Firewalls filter ICMP all the time. Always cross-check with the actual service:
curlto the application's port. - Forgetting the
/allinipconfig. Without it you don't see DHCP, DNS or the MAC — which is exactly what usually matters. - Panicking over stray asterisks in a traceroute. A silent hop with later hops responding is cosmetic. What matters is the point from which everything is asterisks to the end.
- Ignoring the TTL in ping replies. It's free information: hops to the destination and a hint about the remote operating system.
- Testing DNS only against the configured server. A query to a second server (
nslookup name 8.8.8.8) separates "my DNS is failing" from "the domain is failing" in seconds. - Looking in
arp -afor the MAC of a machine on another subnet. ARP doesn't cross routers; for Bilbao you will only ever see your gateway's MAC. - Running a single ping and deciding. Intermittent problems demand
ping -t(or-c 100) while watching loss and jitter, not one lone ping.
Exercises
- From Marta's PC,
ping 192.168.10.10returns replies withTTL=64, andping 192.168.20.1returns replies withTTL=254. Reason through each case: how many routers are in between, and what hint do you have about the kind of system responding? - Ana can't open
https://intranet.grupomeridiano.example. She runscurl -vand the output stops after* Trying 192.168.10.10:443...with an immediateConnection refused. Her colleague declares: "the server is down, it isn't even powered on". Is he right? What exactly does that message indicate, and what command would you run on the server to confirm it? - A
tracert -d 192.168.20.7from Valencia shows: hop 1192.168.10.1OK; hops 2 through 30, all asterisks. On another day, the same trace showed hop 2192.168.20.1and hop 3 the destination. Which segment would you flag as broken, and why is the healthy hop 1 a valuable clue?
Solutions
- Intranet, TTL=64: the typical initial TTLs are 64, 128 or 255. Receiving exactly 64 means 0 routers in between (it is on the same subnet — consistent: .10.21 and .10.10 share the /24) and suggests a Linux/Unix system (initial 64). Bilbao router, TTL=254: it started at 255 (usual for network equipment) and 1 was subtracted once → 1 router in between (Valencia's, .10.1; the destination itself doesn't count its own hop). Note how the same received TTL value is interpreted relative to the most likely initial value.
- He is not right.
Connection refusedmeans the host responded — with an RST: there is a live machine at 192.168.10.10, but no process is listening on port 443 (service stopped, or listening on another port). If the server were powered off, the symptom would be a timeout (nobody answers), not an immediate refusal. Confirmation on the server:ss -tlnp | grep 443— if there is noLISTENline, the intranet's nginx needs to be started/checked. It is module 3's "closed port vs dead host" distinction. - The break is after the Valencia gateway and before the Bilbao router: that is, in the VPN tunnel (or in the Internet connection carrying it). The healthy hop 1 is valuable because it rules out the entire local segment: Marta's PC, the cabling, the switch and the gateway all work; there is no point checking anything on the Valencia LAN. Unlike a stray asterisk, here the asterisks run from hop 2 to the very end: the route genuinely breaks. Next step: check the VPN tunnel status on the .10.1 router.
Conclusion
Your toolkit is now in order: ipconfig/ip addr + ip route for your own configuration (layer 1 first), ping read with an expert eye (TTL, loss, jitter, and its great limitation: filtered ICMP), traceroute to locate the failing segment by recycling the TTL trick, arp -a as layer 2 confirmation, nslookup/dig to interrogate DNS with a surgeon's precision, ss/netstat for the sockets, and curl -v as the application-layer probe that splits DNS, TCP, TLS and HTTP into visible phases. With the symptom → tool table you have the opening reflex for almost any support call. But all these utilities share one limit: they tell you that something fails and where, but not always why — they work on summaries and inferences. When you need the whole truth, you have to go down to the level where nothing can lie: seeing the packets one by one. That — Wireshark, tcpdump and traffic analysis, legal and ethical framework included — is the next lesson.
Networking Course
Module 1: Introduction to Networks
Module 2: Communication Protocols
- Introduction to Communication Protocols
- Data Link Protocols
- Network Protocols
- Transport Protocols
- Application Protocols
Module 3: The OSI Model
- Introduction to the OSI Model
- Physical Layer
- Data Link Layer
- Network Layer
- Transport Layer
- Session Layer
- Presentation Layer
- Application Layer
Module 4: The TCP/IP Model
- Introduction to the TCP/IP Model
- Network Access Layer
- Internet Layer
- Transport Layer
- Application Layer
- OSI vs TCP/IP Comparison
