—
One of the most misunderstood networking topics is the relationship between IP MTU, TCP MSS, TCP MSS Clamping, and SSL/TCP proxy devices such as Load Balancers, Firewalls, Reverse Proxies, and Application Delivery Controllers — ADCs.
Many engineers assume that if a TCP endpoint advertises an MSS of:
1380 bytes
every TCP segment transmitted must contain exactly:
1380 bytes
of TCP payload.
That assumption is incorrect.
MSS defines a maximum TCP payload size for the receiving direction. It is not a required segment size.
Similarly, it is sometimes assumed that a Load Balancer simply forwards the original TCP packets between the client and server.
That is not necessarily true.
When a Load Balancer or ADC operates as a Full TCP Proxy, it terminates the client-side TCP connection and establishes another TCP connection toward the backend server.
The two TCP connections can therefore have different:
- MSS values
- Window sizes
- TCP options
- Sequence-number spaces
- Congestion-control state
- RTT characteristics
- TLS sessions
- Network MTUs
Understanding these relationships is essential when troubleshooting:
- Slow applications
- SSL/TLS offloading
- IP fragmentation
- Path MTU problems
- TCP MSS mismatches
- Blocked ICMP messages
- VPN tunnels
- GRE tunnels
- IPsec overhead
- SD-WAN
- Cloud networks
- Data-center Load Balancers
Understanding IP MTU and TCP MSS
What Is IP MTU?
MTU — Maximum Transmission Unit defines the maximum size of an IP packet that can be transmitted over a particular link/interface without requiring IP-layer fragmentation.
For a normal TCP/IPv4 packet without IP or TCP options, the IP packet consists conceptually of:
- IPv4 Header
- TCP Header
- TCP Payload

Common MTU Examples
| Technology | Typical or Commonly Seen MTU |
|---|---|
| Ethernet | 1500 |
| Jumbo Frame Environment | Around 9000 |
| PPPoE | 1492 |
| GRE Tunnel | Often lower than underlying interface MTU |
| IPsec VPN | Depends on encapsulation and cryptographic overhead |
| VXLAN | Requires additional underlay headroom |
| WireGuard | Often configured below physical-interface MTU |
What Is TCP MSS?
TCP MSS — Maximum Segment Size is the maximum TCP payload size that an endpoint advertises it is willing to receive in a TCP segment.
MSS refers to the TCP data portion.
It does not include the IP or TCP header itself.
For a basic TCP/IPv4 packet without additional header options:
MSS = MTU - IPv4 Header - TCP Header
Using the common minimum header sizes:
MSS = 1500 - 20 - 20
Therefore:
MSS = 1460 bytes
For IPv6 with its 40-byte base header and a 20-byte TCP header:
MSS = 1500 - 40 - 20
Therefore:
MSS = 1440 bytes
Additional headers or encapsulation can change the practical calculation.

MTU vs MSS
| MTU | MSS |
|---|---|
| Maximum IP packet size on a link | Maximum TCP payload advertised to a peer |
| Layer 3 concept | TCP Layer 4 concept |
| Includes IP header and transport data | Refers to TCP payload |
| Associated with interfaces and paths | Associated with TCP connection negotiation |
| Applies beyond TCP | Specific to TCP |
TCP Three-Way Handshake and MSS Negotiation
The MSS option is normally exchanged in TCP packets containing the SYN flag.
For example:

MSS Is Directional
This point is extremely important.
Suppose:
Therefore, it is misleading to describe a TCP connection as simply having “an MSS of 1380.”
Each endpoint advertises its own receive MSS.
MSS Is a Maximum, Not a Required Size
If an endpoint advertises:
MSS = 1380
the peer can send:
- 1380 bytes
- 1200 bytes
- 800 bytes
- 500 bytes
- 100 bytes
of TCP payload in individual segments.
It does not have to send exactly 1380 bytes every time.
TCP MSS Clamping and Path MTU
Network paths frequently contain additional encapsulation.
Examples include:
- VPN
- GRE
- IPsec
- PPPoE
- SD-WAN
- Cloud tunnels
- MPLS-related service designs
- Other overlay networks
Additional encapsulation consumes bytes.
A path that cannot safely carry the original packet size may therefore experience:
- Fragmentation
- Packet drops
- PMTUD dependency
- Retransmissions
- Application stalls
What Is TCP MSS Clamping?
TCP MSS Clamping modifies the MSS option advertised in TCP SYN packets.
Consider the same example:
Original Client MSS
1380
The gateway firewall changes it to:
1300
The downstream TCP peer therefore sees:
MSS = 1300
rather than:
MSS = 1380

