Practice stage summary

11 min 9 concepts 9 figures

Stage 1 gave you the vocabulary of the path and stage 2 gave you the behaviour of the protocols on it. This stage turns both into operational judgement: where to put a control, where to draw a boundary, where to stand to watch, where an attack lands, and where a request actually terminates. Nothing here is a new layer of theory. It is the same request path, now treated as something you have to secure, segment, observe and defend while it is carrying real users.

One argument runs through every module. Position decides what you can control and what you can see. A control below the attack cannot read the payload; a control off the path sees nothing at all. A VPN that authenticates at the edge of a subnet has already granted everything inside it; an identity-aware proxy standing in front of one application has granted only that. A capture taken on the wire in 2026 proves far less than the same capture taken on the host, because QUIC and Encrypted Client Hello moved the interesting part out of view. A dashboard averaging every user is standing too far back to see the segment that is suffering. Every technique in this stage is a choice of vantage point, and the professional habit is to name the blind spot of the vantage you chose.

The sections follow the stage's teaching order, so you can read straight through to rebuild the stage, or jump to the concept you need. Each section links back to its module for the full treatment.

What you carry out of this stage

  • Place a security control at the layer where the risk actually forms, and state what that placement can and cannot see
  • Distinguish network-level reachability from per-request authorisation, and design a remote-access change that removes implicit trust instead of renaming the tunnel
  • Predict how far an incident spreads before and after a segmentation change, and name the rule drift that would quietly undo it
  • Map VPCs, security groups, overlays, CNIs and Kubernetes Services onto the LAN concepts already learned, and say which datapath a cluster is really using
  • Choose the observability signal that answers a given question fastest, then name that signal's blind spot before acting on it
  • Run a packet capture that is scoped, lawful and deleted, and say what a capture point can still prove now that most of the handshake is encrypted
  • Narrate an HTTP/2 Rapid Reset flood end to end and read attack-scale figures with the unit that makes them comparable
  • Trace a request through anycast, edge cache, origin shield and origin, and say where it terminated
  • Reconcile a healthy dashboard with an unhappy user by layered elimination, and write a diagnosis note that records the residual uncertainty

Four stages carry a learner from vocabulary to frontier judgement

Foundations, Applied and Practice run along the top row and Frontiers returns to the exam terminus, and each connector names what the stage before it hands on, so a stage taken out of order arrives without the language the next one assumes.

The course is one request path learned four times over, each pass deeper than the last, then examined: vocabulary, protocol behaviour, operational judgement, frontier readiness, two papers. Source: blueprint sections 1 and 4.

Four stages carry a learner from vocabulary to frontier judgement A serpentine map of five stage cards, module chips in brackets. Row one, left to right: Stage 1 Foundations, vocabulary of the path (IPv6, Wi-Fi, URL to first byte); Stage 2 Applied, the living protocols (TCP and congestion, DNS, TLS); Stage 3 Practice, securing and observing the path (zero trust, cloud, DDoS). The chain turns down the right into row two, read right to left: Stage 4 Frontiers, where the path is going (post-quantum, automation, measurement); then the Stage 5 exam and certification terminus, tinted red (revision guide, exam practice, mock exams). Connectors read shared vocabulary, protocol behaviour, operational judgement, frontier readiness, two papers one certificate. Stage 1Foundationsthe vocabulary of the pathIPv6Wi-FiURL to first byte Stage 2Appliedthe living protocolsTCP and congestionDNSTLS Stage 3Practicesecuring and observing thepathzero trustcloudDDoS Stage 4Frontierswhere the path is goingpost-quantumautomationmeasurement Stage 5Exam andcertificationFoundation andPractitioner papersrevision guideexam practicemock exams sharedvocabulary protocolbehaviour operationaljudgement frontier readinesstwo papers, one certificate

A control can only act on what its position lets it see

Security controls are not interchangeable, and their differences are mostly about where they sit. At layer 2, port security and 802.1X decide whether a device is allowed onto the network at all, which is the only place that question can be answered. At layers 3 and 4, access control lists, routing controls and stateful firewalls decide reachability from addresses, ports and connection state. At layer 7, a web application firewall or an intrusion detection or prevention system reads the payload and can act on what the request is trying to do.

The failure mode is placement, not product. A control below the attack cannot see the payload that carries it: a stateful firewall watching a permitted flow on port 443 has no opinion about the injection inside it. A control placed too high may not be on the path at all, which is how an expensive inspection appliance ends up blind to traffic that never crosses it. Before asking whether a control is good, ask what it can observe from where it stands and which traffic reaches it.

