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