Why MSS Clamping Exists
MSS clamping is commonly deployed where a known reduced-MTU path exists and TCP packet sizing needs to account for that path.
It can be especially useful across:
- VPN tunnels
- GRE
- IPsec
- PPPoE
- Overlay networks
Path MTU Discovery — PMTUD
Path MTU Discovery attempts to determine the largest IP packet that can traverse the complete path without requiring fragmentation.
For IPv4, the classic PMTUD process involves packets that cannot be fragmented and ICMP feedback from a router that encounters a smaller outgoing MTU.
Conceptually:
- Sender transmits a packet.
- A router encounters a smaller outgoing MTU.
- The packet cannot be forwarded at its current size.
- The router drops it.
- The router returns an appropriate ICMP message.
- The sender reduces the packet size.
- Communication continues.
For IPv6, routers do not fragment transit packets. The source is expected to respond appropriately to ICMPv6 Packet Too Big information.

PMTU Black-Hole Problems
If the required ICMP messages are filtered, a sender may not receive the information needed to adjust packet size.
Symptoms can include:
- TCP retransmissions
- Connections that establish but stall
- Small requests working while large transfers fail
- TLS handshake or application-data stalls
- VPN-specific connectivity problems
SSL/TCP Proxy Behaviour and Independent TCP Sessions
Modern Load Balancers and Application Delivery Controllers may operate as Full TCP Proxies.
Examples include products or software from:
- A10
- F5
- Citrix
- NGINX
- HAProxy
- Envoy
The exact behavior depends on the product and configuration.
In a Full Proxy architecture, the device does not simply forward the original TCP connection unchanged from client to server.
Instead, it can create two independent TCP connections.
Client-Side Connection
Client ↔ Load Balancer
Server-Side Connection
Load Balancer ↔ Backend Server

Example Proxy Behaviour
| Step | Network Operation | Example MSS |
|---|---|---|
| 1 | Client sends SYN | 1380 |
| 2 | Client-side TCP connection is established | Client-side values apply |
| 3 | Load Balancer terminates the client-side connection | — |
| 4 | Load Balancer creates a new backend TCP connection | 1380 |
| 5 | Backend server responds | 1400 |
| 6 | Backend TCP connection is established | Independent values apply |
The two sessions can independently negotiate or maintain:
- MSS
- Window scaling
- SACK
- Timestamps
- Sequence numbers
- Flow-control state
- Congestion-control state
TLS can also be independent when TLS termination or re-encryption is involved.
SSL/TLS Offloading Example
A common architecture is:
The backend connection can therefore use:
- Different MSS
- Different network MTU
- Different TCP window
- Different TCP options
- Different TLS session if re-encryption is used

Complete Real-World Packet Flow Example
We will now use the original packet-flow example throughout this section.
The topology is:
Client → Gateway Firewall → Load Balancer → Backend Server
The important values are:
- Client originally advertises MSS 1380
- Gateway Firewall clamps the MSS to 1300
- Load Balancer terminates the client-side TCP connection
- Load Balancer creates a new backend TCP connection
- Load Balancer advertises MSS 1380 toward the server
- Backend Server advertises MSS 1400