Defence in depth is often described as stacking controls, which invites buying more of the same. It works better as distribution: each control answers a threat the others structurally cannot see, so a gap in one is covered by a different vantage rather than a duplicate one. This stage's remaining modules keep testing that idea, starting with the module that abandons network location as the basis for trust altogether.

Controls belong where the risk is visible

Read across a threat row and the layers that cannot see it are tagged BLIND: lateral movement is blind at Layer 7 because the east-west traffic is encrypted, so identity is the only column left that can block it.

Place each control at the layer where the threat action is visible. A WAF cannot see a port scan; an ACL cannot see a SQL injection; both must be present, each at its own layer.

Place each control at the layer where the threat is visible A five-row by four-column threat-versus-layer matrix. Threats are Port scan, SQL injection, Lateral movement (SolarWinds, emphasis), Credential phishing, DNS exfiltration. Layers are Layer 2 (802.1X, port security), Layer 3/4 (ACL, stateful firewall), Layer 7 (WAF, IDS/IPS, DPI), Identity (zero trust, mTLS, RBAC). Each cell carries one of four status tags: BLOCKS (red fill), DETECTS (red soft), PARTIAL (white with red outline), BLIND (neutral). The SolarWinds row shows BLIND at Layer 7 due to encrypted east-west, with the only effective control sitting at the Identity column. THREAT ACTION Layer 2 802.1X, port security Layer 3 / 4 ACL, stateful firewall Layer 7 WAF, IDS/IPS, DPI Identity Zero trust, mTLS, RBAC Port scan TCP SYN sweep to discover open ports BLOCKS port security limits MAC BLOCKS ACL drops unsolicited SYN BLIND no payload to inspect DETECTS auth not yet attempted SQL injection Malicious payload inside HTTP body BLIND no L4+ visibility BLIND no payload visibility BLOCKS WAF signature or schema PARTIAL RBAC limits damage Lateral movement (SolarWinds) East-west traffic from compromised host PARTIAL VLAN scopes broadcast PARTIAL segment ACLs (often missing) BLIND encrypted east-west traffic BLOCKS zero trust + mTLS per call Credential phishing Attacker captures username/password BLIND off-network attack BLIND valid IP, valid port PARTIAL email filter, DMARC BLOCKS MFA, conditional access DNS exfiltration Data smuggled in DNS queries BLIND appears as normal UDP PARTIAL rate-limit egress 53 BLOCKS DNS DPI + DoH visibility PARTIAL PAM logs anomaly Lateral movement (SolarWinds row) needs Layer 7 plus Identity. Perimeter-only postures show BLIND in the centre column.

A VPN grants a network, ZTNA grants one application

NIST SP 800-207 defines zero trust as an architecture with no implicit trust granted on the basis of network location, with continuous evaluation and authorisation decided per request. Read carefully, that is a description of what a traditional VPN does wrong. A VPN authenticates the user once and then hands over reachability to a subnet, and reachability is exactly the implicit trust the definition removes. Lateral movement is not a VPN failure; it is the VPN working as designed, with an attacker holding the credential.

ZTNA replaces reachability with authorisation. An identity-aware proxy stands in front of each application and decides every request against identity, device state and policy, so a compromised session yields one application rather than a network. More than 70 percent of new remote-access deployments now choose ZTNA over a VPN default. The naming around it is where learners get lost: SASE is the networking half, meaning SD-WAN, plus the security service edge; SSE is that security half bought on its own. Over 80 percent of ZTNA is sold inside one of those bundles, which is a purchasing fact about the market rather than an architectural claim about your network.

The honest adoption path is staged. CISA's Zero Trust Maturity Model sets out pillars and maturity stages precisely because nobody replaces implicit trust in one project, and it gives you language for saying which decisions have moved and which have not. Zero trust is a property of how access decisions are made. It is not a product, and a tunnel with a new label on it still hands over the subnet.

A VPN grants a network; ZTNA grants one application

Both lanes start with the same user and the same three systems, but the VPN lane opens the finance database and build server nobody asked for while the ZTNA lane draws them denied, so authorisation is where blast radius is decided.

A VPN authenticates once and hands over a subnet; ZTNA authorises one application for one request, which is the implicit trust NIST SP 800-207 removes.

