X-Git-Url: http://git.meshlink.io/?p=utcp;a=blobdiff_plain;f=README;fp=README;h=d5edf564fb93533662533529eba3da378f1fcd21;hp=0000000000000000000000000000000000000000;hb=6934880365c13cfebe5806be0f40c4c45a5dcf84;hpb=bb3c69868316b57abfc50bf159916358bc06ad44 diff --git a/README b/README new file mode 100644 index 0000000..d5edf56 --- /dev/null +++ b/README @@ -0,0 +1,45 @@ +This is a light-weight, user-space implementation of RFC 793 (TCP), without any +reliance on an IP layer. It can be used to provide multiple in-order, reliable +streams on top of any datagram layer. + +UTCP does not rely on a specific event system. Instead, the application feeds +it with incoming packets using utcp_recv(), and outgoing data for the streams +using utcp_send(). Most of the rest is handled by callbacks. The application +must however call utcp_timeout() regularly to have UTCP handle packet loss. + +The application should run utcp_init() for every peer it wants to communicate +with. + +DIFFERENCES FROM RFC 793: + +* No checksum. UTCP requires the application to handle packet integrity. +* 32-bit window size. Big window sizes are the default. +* No ECN, PSH, URG + +TODO v1.0: + +* Implement send buffer +* Window scaling +* Handle retransmission + +TODO v2.0: + +* Nagle +* NAK and SACK +* Congestion window scaling +* Timestamps? + +Future ideas: + +Fast open: + SYN + data? + +Receive-only open: + SYN|FIN + +Fast transaction: + SYN|FIN + request data -> + <- SYN|ACK|FIN + response data + ACK -> + +Does this need special care or can we rely on higher level MACs?