/socket6bed4

Java implementation of 6bed4, as a DatagramSocket subclass

Primary LanguageJavaGNU General Public License v3.0GPL-3.0

Socket6bed4 README
==================

Socket6bed4 is a Java package that introduces an IPv6 tunnel as a socket subclass.
There is no need to configure anything, just adapt your datagram factory to the
new tunnel and you will be able to use IPv6.


Purpose
-------

Java is used in many places, including some that will remain IPv4-only for years
to come.  The 6bed4 tunnel is a zero-config tunnel that eliminates dependency on
your ISP so you can assume that IPv6 is always available.  Or better even, you
can distribute Java software that is IPv6-only by using 6bed4 as a fallback for
users that don't have native IPv6 yet.


About 6bed4
-----------

The design of 6bed4 is intended to support zero-config operation.  You are welcome
to setup your private 6bed4 server though; it will still be able to communicate
with the rest of the IPv6 world, native as well as 6bed4.

The design of 6bed4 also explicitly supports peer-to-peer communication.  It will
attempt to setup direct links between clients, which are therefore referred to as
peers instead of clients.  The tunnel server is a fallback service, and will only
be used in practice if a symmetric NAT is used anywhere between the peers.  This
means that 6bed4 is suitable for realtime media streaming between directly
connected peers.  The disadvantages of IPv4 are not transferred to IPv6 through
this tunnel mechanism!

Until 6bed4 is a formal IETF standard, something that we are indeed working
towards, there is a serious chance that the addresses used will change in the
future.  This means that you should keep an eye on such changes and keep the
software using 6bed4 up to date.  To help you with that, announcements of
such an infrastructural nature are sent to an extremely low-traffic list,

https://lists.sourceforge.net/lists/listinfo/tun6bed4-infra

More information about the 6bed4 tunnel is concentrated at

http://devel.0cpm.org/6bed4

Specifically for this module, you will find information on

http://devel.0cpm.org/6bed4/java-socket6bed4


Using Socket6bed4 on a peer or client
-------------------------------------

We prefer to speak of 6bed4 endpoints as peers, rather than clients.  This is to
emphasise that they are normally connected to each other, instead of to an
intermediate server.

Peer use of 6bed4 is straightforward.  You should adapt the code that generates
your DatagramSocket to create an instance of nl.openfortress.DatagramSocket6bed4
instead.  That's all.  If you are already using a factory, you have to do this in
one place only.

If you have access to a native IPv6 address, you probably want to prefer using
that.  We will not enforce that however -- as we can imagine that you would want
to run native IPv6 and 6bed4 in parallel, to approach other 6bed4 peers in
parallel with yours.


Using Socket6bed4 on a server
-----------------------------

Every run of Java will normally create a different IPv6 address.  This address
contains the external IPv4 address and UDP port for use with the server.  These
will change every restart of the Socket6bed4 stack, so a server-side address
would not be fixed.  This may present a problem; let us know if this is important
for you.


Feedback
--------

We would like to hear what you use Socket6bed4 for.