What Is Good About Genny

In this document I explain how Genny has been designed to be useful and good. I go over feature by feature and explain why it's good. This document is intended to get people interested in Genny by showing them how neat it is.

Speed Optimisations:

UDP:

Genny is implemented over UDP. UDP is a protocol over IP with very little overhead.

UDP's header is 8 bytes, and TCP's header is 24.0

TCP is full of good ways to make sure the data actually Gets There, and In Order. With a distributed or peer to peer protocol, these features are useless, and can even get in the way. When an application level packet goes over multiple TCP hops there is no assurance the data well Get There (all the way tot he other side) and In Order. That is why TCP's features are useless to the Genny protocol.

If a Genny servant has to send out more packets than its bandwidth can provide, it simply drops the extra ones. If it was over TCP, it would just lag itself saturating its own bandwidth with delayed and therefore probably irrelevant packets. (Probably irrelevant because the packet is assumed to have gotten broadcasted by a different servant.)

With UDP, there is no need for a "packet length" section in the header, because UDP does that work for you.

Header Bytes:

All the bytes of the header have to have good justification for their existance.

Gnutella uses 128 bit (16 byte!) "GUID"s for both broadcasts, and tacked onto search results in case of Pushes. Genny uses four bytes for Server Identifier, four bytes Client Identifier, and one byte for Broadcast Identifier. This saves a lot of bandwidth.

Gnutella's header is 23 bytes, TCP's header is 20 bytes, IP's header is at least 20 bytes for a total of 63 bytes. Genny's header is 13 bytes, UDP's header is 8 bytes, IP's header is 20 bytes for a total of 41 bytes.1 If you count IP, Genny has two thirds the protocol overhead of Gnutella. If you don't count IP, Genny has less than half the protocol overhead of Gnutella.

Versatility:

Services:

Genny was designed with the concept of Services. Two bytes of the header designate the Service of the packet. Any service that can thrive in a broadcast/reply protocol can be conceived of, written and implemented.

Genny is not limited to Pings/Pongs and Searches/Hits/Pushes. Genny has an Info Service and can have a File Service, a Chat Service or any other Service possible in the protocol.

If people disagree on how a chat service would work, one group can implement one chat service, and the other group would implement another.

Numerics:

A Numeric is a kind of packet within a Service. For example: the Info Service has a Ping Numeric and a Pong Numeric.

In Gnutella, a packet is identified as a broadcast or a reply by its Type Of Service. For example: a Ping is always a broadcast, and a Hits is always a reply. In Genny, a packet is identified as a broadcast or reply or rereply by its Time To Live byte. This means that in Genny, any kind of Numeric can be broadcasted.

Some people like the idea of broadcasting Pongs instead of Pings to save bandwidth. Genny can do that, Genny can also broadcast Pings and reply Pongs.

Instead of complicated handshaking routines upon connection, servants can "broadcast" with TTL of 0 whatever packets of whatever service and numeric they like to each other. For example, upon connection two servants might broadcast with TTL of 0 their User Agents2 to each other.

What Else:

No, this document isn't complete.3


This is from cursory research, correct me if I'm wrong.
More cursory research, please correct me if I'm wrong.
I plan to build this into the Info Service.
Are they ever?