Re: [jgroups-dev] Creating a STUNT protocol for JGroups?
Mike Jensen <[email protected]> Tue, 19 Oct 2010 07:47:19 -0600
| Newsgroups | gmane.comp.java.javagroups.devel |
|---|---|
| Message-ID | <[email protected]> |
Thanks for your reply. You make excellent points and I agree, I don't think STUNT is very doable. I thought about using UDP, but I am not confident how my system will work with it. I will spend some time playing with that today. but it might be a long startup time to learn the tools. Any advice on what/how to force packet loss in a udp system? Would NS2 be my best tool to simulate something like that? With that said, I think it needs to be tested. But I can't point to any specific reason jgroups existing reliability mechanisms wont work. I expect that it will probably work fine. Knowing this first though will help me decide if I want to work on a STUN protocol. As always, thanks for your help! Bela Ban wrote: > > > Mike Jensen wrote: >> I was just curious as to what it would take to create a STUNT protocol >> for JGroups. You can read about STUNT here: >> http://nutss.gforge.cis.cornell.edu/publications.php >> http://nutss.gforge.cis.cornell.edu/pub/imc05-tcpnat.pdf > > I read the paper this morning. My conclusion is that TCP stunning is > impossible to implement in JGroups because (1) it requires access to > networking stack internals (such as raw sockets or ICMP handling) and > (2) support for all different NATs would require a lot of protocols... > > However, we could implement STUN for UDP. This looks much simpler than > TCP stunning. > > This means that treemesh would be based on UDP (unicasting) as > transport, which IMO shouldn't be an issue as JGroups provides > reliability over UDP... > > We might be able to implement stunning as a protocol (STUN), which > keeps track of (virtual) connections for which we don't yet have a > STUN connection yet, and punch the firewall the first time we send a > message to a destination for which we don't yet have a connection. > >> Basically it is like STUN, except it is not specific to UDP, but tries >> to punch through TCP by having a middle hosts. Long story short, I >> believe it works by simply having an open connection to a server. Then >> you have that server drop the connection and immediately have a third >> host take over that open port in the firewall. It sounds like on most >> firewalls this will let you have two natted machines have a TCP >> connection to each other. > > I don't think this will work: as discussed in the paper, this will > work only if you have the right TCP seqno for the third host, which > requires seqno guessing. This works only if you have access to the > ICMP layer and are able to catch the ICMP error message which contains > the seqno. > >> Something like this has obvious benefits for P2P as well as my >> protocol. I was hoping to show my treeMesh chat program demo in the >> next couple weeks. But in order to have chat members establish >> connections to other chat members something like this would be needed. >> Any advice as to how difficult you think this might be? > > Mission impossible ! :-) At least in Java. Even if you do this in C, > it's a hairy mess to implement... > >> In order to get >> such precise control on the sockets would I need to create a new >> protocol that extends TCP? Or at a high level how might this work? >> (just trying to gauge if it is worth the effort or not right now) > > I honestly believe this is NOT doable. Your best bet at STUNning is to > use UDP as transport. Do you want to take that route ? Might actually > be an advantage as you don't need to maintain connection tables and > sockets plus threads... > >> Alternatively, if I don't create a STUNT protocol here is what I am >> thinking I might do: >> * Have a root node that accepts unlimited connections (to function as >> the IRC bridge) > > Like GossipRouter and TUNNEL... Not really P2P like (although you can > have multiple GossipRouters and distribute the traffic among them)... > >> * Use a gossip server so that multiple chat instances on the same LAN >> can establish a normal tree like structure. >> >> But I don't expect it to truly show off the benefits of the treeMesh >> doing something like this. The only other option I see is just have no >> IRC bridge, and just have the chat program only work with other LAN >> members (would use MPING for discovery then). But that's not very >> interesting! >> >> Any thoughts on the best way to demo the TreeMESH protocol? > > Switch to UDP as transport *if* there are firewalls / NATs involved, > and implement STUN. I might actually be interested in implementing > STUN myself... :-) > >> Thanks everyone. Expect an update from me in the next couple weeks to >> be sure. I am working on updating documentation, and currently just >> trying to fix some bugs with graph partitions/merging. I have also done >> some performance based testing, but want to do more. But in general it >> has (IMO) been starting to work pretty darn good. > > Excellent ! > > Don't be shy to ping me directly (skype, IRC) if you want an > interactive discussion ! > Cheers, > ------------------------------------------------------------------------------ Download new Adobe(R) Flash(R) Builder(TM) 4 The new Adobe(R) Flex(R) 4 and Flash(R) Builder(TM) 4 (formerly Flex(R) Builder(TM)) enable the development of rich applications that run across multiple browsers and platforms. Download your free trials today! http://p.sf.net/sfu/adobe-dev2dev _______________________________________________ Javagroups-development mailing list