Step 1 — Client Sends TCP SYN
The client starts the TCP connection.
| Packet Field | Value |
|---|---|
| Source | Client |
| Destination | Server-facing service through network |
| TCP Flag | SYN |
| Advertised MSS | 1380 Bytes |
Conceptually:
Step 2 — Gateway Firewall Performs MSS Clamping
The firewall inspects the TCP SYN.
It changes:
MSS 1380 → MSS 1300
| Before Firewall | After Firewall |
|---|---|
| MSS = 1380 | MSS = 1300 |
The firewall then forwards the modified SYN toward the Load Balancer.
The downstream peer therefore sees the client’s advertised receive MSS as:
1300 bytes
rather than the original:
1380 bytes
Step 3 — Load Balancer Receives and Terminates the Connection
The Load Balancer receives:
SYN MSS = 1300
The client-side TCP handshake completes.
The resulting connection is:
TCP Session #1
Client ↔ Gateway Firewall ↔ Load Balancer
The Load Balancer terminates this TCP session.
If SSL offloading is enabled, it also terminates the client-side TLS session.
| Client-Side Property | Value |
|---|---|
| Original Client MSS | 1380 |
| MSS Seen by Load Balancer | 1300 |
| TCP Handshake | Completed |
| TLS | Established if HTTPS |
| Load Balancer | TCP termination |
| SSL Offloading | TLS termination if configured |
| Next Action | Create backend TCP connection |
Step 4 — Load Balancer Creates the Backend TCP Session
The Load Balancer now creates a new connection toward the backend server.
This is:
TCP Session #2
Load Balancer ↔ Backend Server
The backend handshake uses the original example:
Backend MSS Advertisement
| Device | Advertised Receive MSS |
|---|---|
| Load Balancer | 1380 Bytes |
| Server | 1400 Bytes |
Directional Effective Payload Limits
Because MSS represents what the receiving endpoint advertises:
| Direction | Peer’s Advertised MSS | Maximum TCP Payload Based on MSS |
|---|---|---|
| Server → Load Balancer | Load Balancer = 1380 | 1380 Bytes |
| Load Balancer → Server | Server = 1400 | 1400 Bytes |
End-to-End Session Summary
| TCP Session | Endpoints | MSS Information | Description |
|---|---|---|---|
| TCP Session #1 | Client ↔ Load Balancer | Client advertisement changed 1380 → 1300 by firewall | Client-side TCP/TLS connection |
| TCP Session #2 | Load Balancer ↔ Server | LB advertises 1380, Server advertises 1400 | Independent backend TCP connection |
What Did the Firewall Actually Change?
The firewall changed the MSS option in the TCP SYN:
1380 → 1300
It did not automatically change the MSS of the independent backend connection created later by the Load Balancer.
What Did the Load Balancer Do?
The Load Balancer:
- Accepted the client-side TCP connection.
- Completed the client-side TCP handshake.
- Terminated the TCP connection locally.
- Terminated TLS if SSL offloading was configured.
- Processed the application traffic.
- Created an independent backend TCP connection.
- Negotiated backend TCP parameters separately.

TCP Segment Size, PMTU Problems and Troubleshooting
Can a Load Balancer Send a 100-Byte TCP Segment?
Yes.
Suppose the peer has advertised:
MSS = 1380
The Load Balancer could send:
TCP Payload = 100 Bytes
TCP Payload = 100 Bytes
TCP Payload = 100 Bytes
This is valid.
MSS specifies the maximum, not the minimum.
Smaller TCP segments can occur because of:
- Small application writes
- Proxy behavior
- Buffering
- Streaming
- Flow control
- Congestion-control behavior
- TCP pacing
- Latency-sensitive application behavior
- Interaction with Nagle’s algorithm and delayed ACK behavior
The receiving TCP stack reassembles the byte stream for the application.
What If an Application Writes 2000 Bytes?
Suppose the applicable peer-advertised MSS is:
1380
The application writes:
2000 bytes
to the TCP socket.
This does not normally mean that TCP transmits one 2000-byte TCP payload.
The TCP stack can segment the byte stream into multiple TCP segments.
A simplified conceptual example is:
Important Wireshark Consideration — TCP Offload
Packet captures taken directly on a transmitting or receiving host can sometimes display unexpectedly large TCP segments because of operating-system and NIC offload features such as:
- TSO
- GSO
- GRO
- LRO
Therefore, a host capture may appear to show packets larger than the expected MSS even though the packets transmitted on the physical network are segmented differently.
IPv4 Fragmentation vs IPv6
IPv4 and IPv6 fragmentation behavior differs.
For IPv4, fragmentation may occur when permitted, although modern networks generally try to avoid relying on fragmentation.
For IPv6, routers do not fragment transit packets. The source is expected to react to ICMPv6 Packet Too Big information and adjust appropriately.
Common MTU/MSS Symptoms
Possible symptoms include:
- TCP handshake succeeds but data stalls
- Small requests work but larger responses fail
- TLS ClientHello or early packets succeed but later traffic stalls
- Repeated retransmissions
- VPN-specific application failures
- Large uploads fail
- Large downloads stall
These symptoms are useful indicators, but none individually proves an MTU problem.
Useful Linux Tests
Check interface MTU:
ip link show
Inspect TCP SYN MSS:
tcpdump -ni any 'tcp[tcpflags] & tcp-syn != 0'
Capture traffic for later analysis:
tcpdump -ni any -s 0 -w mtu-mss-test.pcap
Useful Wireshark Filters
Display TCP SYN packets:
tcp.flags.syn == 1
Display TCP MSS options:
tcp.options.mss_val
Display retransmission analysis:
tcp.analysis.retransmission
Recommended Multi-Point Capture
For the example in this article, useful capture locations are:
- Client side before MSS clamping
- Firewall egress after MSS clamping
- Load Balancer client-side interface
- Load Balancer server-side interface
- Backend server
This allows you to prove:
- Original client MSS = 1380
- Firewall-clamped MSS = 1300
- Client-side TCP termination
- Independent backend SYN
- Load Balancer backend MSS = 1380
- Server backend MSS = 1400

