]> git.meshlink.io Git - utcp/blob - UTCP
Start of UTCP.
[utcp] / UTCP
1 This is a light-weight, user-space implementation of RFC 793 (TCP), without any
2 reliance on an IP layer.  It can be used to provide multiple in-order, reliable
3 streams on top of any datagram layer.
4
5 UTCP does not rely on a specific event system. Instead, the application feeds
6 it with incoming packets using utcp_recv(), and outgoing data for the streams
7 using utcp_send(). Most of the rest is handled by callbacks. The application
8 must however call utcp_timeout() regularly to have UTCP handle packet loss.
9
10 The application should run utcp_init() for every peer it wants to communicate
11 with.
12
13 DIFFERENCES FROM RFC 793:
14
15 * No checksum. UTCP requires the application to handle packet integrity.
16 * 32-bit window size. Big window sizes are the default.
17 * No ECN, PSH, URG
18 * Ports are a bit strange (for now).
19
20 TODO v1.0:
21
22 * Do ports the same way as real TCP?
23 * Implement send buffer
24 * Window scaling
25 * Handle retransmission
26 * Do proper modulo 2^32 comparisons of sequence numbers
27
28 TODO v2.0:
29
30 * Nagle
31 * NAK and SACK
32 * Congestion window scaling
33 * Timestamps?
34
35 Future ideas:
36
37 Fast open:
38         SYN + data?
39
40 Receive-only open:
41         SYN|FIN
42
43 Fast transaction:
44         SYN|FIN + request data ->
45         <- SYN|ACK|FIN + response data
46         ACK ->
47
48 Does this need special care or can we rely on higher level MACs?