A VPN grants a network; ZTNA grants one application Two lanes side by side, each running four steps down the panel with labelled connectors. The left lane, VPN: reachability by location, authenticates a remote user once at the tunnel, puts that user on the internal subnet, makes everything on the subnet reachable including the finance database and build server the user never needed, and closes by stating that the blast radius is the subnet. The right lane, ZTNA: authorisation per request, evaluates the same user each request, has an identity-aware proxy decide per application, authorises only the HR portal, and shows a dashed denied connector to the other two systems. A callout states that NIST SP 800-207 removes implicit trust. VPN: reachability by location Remote user Authenticated once, at the tunnel, and then trusted. VPN concentrator Puts the user on the internal subnet and steps out of the way. Everything on that subnet HR portal: the one application the user actually needed. Finance database and build server: reachable anyway. Blast radius is the subnet One stolen session inherits every route the subnet has. tunnel up: the user is on the network an address inside the subnet, no app check lateral movement needs no new decision ZTNA: authorisation per request Remote user Evaluated again on every single request, never once. Identity-aware proxy Decides per application and per request (NIST SP 800-207). HR portal The one application this session is authorised to reach. Every later request is checked again on its own evidence. Finance database, build server Never routed to, never reachable, never even discovered. identity, device posture, request context authorised for this application only denied: no policy grants this request The difference in one sentence NIST SP 800-207 removes implicit trust: a request is authorised on its own evidence, not on where it came from. A VPN can only answer the question it was asked once, at the door.

Segmentation is decided before the incident, not during it

Segmentation is the only control that changes what an incident costs after the attacker is already inside. The same compromised host has network-wide reach in a flat design and constrained reach in a zoned one, and that difference was fixed by design decisions taken months earlier. VLANs and subnets are the classic tools, firewall zones and the demilitarised zone separate traffic crossing the perimeter from traffic moving between internal systems, and cloud security groups and microsegmentation push the boundary all the way down to the individual workload.

East-west traffic is where blast radius actually lives, and it is the traffic a perimeter design never inspects. A design that filters everything entering the estate and nothing moving within it has bought a strong front door for a building with no internal walls. Naming the direction of a flow before choosing a control is what stops that mistake.

The quiet failure is drift. Allow rules accumulate one exception at a time, each justified on the day, and a boundary nobody re-derives converges back towards flat without anyone deciding that it should. Treat the diagram as the design and the live rule base as the state, and re-derive reachability from the rules before claiming any blast radius. PCI DSS v4.0.1 makes the same point commercially: segmentation that is documented, enforced and verified can keep unrelated systems out of assessment scope, so a boundary that has drifted has silently widened what you must evidence. The next two modules are this idea wearing different clothes, first as cloud tenancy and later, in stage 4, as industrial zones.

Segmentation changes blast radius before the incident

The same patient zero and the same ten minutes reach sixteen hosts in the flat grid and four inside the Office VLAN, so the zone boundary drawn beforehand, not the response afterwards, is what sets the count.

Segmentation is a pre-incident decision that bounds blast radius. NotPetya hit Maersk's flat network and reached 45,000 endpoints in ten minutes. Zones would not have stopped the breach, only its spread.

Segmentation shrinks the blast radius before the attack Two panels showing the same 4x4 host grid. BEFORE (emphasis): all 16 hosts are infected from patient zero (top-left, marked X) via dashed red lines. Counter shows T+10 min 16 infected. Caption notes SMB/WMI open everywhere. AFTER: three zone boxes drawn around clusters (Office VLAN, Server VLAN, OT segment). Infection stays in Office VLAN; only 4 hosts infected. Counter shows T+10 min 4 infected. Caption notes the L3 gateway blocks east-west movement to Server and OT zones. BEFORE Flat network Patient zero reaches every host. SMB / WMI open everywhere. X T + 10 MIN 16 infected AFTER Zoned network Patient zero stays in Office VLAN. Server and OT zones blocked at L3 gateway. OFFICE VLAN SERVER VLAN OT SEGMENT X T + 10 MIN 4 infected

The cloud rebuilt the LAN in software, then shortened its datapath

A virtual private cloud is segmentation you rent, and a security group is a stateful firewall attached to a workload rather than to a wire. Conceptually nothing new happened when networks moved to the cloud; the knobs moved and the boundaries became API objects. That is good news for the learner, because every reachability question you could answer on a LAN transfers, provided you translate the vocabulary honestly rather than treating cloud networking as a separate discipline.

Overlays are where encapsulation from stage 1 returns with money attached. VXLAN and Geneve wrap a tenant frame inside a UDP envelope so a tenant segment can travel across a shared underlay that knows nothing about it. The cost is real: an extra header eats into the usable payload, and anything reading the underlay sees the envelope rather than the conversation. Capture points and firewall rules that assume they can read the inner header are the usual casualty.

