Host names are not allowed to have underscores in them. In DNS, host names are the name fields of A or MX records or the data fields of the SOA and NS records. Thus, there are many DNS entries that are not hostnames.
RFC 2872 is a perfect counter to the myth that "_" is
non-standard. The RFC is a standards track RFC, and describes SRV records. One of
the authors is Paul Vixie, the original programmer of BIND.
The RFC contains this paragraph:
The symbolic name of the desired protocol, with an underscore
(_) prepended to prevent collisions with DNS labels that occur
in nature. _TCP and _UDP are at present the most useful values
for this field, though any name defined by Assigned Numbers or
locally may be used (as for Service). The Proto is case
and this example:
_foobar._tcp SRV 0 1 9 old-slow-box.example.com.
Thus, the "_" is
purposedly used to disambiguate hosts from other attributes in the
DNS. In fact that's the very reason that the "_" prefix was chosen to differentiate selectors and to avoid collisions with existing namespace.
Similarly, O'Reilly's DNS and Bind states in Chapter 4, section 5, 'Names that are not host names can consist of any printable ASCII character.'