TCP

Wenbo Zhu edited this page Aug 25, 2015 · 9 revisions

HTTP and TCP

This page keeps notes about best current practice for using HTTP/1 and HTTP/2 over TCP.

TCP Fast Open

RFC

Allows data to be sent on handshake. Requires client + server support, and application knowledge (GET/HEAD/OPTIONS only) or TLS Client Hello.

Implemented in Linux, experimental in iOS/OSX. Chrome has support on Linux platforms (including Android).

Initial Congestion Window

IW10 is now (fairly) widely deployed n server side. Some have experimented with IW32 + packet pacing.

Explicit Congestion Control

Apple deploying in iOS and OSX.

Tail Loss Probes

draft

Slow Start after Idle

net.ipv4.tcp_slow_start_after_idle = 0

Nagle's Algorithm

 Most implementations disable

Half-close

Client or server is free to half-close after a request or response has been completed; or when there is no pending stream in HTTP/2.

Abort

No client abort for HTTP/1.1 after the request body has been sent. Delayed full close is expected following an error response to avoid RST on the client.

Keep-alive

TCP keep-alive likely disabled. App-level keep-alive is required for long-lived requests to detect failed peers.

Full-duplex read/write

Requests are expected to complete first. Clarification