Kubernetes puts the same ideas under new names. Every pod gets an IP address through a CNI plugin, Services provide stable names in front of moving pods, and the datapath decides how traffic actually gets there. It is no longer true that iptables routes service traffic: eBPF datapaths, with Cilium as the canonical example, have displaced kube-proxy and iptables in most new production clusters, with datapath throughput gains commonly cited in the 30 to 40 percent range. The deeper change is the match key. Network policy that matches on workload identity rather than on IP addresses survives pods being rescheduled, which is what makes segmentation meaningful in an environment where addresses are temporary.

Tenant networks travel inside UDP envelopes

The VXLAN or Geneve header, the outer UDP header and the outer IP header are added before the tenant frame travels and its addresses are never touched, so the envelope is paid for in usable payload and the tenant MTU is set below the underlay MTU rather than discovered later.

A tenant network travels inside a UDP envelope: the underlay IP packet carries an outer UDP header, a VXLAN or Geneve header naming the tenant, and the tenant frame itself, which costs usable payload (Cilium documentation).

Tenant networks travel inside UDP envelopes A layered stack read from the outside in. Four full width cards run down the page: the underlay IP packet addressed between fabric nodes, the outer UDP header whose destination port names the encapsulation, the VXLAN or Geneve header carrying the tenant network identifier, and the tenant frame itself, emphasised in red, with its addresses untouched. A labelled arrow between each pair reads in the order a receiver strips them, and a right hand tag on each card says who reads that layer. A second region below repeats the same four layers laid out in wire order, and a callout states the cost: less usable payload, and a tenant MTU that must be set below the underlay MTU. OUTERMOST Underlay IP packet Source and destination are the two fabric nodes, not the workloads the fabric reads this TRANSPORT Outer UDP header A destination port tells the receiving node which encapsulation this is the tunnel endpoint reads this OVERLAY VXLAN or Geneve header Carries the tenant network identifier, and Geneve adds typed options the tunnel endpoint reads this INNERMOST Tenant frame or packet Exactly what the workload sent, with its addresses untouched only the tenant reads this the fabric delivers it and the outer IP header comes off the UDP header comes off at the tunnel endpoint the overlay header names the tenant, then comes off the same four layers, laid out on the wire On the wire, left to right: the sender adds the outer headers, the receiver strips them. Outer IP fabric addresses Outer UDP port and length VXLAN or Geneve tenant network id Tenant frame or packet unchanged addresses The cost of the envelope Every tenant byte now travels behind an outer IP header, a UDP header and an overlay header.Set the tenant MTU below the underlay MTU, or path MTU discovery will find the limit for you, slowly.This is the encapsulation lesson from the foundations stage, applied to a fabric you share with others.

Pick the signal by the question, then name its blind spot

Logs, metrics and traces are the three pillars, and networks add their own: SNMP counters, NetFlow and sFlow records, synthetic checks and user reports. None of them is general-purpose truth. A counter tells you that something changed and nothing about who was involved. A flow record tells you which endpoints talked, how much and for how long, and nothing about what happened inside the request. A trace tells you where the time went across services and nothing about the packets underneath. Choosing by the question, rather than by what is already installed, is the whole discipline.

The tooling caught up in ways worth knowing. OpenTelemetry is the de facto correlation standard, one collection framework that lets a network signal be joined to an application trace instead of being read in a separate window by a separate team. eBPF flow visibility, Hubble being the widely deployed example, adds identity-aware flow records without deploying agents into every workload, which is what makes flow data usable in clusters where addresses change constantly.

Alert fatigue is a signal-selection failure rather than a volume problem. Alerts fired from a signal that cannot distinguish the failure you care about will always be noisy, whatever the threshold. The progression the module teaches survives every tooling generation: counters say something changed, flows say who was talking, traces say where the time went, and captures say what was actually on the wire, each at a higher cost and a narrower scope than the last.

Choose observability signals by the question they answer

Each question scores metrics, logs, traces, flow records and packet capture BEST, ok or weak, and where did time go rates metrics and flow records weak, so a dashboard full of healthy metrics can still hold no answer to the question being asked.

Pick the signal that best answers the question you actually have. Logs explain what happened. Metrics explain how often. Traces explain where time went. Flow records explain who talked to whom. Capture shows the wire.

