Inside LAN Sync
blogs.dropbox.com
blogs.dropbox.com
Not the last time I looked. Apple's SDK seems to be the defacto implementation on Windows.
https://learn.adafruit.com/bonjour-zeroconf-networking-for-w... - hah, looks like you need to get iTunes if you want the newest Bonjour. I might write something to extract it from the installer. I wonder how many EULAs I'd break in the process.
http://lists.freedesktop.org/archives/avahi/2015-October/002...
1: https://developer.apple.com/library/mac/documentation/Networ...
It's definitely an issue with many cases. Unfortunately people make mistakes in implementation and standards have ambiguities, so a common case is doing a lot of interop experiments and code tweaks, and your position is going to be weak if you're not a big player: Others won't test their changes against you and their changes may break your interop.
Depends a lot on the complexity and maturity of the protocol of course, cost/convenience of interop testing, whether there's a de-facto standard/dominant implementation to be bug compatible with, and whether you need (m)any-to-(m)any interop or not.
Something like Bluetooth is going to be the worst case because it's physical devices, can't test it remotely and you need many-to-many interop testing and there are a zillion implementors with varying levels of competency... and something like SMB is going to be easy because everyone talks to 1-2 server implementations and they're just software.
Zeroconf might be somewhere in between.
I think the protocol fairly complex and simultaneously underspecified (if by ZeroConf you mean mDNS and DNS-SD). Mash up multicast, DNS, dynamic DNS updates, and DNS-SD so that every node is running in effect both a DNS server and client... what could possibly go wrong ;)
We must have a completely different definition of 'relatively simple' then.
The Zeroconf way is kind of cumbersome, especially if you don't have an easy way to do the whole mDNS and DNS-SD. And since Windows doesn't have a native way to do this (you need to use the Apple SDK) and it seems most bittorrent users are Windows users, nobody seriously bothered with that.
LPD on the other hand is the simplest thing you can ever think about (https://forum.utorrent.com/topic/54306-local-peer-discovery-...):
> in short: join the multicast group 239.192.152.143:6771 and listen for SSDP messages. Every 5 minutes, announce yourself to the multicast group by sending this message:
> snprintf(msg, 200, "BT-SEARCH * HTTP/1.1\r\n" "Host: 239.192.152.143:6771\r\n" "Port: %d\r\n" "Infohash: %s\r\n" "\r\n\r\n", listen_port, ih_hex);
I'll agree with you that if everyone talked Zeroconf it would be great, but the truth is, it's far too heavy and difficult compared to the alternative of polling a simple UDP socket, which pretty much any language can do easily.
That said, there's nothing novel here. People have been doing this for decades, and extensions to the bittorrent protocol use it all the time to prioritize LAN seeds over internet seeds. In fact, I believe there was talk a while back about optimizing BT to prioritize peers and seeds on the same subnet/ISP as a way of mitigating ISP bandwidth concerns and whatnot.
[1] https://facebook.com//download/1411324735760067/devops.pdf
Specifically, a LANSync peer can only request blocks for which it shares namespace authorization. Each distinct shared folder context (e.g. a folder shared between users, a whole Dropbox folder authorized for a single user on multiple computers) has a different namespace, and that namespace is associated with a keypair, issued by Dropbox. Block discovery and exchange is conducted over HTTPS, with each client and server having to use the key associated with the namespace of the block they wish to exchange.
Since Dropbox clients/peers use SNI to identify the namespace, an eavesdropper on the network could know that two computers have access to the same namespace/folder (it is not clear from the post if the namespace contains any specific identifying information beyond its uniqueness), but not which files (or, more accurately, blocks) that namespace contained. A user who knew the key for a namespace could identify blocks being exchanged, but such a user would already have owned the Dropbox installation enough to have access not just to the list of files but to the files themselves.
http://www.druva.com/documents/Druva-CloudCache-Datasheet.pd...