Streaming and the send window: throughput without an infinite buffer
Four sizes that must not be confused, how a window lets a long link stay busy, and why a bigger window alone makes nothing faster.
Four sizes must not be confused:
| Level | Order of magnitude and meaning |
|---|---|
| File or stream limit | Up to 8 GiB in the released large profile; no buffer size |
| Crypto chunk | Up to 4 MiB of plaintext plus the GCM tag |
| Direct frame | On the direct native path up to 16 KiB including header; not a 4 MiB network packet |
| Negotiated chunk window | At most four chunks released at once; no minimum speed |
Scroll sideways to see the whole table.
Without overlapping work, the sender can wait for a reply after every chunk. On long round trips the line then sits idle at times. The native window is negotiated on both sides: over TLS through the ALPN profile, over the relay (server route) in the handshake.
The window limits what is in flight, not what the receiver must hold. Four chunks are a credit limit. The receiver does not have to hold four complete files at once. The shared decryption pipeline overlaps loading, two verification and decryption workers and ordered output with at most three chunk slots. Pipeline occupancy and transport window are different limits. All relevant hashes, GCM tags and the whole-file hash are still checked; ordered output stays necessary.
Why low bandwidth works
A window says how much may be in flight without further release, not how fast that data has to arrive. Small bounded I/O steps and stall deadlines distinguish a slow but progressing transfer from a stuck connection. Profile deadlines still apply; a stalled transfer ends and can be resumed as the same job.
A rule of thumb: the bandwidth-latency product
Data needed in flight ≈ bandwidth × round-trip time
Pure arithmetic at a 20 ms round trip: 1 Gbit/s corresponds to 2.5 MB, 10 Gbit/s to 25 MB and 100 Gbit/s to 250 MB. These are decimal MB and no pipeit measurements. A bounded application window, the TCP window, packet loss, hashing, TLS, disks and memory bandwidth can each limit more tightly. A bigger window alone does not make a client 100-Gbit-capable.
Preparing, data transfer and safe completion have to be measured separately. A fast ciphertext micro-benchmark is no proof of the same payload rate including file scans, receive verification and disk commit.
Related guides
Relay: diskless does not mean workless
Why the relay (server route) keeps no file yet still uses memory and CPU, and how backpressure keeps it bounded.
Resuming: acknowledgement, checkpoint and receipt are different
Five signals that sound alike and mean different things, and what resuming actually keeps.
Solve transfer problems
Check the specific problem instead of starting over: a quick decision list and the common symptoms with their next step.