Match the observability signal to the question you actually have A 6x5 question-to-signal matrix. Six questions (What happened, How often, Where did time go (emphasis), Who talked to whom, What is on the wire, How many users are affected) score five signals (Metrics, Logs, Traces, Flow records, Packet capture) as BEST (red filled), ok (red-soft outlined), or weak (neutral). The 'Where did time go' row is emphasised: traces are BEST, capture and logs are ok, metrics and flow are weak. A footer reminds the reader that each question lands on its strongest signal. QUESTION YOU HAVE Metrics Prometheus Logs Loki, ELK Traces OTel, Jaeger Flow records NetFlow / IPFIX Packet capture tcpdump, Wireshark What happened at this point in time? weak BEST ok weak weak How often, how fast, what is the rate? BEST ok ok ok weak Where did this request spend its time? weak ok BEST weak ok Who is talking to whom, in what volume? weak ok weak BEST ok What is actually on the wire at this hop? weak weak ok ok BEST How many users are seeing this right now? BEST ok ok weak weak No signal is BEST at everything. Build the platform so each question lands on its strongest signal.

A capture starts with a question and ends with deletion

Packet capture is the highest-fidelity evidence available and the highest-risk, because it carries whatever users were doing at the time. The discipline is therefore procedural, not technical. Write down the question before you start; scope with a BPF capture filter, which decides what is written and permanently discards the rest; bound the volume with a ring buffer; and delete when the question is answered. A display filter is a different tool for a different moment, narrowing what you look at within a capture you have already taken, which is why it can never undo an over-broad capture.

What a capture can prove has shrunk. A QUIC capture exposes almost nothing above the UDP header beyond connection identifiers and lengths, because the transport metadata that used to be readable in TCP now sits inside the encrypted envelope. Where Encrypted Client Hello is in use, the server name goes too. Taking a capture on the wire and expecting to see the handshake is a habit formed on an older network and applied to a 2026 one.

So the capture point moves rather than the tool. The host still sees plaintext before it is encrypted, a proxy sees what it terminates, the resolver sees the names it answered, and the edge sees what it served. Ask what this specific point can still prove before taking a single packet, and pick the point that answers your question with the least user data collected.

A packet capture starts with a question and ends with deletion

The filter is derived from the question, so the file holds only the packets that question needs and the traffic of uninvolved users never enters it, and recording the retention decision is what gets the capture deleted rather than left to sit.

Capture is a discipline. Write the question, then derive the smallest filter that answers it; capture in a ring buffer, stop when the question is answered, store or delete per policy.

Disciplined packet capture: one question, one filter, bounded run, deliberate retention A six-phase horizontal workflow. Each phase shows STEP, TITLE, QUESTION, ARTEFACT, and EXAMPLE. Step 1 Question (emphasis) writes the one-sentence claim. Step 2 Capture point names interface and side. Step 3 Filter (BPF) gives the smallest expression. Step 4 Run uses a ring buffer with bounded time. Step 5 Read with display filter searches the pcap. Step 6 Retain or delete (emphasis) records the retention decision. Five small red arrows connect each phase to the next. STEP 1 Question What boundary needs evidence? ARTEFACT One-sentence claim EXAMPLE Server returns FIN before body completes on /orders STEP 2 Capture point Where on the path? ARTEFACT Interface + side EXAMPLE eth0 on app server, ingress side STEP 3 Filter (BPF) Smallest expression that catches the event ARTEFACT BPF capture filter EXAMPLE tcp port 443 and host 93.184.216.34 STEP 4 Run (ring buffer) Bounded write, hard time limit ARTEFACT pcap file (rotating) EXAMPLE tcpdump -G 60 -W 5 -C 100 -w cap-%H%M.pcap STEP 5 Read with display filter Search post-capture, do not re-capture ARTEFACT Display-filter query EXAMPLE tcp.flags.fin == 1 && tcp.len > 0 STEP 6 Retain or delete Data minimisation per policy ARTEFACT Retention record EXAMPLE Delete after 30 d unless ticket cites it Each step produces an artefact you can hand off: the question, the filter, the pcap, the retention record.

Intended features carry unintended invitations

HTTP/2 stream cancellation was built for clients: a browser that no longer needs a response should be able to say so. Rapid Reset, CVE-2023-44487, disclosed in October 2023, turned that courtesy into a weapon. The attacker opens a stream, cancels it immediately and repeats, so the server begins work on request after request while the client pays almost nothing per request and never waits for a response. Threat modelling that only looks for bugs would never have found it, because nothing was broken. The feature did exactly what it promised.

Scale followed. Google mitigated 398 million requests per second, Cloudflare 201 million and AWS 155 million during the same disclosure. The edge absorbed most of it, because anycast capacity and protocol-aware mitigation are concentrated there, but origin operators still had to patch their own servers: mitigation somewhere on the path is not mitigation everywhere on it, and an origin reachable directly is an origin still exposed.

