Hacker News new | ask | show | jobs
by dschatz 4291 days ago
FYI both a TCP SYN and SYN/ACK can carry a payload (which could be the GET and RESPONSE)
2 comments

The SYN packet can contain data, but the spec requires that it not be passed down to the application until the three-way handshake is complete (so a SYN-with-data from a spoofed source address won't elicit a response).

The TCP Fast Open proposal gets around this by using a cookie, so that the first connection requires a normal three-way-handshake, but subsequent connections between the same client and host can use an expedited handshake that eliminates a round trip.

Yeah but in practice no browser does this. There is no system call on Linux or Windows to push data as part of the SYN packet. You would have to craft TCP/IP packets and their headers with a raw socket...
Linux does support this for "TCP Fast Open" - the system call used is sendto() or sendmsg() with the MSG_FASTOPEN flag set, in place of the usual connect().
Even if you did do this, any server implementing SYN cookies would ignore the payload and require you to retransmit anyway.
IIRC, both the Linux and BSD socket implementations let you do this with a combination of a few sockopts.