LCA ICT Specialism study materials
LCA ICT Specialism study resources

Prague Branch: Login Works, Large Transfers Hang

LCA ICT Specialism · Put your knowledge to work in context.

All case studies

Prague Branch: Login Works, Large Transfers Hang

Users at the Prague branch (192.168.50.0/24) report that the CRM at HQ (10.10.20.15) loads its login page but freezes after authentication. SSH sessions to HQ connect and authenticate, then hang when a user runs ls -l in a large directory. The branch connects to HQ over an IPsec tunnel; the branch LAN uses a 1500-byte MTU and the tunnel supports 1400 bytes. Small requests succeed: curl https://10.10.20.15/health returns in 30 ms. Larger pages and git clones stall and then time out. ping 10.10.20.15 succeeds with 0% loss, while ping -M do -s 1400 10.10.20.15 fails and -s 1300 succeeds. HQ firewall rules permit all traffic from 192.168.50.0/24. The branch router has no MSS clamping configured. Users on the HQ LAN have no problems. Traceroute from the branch shows the tunnel endpoint as hop 2 with no other anomalies. The branch has 40 users on a 100/100 Mbit link, and the tunnel is not saturated.

1. What is the most likely cause, and which observations support it? How would you rule out DNS, packet loss, firewall and application causes?

Read the worked answer

The pattern is a Path MTU Discovery black hole. The IPsec tunnel carries only 1400 bytes, but the branch hosts and the HQ servers still believe the path supports 1500. Large packets are sent with the Don't Fragment bit set; the tunnel cannot forward them, and if the ICMP fragmentation-needed message is lost or filtered, the sender never learns to reduce its segment size. Small packets pass, so the TCP handshake and authentication complete, then the connection stalls when a large response or a directory listing is transferred.

Supporting evidence: small curl succeeds; SSH authenticates but ls -l hangs; ping -M do -s 1400 fails while -s 1300 succeeds; HQ LAN users are fine; the tunnel is not saturated; no MSS clamping is configured.

Ruling out alternatives:

  • DNS: the test uses an IP address and succeeds, and the login page resolves.
  • Packet loss: ping shows 0% loss at small sizes, and failure tracks packet size, not time or load.
  • Firewall: the firewall permits the subnet and the TCP handshake completes; a block would fail earlier and symmetrically.
  • Application: HQ users use the same CRM without problems, and the failure follows large payloads across different applications, HTTPS and SSH.

A useful confirmation is tcpdump on both sides showing retransmissions of full-size segments and no ICMP type 3 code 4 returning.

2. What change would you make, where, and how would you verify it end to end?

Read the worked answer

Clamp TCP MSS on the tunnel path so endpoints never send segments larger than the tunnel can carry. On the branch router, apply an MSS clamp of 1360 on the IPsec tunnel interface for traffic in both directions: 1400 minus 20 bytes IPv4 header and 20 bytes TCP header. If the tunnel interface MTU can be set, set it to 1400 as well, but MSS clamping is the part that fixes remote senders. Also confirm that ICMP type 3 code 4 is allowed through the tunnel and HQ firewall, so PMTUD can work as a fallback.

Verification, from a branch client rather than the router:

  • ping -M do -s 1372 10.10.20.15 should succeed (1372 + 28 = 1400), while -s 1400 may still fail because it exceeds the tunnel MTU; that is expected.
  • curl -o /dev/null a large file from the CRM and confirm it completes.
  • SSH to the HQ server and run ls -l in the large directory; the session should no longer hang.
  • git clone a repository of at least a few hundred MB.
  • tcpdump -i <tunnel> 'tcp[tcpflags] & tcp-syn != 0' should show SYN segments with MSS 1360.

Repeat the tests at peak time and from more than one branch host, then record the before and after timings.

3. Why would lowering only the branch LAN MTU to 1400 not be sufficient, and what would you document?

Read the worked answer

Lowering the branch LAN MTU helps only traffic originated by branch hosts, and only if every host picks up the change. It does nothing for packets sent from HQ servers to branch clients: those servers still have a 1500-byte MTU and will send full-size segments with DF set. If the ICMP fragmentation-needed message is dropped, the HQ side still experiences a black hole. TCP MSS clamping works differently: the router rewrites the MSS option in the SYN as it crosses the tunnel, so both endpoints advertise a segment size that fits the path regardless of their local MTU. That is why clamping at the tunnel is the right control, with a lowered MTU as a secondary measure.

Documentation should include the tunnel topology and endpoint addresses; the tunnel MTU and the MSS value chosen, with the header arithmetic; the exact router rule and interface; the requirement that ICMP type 3 code 4 must not be filtered; a repeatable test procedure with the ping sizes and expected results; known-good throughput and latency; and a note that overhead differs for IPv6 and for additional encapsulation. Add the change to the change-management record and to the branch onboarding checklist so a future tunnel is built with clamping from day one.