Reading the numbers is part of the skill. Requests per second, bits per second and packets per second describe different attacks that exhaust different resources, and a headline in one unit is not comparable with a headline in another. The same measurement literacy the course has been building applies here, along with the layered evidence drill: given the alert, ask what layer 3, layer 4 and layer 7 can each prove, and accept that most layers narrow the possibilities rather than concluding the case.

Cancelling work faster than servers can start it

The HTTP/2 loop runs on one connection with no new handshake, so the server completes work for streams already cancelled while its concurrency limit sees an idle connection, which is why the mitigation counts resets rather than streams.

HTTP/2 Rapid Reset (CVE-2023-44487, October 2023) opens and cancels streams in a loop, so a server does whole requests its concurrency limit never sees; defenders count resets, not streams.

Cancelling work faster than servers can start it A sequence diagram with two lifelines, an attacker client on the left and an HTTP/2 server on the right. A dashed loop frame labelled REPEAT ON ONE CONNECTION, NO NEW HANDSHAKE holds three arrows: HEADERS opens a stream and the server starts work, RST_STREAM cancels it before any response, and HEADERS opens the next stream. Two labelled arrows leave the loop. The left card lists the work each cancelled request still cost, ending with the concurrency limit never seeing the pressure. The emphasised right card gives the mitigation point: count resets per connection. A band below records the mitigated peaks of 398, 201 and 155 million requests per second. Attacker client HTTP/2 server REPEAT ON ONE CONNECTION, NO NEW HANDSHAKE HEADERS: open a new stream the server allocates state and starts the work one slot of the concurrency budget RST_STREAM: cancel it at once the slot is freed before any response is sent the server keeps working anyway HEADERS: open the next stream no handshake and no new connection is needed repeat thousands of times a second each cancelled stream still cost a full request so mitigation must count the cancellations What the cancelled request still cost Stream state allocated and headers decodedRequest routed and the handler startedBackend call issued, then thrown awayThe concurrency limit never sees the pressure Where the defence goes CVE-2023-44487, disclosed October 2023Count resets per connection, not just streamsDrop connections that cancel abusivelyEdges absorb it; origins still had to patch Peaks mitigated during the October 2023 disclosure Google 398 million rps Cloudflare 201 million rps AWS 155 million rps rps means requests per second: the unit matters when you read attack numbers

Most of what users call the server is the edge

Distance is latency, and no protocol improvement beats moving the content closer. Anycast makes that practical: the same address is announced from many locations and routing itself decides which point of presence answers, so users reach a nearby edge without knowing one exists. TLS terminates there, a cache hit is served there and never travels further, and only a miss continues through an origin shield to the origin. Much of the behaviour users attribute to your server is behaviour of an edge you may not operate.

Steering happens before the connection exists. HTTPS and SVCB records, defined in RFC 9460, let DNS carry protocol hints, address hints and connection parameters, which is the same mechanism stage 1 met at the start of the request path, now doing commercial work at the edge. Understanding it is what turns a CDN from a black box into a component whose decisions you can predict.

Two developments complicate the picture usefully. Edge compute platforms run application logic at the point of presence, so some responses are generated rather than cached, and origin logs will never show them. MASQUE standardises proxying inside the protocol itself, with CONNECT-UDP in RFC 9298 and CONNECT-IP in RFC 9484, deployed at population scale by services such as iCloud Private Relay. The troubleshooting consequence is concrete: the client IP address you see may belong to a relay, and the question of where a request terminated now has several plausible answers that you must distinguish with evidence.

The nearest edge answers, and only a miss travels on

The user never picks an edge and is never told which one answered, so route A can end at the point of presence while route B travels on to the shield and the origin, and the route rather than the server sets the wait.

Anycast gives every point of presence the same address, so routing hands the user to the nearest edge; only a cache miss travels on to the shield and then the origin (blueprint module P8).

