Wednesday, June 14, 2006

In Pursuit of Interoperability

Microsoft has often been accused of messing with protocol standards and such. I recently found out what this really meant. Ever heard of WINS? No? Well if you are a *nix person, I don’t really blame you. It is a naming service specific to NetBIOS. As with a lot of other things Microsoft attempts to mishmash existing standards and technologies with proprietary stuff. They have this feature that allows you to send a standard DNS request to a sever containing a NetBIOS name. The DNS server unable to resolve this request (duh!) can be configured to forward it on to a WINS server for resolution. Makes sense? What can go wrong here. Well, turns out that if a *nix client makes a zone transfer (AXFR) request to a Windows DNS server, the WINS resource record (RR) will be sent along with the rest of the zone file. The *nix client not knowing how to interpret this crashes and dies. This was in fact a bug in NT and was fixed in one of the innumerable Service Packs that were released for that product. Nowadays, if you want to look at the WINS RR via an AXFR, you will need to declare yourself as a Microsoft DNS client by appending the characters “MS” to a vanilla AXFR request. As if this quirk were not enough, the hex value 0xc00c is to be found pervasively in the results of a AXFR to a Microsoft client. This bizarre separator is explained by the fact that if there is a frequently occurring string, Microsoft’s implementation of DNS attempts to save bandwidth by simply giving a pointer to the very first instance of that string in the packet as explained by this paper. To their credit however, Microsoft does engineer for interoperability. I am not saying its not clever. Just quirky.


Post a Comment

<< Home