# Signalhouse MTU, Fragmentation & TCP Throughput Calculator > Tunnel overhead, inner MTU and MSS, IPv4/IPv6 fragments and a TCP throughput model. Stack encapsulations on a link — PPPoE, MPLS, GRE, IP-in-IP, 6in4, DS-Lite, VXLAN, Geneve, WireGuard and IPsec ESP (approximate) — and get the inner MTU, the TCP MSS for IPv4 and IPv6 and the wire efficiency. Send a packet through it to see the exact IPv4 fragments (offsets, lengths, MF flag), what happens with “Don’t Fragment” and why IPv6 routers answer “Packet Too Big”. A TCP model adds the bandwidth-delay product, the window scale you need and the Mathis loss limit. It is the MTU panel of the Signalhouse Network lab. Part of usefulweb.site (https://usefulweb.site/). Part of [Signalhouse](https://signalhouse.usefulweb.site/) (ownerApp: signalhouse). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://signalhousemtucalculator.usefulweb.site/ (interactive tool at https://signalhousemtucalculator.usefulweb.site/tool) - JSON API: POST https://signalhousemtucalculator.usefulweb.site/api/v1/calculate with a JSON object of inputs (schema: https://signalhousemtucalculator.usefulweb.site/api/v1/tool) - OpenAPI: https://signalhousemtucalculator.usefulweb.site/openapi.json - MCP (Streamable HTTP): https://signalhousemtucalculator.usefulweb.site/mcp - tool `signalhouse_mtu_calculator` ## Inputs - linkMtu (integer): Link MTU - MTU of the physical link (Ethernet 1500, jumbo frames 9000). - layers (table): Encapsulations, from the wire inwards - ipVersion (select): Inner IP version - packetSize (integer): Packet to send (total length) - Optional: an IP packet of this size is checked against the inner MTU and fragmented if needed. - df (boolean): “Don’t Fragment” set (IPv4) - ipv4HeaderLength (integer): IPv4 header length - ipv6ExtensionBytes (integer): IPv6 extension headers before the Fragment header - bandwidthMbps (number): TCP model: bandwidth - Fill in bandwidth and round-trip time to add the TCP throughput model. - rttMs (number): TCP model: round-trip time - lossPercent (number): TCP model: packet loss - windowBytes (integer): TCP model: receive window - Empty: as large as the path needs (with window scaling) or 65,535 bytes (without). - windowScaling (boolean): TCP model: window scaling (RFC 7323) enabled - transferMB (number): TCP model: file size to transfer ## Method - Each encapsulation subtracts its header bytes from the MTU of the layer below it, from the wire inwards: PPPoE 8, MPLS 4 per label, GRE over IPv4 24 (28 with a key), IPIP and 6in4 20, IP-in-IPv6 40, VXLAN and Geneve 50 over IPv4 or 70 over IPv6 (they carry an inner Ethernet header), WireGuard 60 over IPv4 or 80 over IPv6. - IPsec ESP in tunnel mode is computed from the cipher: outer IPv4 20, ESP header 8, IV, padding of the encrypted part to the cipher block (16 bytes for AES-CBC, 4 for AES-GCM) including the 2-byte trailer, and the ICV (12 for HMAC-SHA1-96, 16 for GCM); NAT-T adds a UDP header. Real overhead varies with options, so the figure is labelled approximate. - IPv4 fragments carry data in multiples of 8 bytes (the offset field counts 8-byte units); every fragment but the last has MF set (RFC 791). IPv6 packets are only fragmented by the source, each fragment repeats the unfragmentable headers and adds an 8-byte Fragment header (RFC 8200); routers drop oversize packets with “Packet Too Big”. - TCP MSS = MTU − 40 (IPv4) or − 60 (IPv6), without TCP options. The TCP estimate is the minimum of the bandwidth, window ÷ RTT and the Mathis et al. model MSS ÷ RTT × √(3/2) ÷ √loss. It models steady-state Reno-style congestion avoidance; CUBIC, BBR, slow start and queueing behave differently.