The nearest edge answers, and only a miss travels on A route map read from top to bottom. The opening card is the user, who never picks an edge and is never told which one answered. A labelled arrow leads to a card stating that the same address is announced from every point of presence, so routing chooses the edge. A second labelled arrow reaches the emphasised card for the nearest point of presence, where TLS terminates and the edge cache is checked first. Two labelled arrows then branch: route A is a cache hit served from the edge, and route B is a cache miss that asks the origin shield, with a further arrow on to the origin. A closing card states that the route, not the server, decides the wait. WHERE IT STARTS One user asks for one object The browser holds a name and a single address for it. Nothing the user does picks an edge,and nothing in the reply says which edge answered. THE SETUP One address is announced from every edge A content network gives every point of presence the same address and lets routing decide, sothe user never picks an edge and never sees the choice being made. WHERE THE REQUEST LANDS The nearest point of presence answers Nearest means nearest in routing terms, not in miles. TLS terminates here, and the edgecache is checked before anything travels any further. ROUTE A Cache hit at the edge The object is already at this point ofpresence, so the reply travels one shorthop back to the user and nothing elsemoves. ROUTE B Cache miss asks the shield The edge asks one designated point ofpresence that stands in front of theorigin on behalf of all the other edges. ROUTE B Origin, the last resort Only a shield miss reaches the origin.The response fills the shield and theedge on the way back to the user. WHAT A LEARNER TAKES AWAY The route decides the wait, not the server Route A ends near the user. Route B is the only one that crosses the distance to the origin,and the shield is why many edges share a single origin fetch. one name, one address, wherever the user is anycast: the nearest announcement wins the object is in the edge cache the edge cache has no copy the shield has no copy either first byte from the edge first byte after the long path

When the dashboard and the user disagree, the dashboard is aggregated, not wrong

Green dashboards with unhappy users is the normal case rather than the exception. An average taken across every user hides the segment that is suffering, and a threshold set for the estate will not fire for a region, a tenant, a network path or a single access technology. The capstone starts from that reconciliation problem because it is the shape most real incidents arrive in, and because it forces the evidence discipline the whole course has been teaching.

The method is layered elimination from the symptom downwards, narrowing by routing, segmentation and connection state, and asking at each step which signal would separate the remaining possibilities most cheaply. This stage adds two branches the earlier method did not have. First, authorisation: is the user actually being permitted at the identity-aware proxy, or is a policy decision being read as a network failure? Second, the edge: did the failure happen at a point of presence or at the origin, and does the evidence you hold distinguish them at all?

The same evidence frequently supports two branches, and pretending otherwise is how incidents get misattributed with confidence. The professional move is to name the cheapest next test that separates them, run it, and then write a diagnosis note that records what the evidence showed, which branch it eliminated and what remains uncertain. That note is the deliverable. It is also the artefact that makes the next incident faster.

Healthy dashboards can hide affected user states

Both charts hold the same data: the aggregate sits at 0.42 s under the SLO while EU-N climbs to 0.93 s above it, so a green tile is evidence only that the affected segment was small enough to average away.

Aggregates hide minority failures by design. Slice every customer-impact metric by region, ISP, browser, tenant, and rollout cohort before you trust a green dashboard.

An aggregate metric green; the same metric sliced is red Two stacked time-series charts. The top chart Aggregate p95 latency shows a single line steady around 0.42 s well below the 0.5 s SLO; status tag GREEN. The bottom chart Same metric sliced by region shows five regional lines on the same axis. Four regions stay flat below SLO; the fifth EU-N (emphasis red) rises from 0.46 s to 0.93 s past the SLO line. Status tag WOULD BE RED. The same data, two views. The aggregate average hid the regional spike because EU-N is 6 percent of traffic. SLO line is dashed red at 0.5 s. ALL USERS, ALL REGIONS Aggregate p95 latency GREEN Single line below SLO. Dashboard green. No alert. SLO 0.5 s p95 (all) t-12 m now 5 REGIONS X 12 MINUTES Same metric, sliced by region WOULD BE RED EU-N spikes to 0.93 s; aggregate hides it because EU-N is 6% of traffic. SLO 0.5 s EU-W US-E US-W AP-S EU-N (affected) t-12 m now Same data, two views. The slice surfaces the failure; the aggregate hides it. Alert on slices, not on rollups.

