summaryrefslogtreecommitdiff
path: root/src/enet/design.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/enet/design.txt')
-rw-r--r--src/enet/design.txt117
1 files changed, 0 insertions, 117 deletions
diff --git a/src/enet/design.txt b/src/enet/design.txt
deleted file mode 100644
index 9a88dba9f..000000000
--- a/src/enet/design.txt
+++ /dev/null
@@ -1,117 +0,0 @@
-* Why ENet?
-
- ENet evolved specifically as a UDP networking layer for the multiplayer
-first person shooter Cube. Cube necessitated low latency communcation with
-data sent out very frequently, so TCP was an unsuitable choice due to its
-high latency and stream orientation. UDP, however, lacks many sometimes
-necessary features from TCP such as reliability, sequencing, unrestricted
-packet sizes, and connection management. So UDP by itself was not suitable
-as a network protocol either. No suitable freely available networking
-libraries existed at the time of ENet's creation to fill this niche.
-
- UDP and TCP could have been used together in Cube to benefit somewhat
-from both of their features, however, the resulting combinations of protocols
-still leaves much to be desired. TCP lacks multiple streams of communication
-without resorting to opening many sockets and complicates delineation of
-packets due to its buffering behavior. UDP lacks sequencing, connection
-management, management of bandwidth resources, and imposes limitations on
-the size of packets. A significant investment is required to integrate these
-two protocols, and the end result is worse off in features and performance
-than the uniform protocol presented by ENet.
-
- ENet thus attempts to address these issues and provide a single, uniform
-protocol layered over UDP to the developer with the best features of UDP and
-TCP as well as some useful features neither provide, with a much cleaner
-integration than any resulting from a mixture of UDP and TCP.
-
-* Connection management
-
- ENet provides a simple connection interface over which to communicate
-with a foreign host. The liveness of the connection is actively monitored
-by pinging the foreign host at frequent intervals, and also monitors the
-network conditions from the local host to the foreign host such as the
-mean round trip time and packet loss in this fashion.
-
-* Sequencing
-
- Rather than a single byte stream that complicates the delineation
-of packets, ENet presents connections as multiple, properly sequenced packet
-streams that simplify the transfer of various types of data.
-
- ENet provides sequencing for all packets by assigning to each sent
-packet a sequence number that is incremented as packets are sent. ENet
-guarentees that no packet with a higher sequence number will be delivered
-before a packet with a lower sequence number, thus ensuring packets are
-delivered exactly in the order they are sent.
-
- For unreliable packets, ENet will simply discard the lower sequence
-number packet if a packet with a higher sequence number has already been
-delivered. This allows the packets to be dispatched immediately as they
-arrive, and reduce latency of unreliable packets to an absolute minimum.
-For reliable packets, if a higher sequence number packet arrives, but the
-preceding packets in the sequence have not yet arrived, ENet will stall
-delivery of the higher sequence number packets until its predecessors
-have arrived.
-
-* Channels
-
- Since ENet will stall delivery of reliable packets to ensure proper
-sequencing, and consequently any packets of higher sequence number whether
-reliable or unreliable, in the event the reliable packet's predecessors
-have not yet arrived, this can introduce latency into the delivery of other
-packets which may not need to be as strictly ordered with respect to the
-packet that stalled their delivery.
-
- To combat this latency and reduce the ordering restrictions on packets,
-ENet provides multiple channels of communication over a given connection.
-Each channel is independently sequenced, and so the delivery status of
-a packet in one channel will not stall the delivery of other packets
-in another channel.
-
-* Reliability
-
- ENet provides optional reliability of packet delivery by ensuring the
-foreign host acknowledges receipt of all reliable packets. ENet will attempt
-to resend the packet up to a reasonable amount of times, if no acknowledgement
-of the packet's receipt happens within a specified timeout. Retry timeouts
-are progressive and become more lenient with every failed attempt to allow
-for temporary turbulence in network conditions.
-
-* Fragmentation and reassembly
-
- ENet will send and deliver packets regardless of size. Large packets are
-fragmented into many smaller packets of suitable size, and reassembled on
-the foreign host to recover the original packet for delivery. The process
-is entirely transparent to the developer.
-
-* Aggregation
-
- ENet aggregates all protocol commands, including acknowledgements and
-packet transfer, into larger protocol packets to ensure the proper utilization
-of the connection and to limit the opportunities for packet loss that might
-otherwise result in further delivery latency.
-
-* Adaptability
-
- ENet provides an in-flight data window for reliable packets to ensure
-connections are not overwhelmed by volumes of packets. It also provides a
-static bandwidth allocation mechanism to ensure the total volume of packets
-sent and received to a host don't exceed the host's capabilities. Further,
-ENet also provides a dynamic throttle that responds to deviations from normal
-network connections to rectify various types of network congestion by further
-limiting the volume of packets sent.
-
-* Portability
-
- ENet works on Windows and any other Unix or Unix-like platform providing
-a BSD sockets interface. The library has a small and stable code base that
-can easily be extended to support other platforms and integrates easily.
-
-* Freedom
-
- ENet demands no royalties and doesn't carry a viral license that would
-restrict you in how you might use it in your programs. ENet is licensed under
-a short-and-sweet MIT-style license, which gives you the freedom to do anything
-you want with it (well, almost anything).
-
-