MTU and MSS Troubleshooting Workflow

Best Practices and Key Takeaways
MTU Best Practices
Use an MTU appropriate for the actual network design.
A physical Ethernet MTU of:
1500
is common, but tunnels and overlays require sufficient underlay headroom or adjusted inner MTU.
Do not force 1500 everywhere if the actual path cannot support it.
Allow Required ICMP
Do not indiscriminately block all ICMP.
PMTUD relies on important ICMP and ICMPv6 messages.
Blocking them can contribute to difficult-to-diagnose connectivity failures.
Use MSS Clamping Where Appropriate
MSS clamping can be useful across known reduced-MTU paths such as:
- VPN
- GRE
- IPsec
- PPPoE
- SD-WAN
- Overlay networks
Calculate the value according to the actual path rather than selecting an arbitrary number.
Avoid Unnecessary Fragmentation
Fragmentation introduces additional processing and can complicate:
- Security inspection
- Troubleshooting
- Packet loss behavior
- Performance
Where possible, design the network so endpoints send appropriately sized packets.
Understand Proxy Boundaries
A Full TCP Proxy creates a clear transport boundary.
For this article’s example:
Final Key Takeaways — MTU, MSS and PMTUD
- MTU defines the maximum IP packet size supported by a particular link or interface without IP fragmentation.
- Path MTU represents the limiting MTU across an end-to-end network path.
- MSS represents the maximum TCP payload an endpoint advertises it is willing to receive.
- MSS does not include the IP or TCP header.
- MSS is directional.
- MSS is a maximum, not a required TCP segment size.
- A TCP sender can transmit segments smaller than the peer’s advertised MSS.
- Applications write a TCP byte stream; the TCP stack handles segmentation.
- MSS Clamping modifies the MSS option carried in TCP SYN packets.
- MSS clamping can help TCP operate across reduced-MTU tunnel paths.
- MSS clamping is not a complete replacement for correct MTU and PMTUD design.
- Required ICMP and ICMPv6 messages are important for Path MTU Discovery.
- Blocking required PMTUD feedback can contribute to PMTU black-hole behavior.
- IPv4 and IPv6 fragmentation behavior is different.
Final Key Takeaways — Full Proxy and Troubleshooting
- A Full TCP Proxy terminates one TCP connection and creates another.
- Client-side and server-side proxy connections negotiate TCP parameters independently.
- SSL offloading can terminate the client TLS session independently of the backend connection.
- An MSS clamped from 1380 to 1300 on the client side does not automatically force the backend connection to use 1300.
- In the backend example, the Load Balancer advertises 1380 and the server advertises 1400.
- Host packet captures can be misleading because of TSO, GSO, GRO, and LRO.
- Multi-point packet captures are one of the best ways to prove where MSS changes occur.
- TCP retransmissions alone do not prove an MTU problem.

Useful Links and References
SanchitGurukul Static Resources
Official External References
Your feedback matters
Was this post helpful?
Discussion
0 approved comments
No approved comments yet. You can start the discussion below.
Leave a Comment
No login is required. Name and email are used for moderation/security. Your email is never displayed publicly. All comments require administrator approval.
Discover more from SanchitGurukul
Subscribe to get the latest posts sent to your email.