The traps this stage warns against

  • Rolling out a VPN to all remote staff and reporting that the organisation has moved to zero trust.

    Instead: A VPN authenticates once and then grants network-level reachability, which is precisely the implicit trust NIST SP 800-207 removes. ZTNA authorises per application and per request through an identity-aware proxy. A tunnel with a new name still hands over the subnet.

  • Debugging a Kubernetes Service by reading iptables chains, because that is how kube-proxy has always worked.

    Instead: eBPF datapaths, Cilium being the canonical example, have displaced kube-proxy and iptables in most new production clusters, so the rules you are reading may not be on the path at all. Establish which CNI and which datapath the cluster runs before choosing the tool.

  • Treating the padlock in the address bar as evidence that a site is safe, and teaching users to check for it.

    Instead: TLS authenticates the server name and encrypts the channel. It says nothing about the intent behind that name, and phishing sites hold perfectly valid certificates. Teach users to read the name, not the padlock.

  • Escalating to the network team every time a capture or a graph shows packet loss.

    Instead: Loss, or ECN marking where it is available, is the congestion signal that loss-based control depends on, so a healthy path under load is expected to show some. L4S and BBR decouple low latency from loss, and adding bandwidth does not fix bufferbloat. Ask what the loss is signalling before calling it a fault.

  • Reading the segmentation diagram as a description of the current network.

    Instead: The diagram is the design; the live firewall rule base is the state. Allow rules accumulate one exception at a time until a boundary nobody re-checks has drifted back towards flat. Re-derive reachability from the running rules before claiming any blast radius, and remember that drift widens audit scope as well as risk.

  • Comparing denial-of-service attacks by their headline number without checking the unit.

    Instead: Requests per second, bits per second and packets per second exhaust different resources and are not interchangeable. Rapid Reset was a request flood: Google mitigated 398 million requests per second, Cloudflare 201 million and AWS 155 million. Those figures say nothing about link capacity.

  • Taking a capture on the wire and expecting to see the handshake, the server name and the request.

    Instead: A QUIC capture exposes little above the UDP header beyond connection identifiers and lengths, and Encrypted Client Hello removes the server name as well. Move the capture point to the host, the proxy, the resolver or the edge, and decide in advance what that point can still prove.

Core distinctions

  • ZTNA is not a VPN: a VPN authenticates once and grants subnet reachability, while ZTNA authorises a single application on every request through an identity-aware proxy
  • SASE versus SSE: SASE is the networking half, meaning SD-WAN, combined with the security service edge, while SSE is that security half bought on its own
  • VXLAN is not a VLAN: a VLAN separates traffic inside one switched network, while VXLAN wraps the tenant frame inside a UDP envelope so the segment can cross a shared underlay
  • A flow is not a trace: a flow record says which endpoints talked, how much and for how long, while a distributed trace says where the time went inside one request across services
  • A capture filter is not a display filter: a capture filter decides what is written to disk and permanently discards the rest, while a display filter only narrows what you are looking at in a capture you already hold
  • Requests per second versus bits per second: a request flood exhausts server work and a volumetric flood exhausts link capacity, so the two numbers describe different attacks and cannot be compared
  • North-south versus east-west traffic: north-south crosses the perimeter and is what a traditional firewall inspects, while east-west moves between internal workloads and is where blast radius is actually decided
  • Zero trust is not a product: it is a property of how access decisions are made, which is why a maturity model describes decisions rather than purchases
  • A cache hit is not an origin request: a hit terminates at the point of presence and never reaches you, while a miss travels on through the origin shield to the origin, which is why origin logs and user reports can disagree without either being wrong
  • Reachability is not authorisation: reachability says a packet can arrive, authorisation says this identity may perform this action on this request, and confusing them is what made lateral movement cheap

That is the Practice stage in one place. Controls placed where the risk forms rather than where the budget went, access authorised per request instead of granted per subnet, segmentation decided before an incident and re-derived from live rules rather than diagrams, cloud tenancy and overlays as the LAN rebuilt in software with a shorter datapath underneath, observability signals chosen by the question and used with their blind spots named, captures scoped and deleted in a world where the wire has gone dark, protocol features read as attack surfaces with their scale figures given units, and the edge understood as the place most requests actually end. The stage's scenario practice now puts that judgement under pressure with situations where the evidence is partial and two branches remain open, which is the state stage 4 assumes when it turns to what is changing next.

Sources and further reading

  • NIST SP 800-207, Zero Trust ArchitectureThe definition behind this stage's access teaching: no implicit trust from network location, continuous evaluation, and authorisation decided per request.
  • CISA Zero Trust Maturity ModelThe staged adoption roadmap used instead of a single migration project, and the source for reading maturity claims without vendor framing.
  • Cilium documentationThe eBPF datapath that displaced kube-proxy and iptables, plus the identity-aware flow visibility behind the cloud and observability sections.
  • OpenTelemetryThe correlation framework that lets network signals be joined to application traces rather than read in isolation.
  • CISA alert on HTTP/2 Rapid ResetCVE-2023-44487, disclosed October 2023, the protocol-abuse case behind this stage's denial-of-service teaching.
  • Cloudflare technical breakdown of Rapid ResetThe stream-cancellation mechanism step by step, and the mitigation figures behind the protocol-abuse section.
  • RFC 9849, Encrypted Client HelloWhy a capture taken on the wire in 2026 no longer reveals the server name, and why capture points moved to the host and the proxy.