~ubuntu-branches/ubuntu/vivid/emscripten/vivid

« back to all changes in this revision

Viewing changes to tests/enet/design.txt

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2013-05-02 13:11:51 UTC
  • Revision ID: package-import@ubuntu.com-20130502131151-q8dvteqr1ef2x7xz
Tags: upstream-1.4.1~20130504~adb56cb
ImportĀ upstreamĀ versionĀ 1.4.1~20130504~adb56cb

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
* Why ENet?
 
2
 
 
3
    ENet evolved specifically as a UDP networking layer for the multiplayer 
 
4
first person shooter Cube. Cube necessitated low latency communcation with
 
5
data sent out very frequently, so TCP was an unsuitable choice due to its
 
6
high latency and stream orientation. UDP, however, lacks many sometimes 
 
7
necessary features from TCP such as reliability, sequencing, unrestricted
 
8
packet sizes, and connection management. So UDP by itself was not suitable
 
9
as a network protocol either. No suitable freely available networking 
 
10
libraries existed at the time of ENet's creation to fill this niche.
 
11
 
 
12
    UDP and TCP could have been used together in Cube to benefit somewhat
 
13
from both of their features, however, the resulting combinations of protocols
 
14
still leaves much to be desired. TCP lacks multiple streams of communication
 
15
without resorting to opening many sockets and complicates delineation of 
 
16
packets due to its buffering behavior. UDP lacks sequencing, connection 
 
17
management, management of bandwidth resources, and imposes limitations on
 
18
the size of packets. A significant investment is required to integrate these 
 
19
two protocols, and the end result is worse off in features and performance 
 
20
than the uniform protocol presented by ENet.
 
21
 
 
22
    ENet thus attempts to address these issues and provide a single, uniform
 
23
protocol layered over UDP to the developer with the best features of UDP and 
 
24
TCP as well as some useful features neither provide, with a much cleaner 
 
25
integration than any resulting from a mixture of UDP and TCP.
 
26
 
 
27
* Connection management
 
28
 
 
29
    ENet provides a simple connection interface over which to communicate
 
30
with a foreign host. The liveness of the connection is actively monitored
 
31
by pinging the foreign host at frequent intervals, and also monitors the
 
32
network conditions from the local host to the foreign host such as the
 
33
mean round trip time and packet loss in this fashion.
 
34
 
 
35
* Sequencing
 
36
    
 
37
    Rather than a single byte stream that complicates the delineation 
 
38
of packets, ENet presents connections as multiple, properly sequenced packet
 
39
streams that simplify the transfer of various types of data.
 
40
 
 
41
    ENet provides sequencing for all packets by assigning to each sent 
 
42
packet a sequence number that is incremented as packets are sent. ENet 
 
43
guarentees that no packet with a higher sequence number will be delivered 
 
44
before a packet with a lower sequence number, thus ensuring packets are 
 
45
delivered exactly in the order they are sent. 
 
46
 
 
47
    For unreliable packets, ENet will simply discard the lower sequence 
 
48
number packet if a packet with a higher sequence number has already been 
 
49
delivered. This allows the packets to be dispatched immediately as they
 
50
arrive, and reduce latency of unreliable packets to an absolute minimum.
 
51
For reliable packets, if a higher sequence number packet arrives, but the 
 
52
preceding packets in the sequence have not yet arrived, ENet will stall 
 
53
delivery of the higher sequence number packets until its predecessors
 
54
have arrived.
 
55
 
 
56
* Channels
 
57
 
 
58
    Since ENet will stall delivery of reliable packets to ensure proper
 
59
sequencing, and consequently any packets of higher sequence number whether 
 
60
reliable or unreliable, in the event the reliable packet's predecessors 
 
61
have not yet arrived, this can introduce latency into the delivery of other 
 
62
packets which may not need to be as strictly ordered with respect to the 
 
63
packet that stalled their delivery.
 
64
 
 
65
    To combat this latency and reduce the ordering restrictions on packets,
 
66
ENet provides multiple channels of communication over a given connection.
 
67
Each channel is independently sequenced, and so the delivery status of
 
68
a packet in one channel will not stall the delivery of other packets
 
69
in another channel.
 
70
 
 
71
* Reliability
 
72
 
 
73
    ENet provides optional reliability of packet delivery by ensuring the 
 
74
foreign host acknowledges receipt of all reliable packets. ENet will attempt 
 
75
to resend the packet up to a reasonable amount of times, if no acknowledgement
 
76
of the packet's receipt happens within a specified timeout. Retry timeouts
 
77
are progressive and become more lenient with every failed attempt to allow
 
78
for temporary turbulence in network conditions.
 
79
 
 
80
* Fragmentation and reassembly
 
81
 
 
82
    ENet will send and deliver packets regardless of size. Large packets are
 
83
fragmented into many smaller packets of suitable size, and reassembled on
 
84
the foreign host to recover the original packet for delivery. The process
 
85
is entirely transparent to the developer.
 
86
 
 
87
* Aggregation
 
88
 
 
89
    ENet aggregates all protocol commands, including acknowledgements and
 
90
packet transfer, into larger protocol packets to ensure the proper utilization
 
91
of the connection and to limit the opportunities for packet loss that might
 
92
otherwise result in further delivery latency.
 
93
 
 
94
* Adaptability
 
95
 
 
96
    ENet provides an in-flight data window for reliable packets to ensure
 
97
connections are not overwhelmed by volumes of packets. It also provides a
 
98
static bandwidth allocation mechanism to ensure the total volume of packets
 
99
sent and received to a host don't exceed the host's capabilities. Further,
 
100
ENet also provides a dynamic throttle that responds to deviations from normal
 
101
network connections to rectify various types of network congestion by further
 
102
limiting the volume of packets sent.
 
103
 
 
104
* Portability
 
105
    
 
106
    ENet works on Windows and any other Unix or Unix-like platform providing
 
107
a BSD sockets interface. The library has a small and stable code base that
 
108
can easily be extended to support other platforms and integrates easily.
 
109
 
 
110
* Freedom
 
111
 
 
112
    ENet demands no royalties and doesn't carry a viral license that would
 
113
restrict you in how you might use it in your programs. ENet is licensed under
 
114
a short-and-sweet MIT-style license, which gives you the freedom to do anything 
 
115
you want with it (well, almost anything).
 
116
 
 
117