Why the NMDC protocol is terrible

I don’t like the NMDC protocol. I’m sure you’ve noticed that by now. So, in this post I intend to “document” the things that make people shrug when they think of the protocol NMDC. Note that what I’m about to say has no direct correlation to ADC, or that I’m implying that the issues I speak of are somehow fixed.

Now go read the previous sentence again before I begin.

* There is absolutely no protocol specification. Developers need to guess what everyone is sending, because we have no actual way of knowing which implemented solution is the best.
* The protocol was written to support a (relatively small) proprietary client and hub system. Thus, it has both remnants from a time when Jonathan Hess (the author of NMDC) wanted to exclude third-party hubs and clients and when the network was very small, compared to now.
* The lack of a native queing system. In NMDC, when one try to download, one must have the good luck of trying to connect while the other party has a slot open. Since there’s no queing system, everyone is up for grabs; And the people that have been waiting the longest may wait even longer.
* When trying to download from someone, both parties negotiate a “download number”. The one that has the highest number is allowed to download. This mean that if two people are trying to connect to each other, the one with the “cheating client that always claim a very high value” will get to download first.
* While this may seem pety and a non-issue… There are actual commands in the protocol that are spelled incorrectly. Sure, semantic, but still. Darn ugly.
* No native text encoding is enforced on clients.
* There is no security in terms of TLS or similar. (Valknut is the only client I know which has had semi-security in this department. But I haven’t seen anything that resembles a ‘specification’ concerning the extended TLS/SSL functionality.)
* File names is still a central part of file sharing, while this is utterly flawed, which we’ve seen with TTH.
* As the original client didn’t allow for multiple hubs, or the fact that the system wasn’t intended for third-party applications, the tag has been forced upon our description.
* The utter and complete lack of point concerning Locks and Keys in NMDC. It’s a security prevention that prevents nothing at this point. (And also, the fact that certain commands are quite pointless to begin with.)
* No global (or quasi-global) user identification. Everyone is identified by their nicks.
* There is no way to tell one search from another.
* If a client developer want to add a new feature/command to the protocol, other hubs and clients will need to change to support it (or even allow the client to function at all.)

These are the things that spring to mind right now. Anything else that’s just plain awful that I didn’t mentioned?

(In NMDC, the connecting party doesn’t speak first, which I find a little odd. However, it’s nothing I consider “bad”. It’s just odd for me since I’m so used to ADC.)

Don’t forget that you can make topic suggestions for blog posts in our “Blog Topic Suggestion Box!”

5 Responses to Why the NMDC protocol is terrible

  1. Todd Pederzani says:

    I like the specification point. I think more than a couple people just Google for documentation and assume it is correct. Although outdated, I really like the idea of reverse engineering the original NMDC client and NMDC hub to ensure your client works the way it should.

  2. djoffset says:

    A few more points:
    – Password authentication uses plaintext passwords.
    – The protocol doesn’t support IPv6
    – The Client-Client protocol requires too much chatting back and forth, and does not support pipelining (bad performance)
    – The protocol doesn’t escape special characters, like: |, $, , character 0x5 or even spaces in some cases

    I made a longer list a couple of years ago for the DCTNG draft.

  3. jrharshath says:

    do you guys plan on documenting the nmdc protocol for the rest of the world?

    I think there should be a reference document for everybody else to follow…

  4. pietry says:

    Ask Neo Modus then. NMDC is not a protocol invented by DC++ crew, DC++ just reverse engineered the original NMDC client, and added a few things you can see in here http://bazaar.launchpad.net/~dcplusplus-team/dcplusplus/trunk/annotate/head%3A/Extensions.txt

  5. swetoast says:

    if your ill bent on using nmdc well there is an unofficial that could be used as official documentation

    http://www.teamfair.info/wiki/index.php?title=Main_Page

    but i would recommend ADC instead since the protocol is way better extensional protocol then NMDC

    http://adc.sourceforge.net/ADC.html

Leave a comment