12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923 |
- Internet Engineering Task Force (IETF) S. Cheshire
- Request for Comments: 6762 M. Krochmal
- Category: Standards Track Apple Inc.
- ISSN: 2070-1721 February 2013
- Multicast DNS
- Abstract
- As networked devices become smaller, more portable, and more
- ubiquitous, the ability to operate with less configured
- infrastructure is increasingly important. In particular, the ability
- to look up DNS resource record data types (including, but not limited
- to, host names) in the absence of a conventional managed DNS server
- is useful.
- Multicast DNS (mDNS) provides the ability to perform DNS-like
- operations on the local link in the absence of any conventional
- Unicast DNS server. In addition, Multicast DNS designates a portion
- of the DNS namespace to be free for local use, without the need to
- pay any annual fee, and without the need to set up delegations or
- otherwise configure a conventional DNS server to answer for those
- names.
- The primary benefits of Multicast DNS names are that (i) they require
- little or no administration or configuration to set them up, (ii)
- they work when no infrastructure is present, and (iii) they work
- during infrastructure failures.
- Status of This Memo
- This is an Internet Standards Track document.
- This document is a product of the Internet Engineering Task Force
- (IETF). It represents the consensus of the IETF community. It has
- received public review and has been approved for publication by the
- Internet Engineering Steering Group (IESG). Further information on
- Internet Standards is available in Section 2 of RFC 5741.
- Information about the current status of this document, any errata,
- and how to provide feedback on it may be obtained at
- http://www.rfc-editor.org/info/rfc6762.
- Cheshire & Krochmal Standards Track [Page 1]
- RFC 6762 Multicast DNS February 2013
- Copyright Notice
- Copyright (c) 2013 IETF Trust and the persons identified as the
- document authors. All rights reserved.
- This document is subject to BCP 78 and the IETF Trust's Legal
- Provisions Relating to IETF Documents
- (http://trustee.ietf.org/license-info) in effect on the date of
- publication of this document. Please review these documents
- carefully, as they describe your rights and restrictions with respect
- to this document. Code Components extracted from this document must
- include Simplified BSD License text as described in Section 4.e of
- the Trust Legal Provisions and are provided without warranty as
- described in the Simplified BSD License.
- This document may contain material from IETF Documents or IETF
- Contributions published or made publicly available before November
- 10, 2008. The person(s) controlling the copyright in some of this
- material may not have granted the IETF Trust the right to allow
- modifications of such material outside the IETF Standards Process.
- Without obtaining an adequate license from the person(s) controlling
- the copyright in such materials, this document may not be modified
- outside the IETF Standards Process, and derivative works of it may
- not be created outside the IETF Standards Process, except to format
- it for publication as an RFC or to translate it into languages other
- than English.
- Cheshire & Krochmal Standards Track [Page 2]
- RFC 6762 Multicast DNS February 2013
- Table of Contents
- 1. Introduction ....................................................4
- 2. Conventions and Terminology Used in This Document ...............4
- 3. Multicast DNS Names .............................................5
- 4. Reverse Address Mapping .........................................7
- 5. Querying ........................................................8
- 6. Responding .....................................................13
- 7. Traffic Reduction ..............................................22
- 8. Probing and Announcing on Startup ..............................25
- 9. Conflict Resolution ............................................31
- 10. Resource Record TTL Values and Cache Coherency ................33
- 11. Source Address Check ..........................................38
- 12. Special Characteristics of Multicast DNS Domains ..............40
- 13. Enabling and Disabling Multicast DNS ..........................41
- 14. Considerations for Multiple Interfaces ........................42
- 15. Considerations for Multiple Responders on the Same Machine ....43
- 16. Multicast DNS Character Set ...................................45
- 17. Multicast DNS Message Size ....................................46
- 18. Multicast DNS Message Format ..................................47
- 19. Summary of Differences between Multicast DNS and Unicast DNS ..51
- 20. IPv6 Considerations ...........................................52
- 21. Security Considerations .......................................52
- 22. IANA Considerations ...........................................53
- 23. Acknowledgments ...............................................56
- 24. References ....................................................56
- Appendix A. Design Rationale for Choice of UDP Port Number ........60
- Appendix B. Design Rationale for Not Using Hashed Multicast
- Addresses .............................................61
- Appendix C. Design Rationale for Maximum Multicast DNS Name
- Length ................................................62
- Appendix D. Benefits of Multicast Responses .......................64
- Appendix E. Design Rationale for Encoding Negative Responses ......65
- Appendix F. Use of UTF-8 ..........................................66
- Appendix G. Private DNS Namespaces ................................67
- Appendix H. Deployment History ....................................67
- Cheshire & Krochmal Standards Track [Page 3]
- RFC 6762 Multicast DNS February 2013
- 1. Introduction
- Multicast DNS and its companion technology DNS-Based Service
- Discovery [RFC6763] were created to provide IP networking with the
- ease-of-use and autoconfiguration for which AppleTalk was well-known
- [RFC6760]. When reading this document, familiarity with the concepts
- of Zero Configuration Networking [Zeroconf] and automatic link-local
- addressing [RFC3927] [RFC4862] is helpful.
- Multicast DNS borrows heavily from the existing DNS protocol
- [RFC1034] [RFC1035] [RFC6195], using the existing DNS message
- structure, name syntax, and resource record types. This document
- specifies no new operation codes or response codes. This document
- describes how clients send DNS-like queries via IP multicast, and how
- a collection of hosts cooperate to collectively answer those queries
- in a useful manner.
- 2. Conventions and Terminology Used in This Document
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
- document are to be interpreted as described in "Key words for use in
- RFCs to Indicate Requirement Levels" [RFC2119].
- When this document uses the term "Multicast DNS", it should be taken
- to mean: "Clients performing DNS-like queries for DNS-like resource
- records by sending DNS-like UDP query and response messages over IP
- Multicast to UDP port 5353". The design rationale for selecting UDP
- port 5353 is discussed in Appendix A.
- This document uses the term "host name" in the strict sense to mean a
- fully qualified domain name that has an IPv4 or IPv6 address record.
- It does not use the term "host name" in the commonly used but
- incorrect sense to mean just the first DNS label of a host's fully
- qualified domain name.
- A DNS (or mDNS) packet contains an IP Time to Live (TTL) in the IP
- header, which is effectively a hop-count limit for the packet, to
- guard against routing loops. Each resource record also contains a
- TTL, which is the number of seconds for which the resource record may
- be cached. This document uses the term "IP TTL" to refer to the IP
- header TTL (hop limit), and the term "RR TTL" or just "TTL" to refer
- to the resource record TTL (cache lifetime).
- DNS-format messages contain a header, a Question Section, then
- Answer, Authority, and Additional Record Sections. The Answer,
- Authority, and Additional Record Sections all hold resource records
- Cheshire & Krochmal Standards Track [Page 4]
- RFC 6762 Multicast DNS February 2013
- in the same format. Where this document describes issues that apply
- equally to all three sections, it uses the term "Resource Record
- Sections" to refer collectively to these three sections.
- This document uses the terms "shared" and "unique" when referring to
- resource record sets [RFC1034]:
- A "shared" resource record set is one where several Multicast DNS
- responders may have records with the same name, rrtype, and
- rrclass, and several responders may respond to a particular query.
- A "unique" resource record set is one where all the records with
- that name, rrtype, and rrclass are conceptually under the control
- or ownership of a single responder, and it is expected that at
- most one responder should respond to a query for that name,
- rrtype, and rrclass. Before claiming ownership of a unique
- resource record set, a responder MUST probe to verify that no
- other responder already claims ownership of that set, as described
- in Section 8.1, "Probing". (For fault-tolerance and other
- reasons, sometimes it is permissible to have more than one
- responder answering for a particular "unique" resource record set,
- but such cooperating responders MUST give answers containing
- identical rdata for these records. If they do not give answers
- containing identical rdata, then the probing step will reject the
- data as being inconsistent with what is already being advertised
- on the network for those names.)
- Strictly speaking, the terms "shared" and "unique" apply to resource
- record sets, not to individual resource records. However, it is
- sometimes convenient to talk of "shared resource records" and "unique
- resource records". When used this way, the terms should be
- understood to mean a record that is a member of a "shared" or
- "unique" resource record set, respectively.
- 3. Multicast DNS Names
- A host that belongs to an organization or individual who has control
- over some portion of the DNS namespace can be assigned a globally
- unique name within that portion of the DNS namespace, such as,
- "cheshire.example.com.". For those of us who have this luxury, this
- works very well. However, the majority of home computer users do not
- have easy access to any portion of the global DNS namespace within
- which they have the authority to create names. This leaves the
- majority of home computers effectively anonymous for practical
- purposes.
- Cheshire & Krochmal Standards Track [Page 5]
- RFC 6762 Multicast DNS February 2013
- To remedy this problem, this document allows any computer user to
- elect to give their computers link-local Multicast DNS host names of
- the form: "single-dns-label.local.". For example, a laptop computer
- may answer to the name "MyComputer.local.". Any computer user is
- granted the authority to name their computer this way, provided that
- the chosen host name is not already in use on that link. Having
- named their computer this way, the user has the authority to continue
- utilizing that name until such time as a name conflict occurs on the
- link that is not resolved in the user's favor. If this happens, the
- computer (or its human user) MUST cease using the name, and SHOULD
- attempt to allocate a new unique name for use on that link. These
- conflicts are expected to be relatively rare for people who choose
- reasonably imaginative names, but it is still important to have a
- mechanism in place to handle them when they happen.
- This document specifies that the DNS top-level domain ".local." is a
- special domain with special semantics, namely that any fully
- qualified name ending in ".local." is link-local, and names within
- this domain are meaningful only on the link where they originate.
- This is analogous to IPv4 addresses in the 169.254/16 prefix or IPv6
- addresses in the FE80::/10 prefix, which are link-local and
- meaningful only on the link where they originate.
- Any DNS query for a name ending with ".local." MUST be sent to the
- mDNS IPv4 link-local multicast address 224.0.0.251 (or its IPv6
- equivalent FF02::FB). The design rationale for using a fixed
- multicast address instead of selecting from a range of multicast
- addresses using a hash function is discussed in Appendix B.
- Implementers MAY choose to look up such names concurrently via other
- mechanisms (e.g., Unicast DNS) and coalesce the results in some
- fashion. Implementers choosing to do this should be aware of the
- potential for user confusion when a given name can produce different
- results depending on external network conditions (such as, but not
- limited to, which name lookup mechanism responds faster).
- It is unimportant whether a name ending with ".local." occurred
- because the user explicitly typed in a fully qualified domain name
- ending in ".local.", or because the user entered an unqualified
- domain name and the host software appended the suffix ".local."
- because that suffix appears in the user's search list. The ".local."
- suffix could appear in the search list because the user manually
- configured it, or because it was received via DHCP [RFC2132] or via
- any other mechanism for configuring the DNS search list. In this
- respect the ".local." suffix is treated no differently from any other
- search domain that might appear in the DNS search list.
- Cheshire & Krochmal Standards Track [Page 6]
- RFC 6762 Multicast DNS February 2013
- DNS queries for names that do not end with ".local." MAY be sent to
- the mDNS multicast address, if no other conventional DNS server is
- available. This can allow hosts on the same link to continue
- communicating using each other's globally unique DNS names during
- network outages that disrupt communication with the greater Internet.
- When resolving global names via local multicast, it is even more
- important to use DNS Security Extensions (DNSSEC) [RFC4033] or other
- security mechanisms to ensure that the response is trustworthy.
- Resolving global names via local multicast is a contentious issue,
- and this document does not discuss it further, instead concentrating
- on the issue of resolving local names using DNS messages sent to a
- multicast address.
- This document recommends a single flat namespace for dot-local host
- names, (i.e., the names of DNS "A" and "AAAA" records, which map
- names to IPv4 and IPv6 addresses), but other DNS record types (such
- as those used by DNS-Based Service Discovery [RFC6763]) may contain
- as many labels as appropriate for the desired usage, up to a maximum
- of 255 bytes, plus a terminating zero byte at the end. Name length
- issues are discussed further in Appendix C.
- Enforcing uniqueness of host names is probably desirable in the
- common case, but this document does not mandate that. It is
- permissible for a collection of coordinated hosts to agree to
- maintain multiple DNS address records with the same name, possibly
- for load-balancing or fault-tolerance reasons. This document does
- not take a position on whether that is sensible. It is important
- that both modes of operation be supported. The Multicast DNS
- protocol allows hosts to verify and maintain unique names for
- resource records where that behavior is desired, and it also allows
- hosts to maintain multiple resource records with a single shared name
- where that behavior is desired. This consideration applies to all
- resource records, not just address records (host names). In summary:
- It is required that the protocol have the ability to detect and
- handle name conflicts, but it is not required that this ability be
- used for every record.
- 4. Reverse Address Mapping
- Like ".local.", the IPv4 and IPv6 reverse mapping domains are also
- defined to be link-local:
- Any DNS query for a name ending with "254.169.in-addr.arpa." MUST
- be sent to the mDNS IPv4 link-local multicast address 224.0.0.251
- or the mDNS IPv6 multicast address FF02::FB. Since names under
- this domain correspond to IPv4 link-local addresses, it is logical
- that the local link is the best place to find information
- pertaining to those names.
- Cheshire & Krochmal Standards Track [Page 7]
- RFC 6762 Multicast DNS February 2013
- Likewise, any DNS query for a name within the reverse mapping
- domains for IPv6 link-local addresses ("8.e.f.ip6.arpa.",
- "9.e.f.ip6.arpa.", "a.e.f.ip6.arpa.", and "b.e.f.ip6.arpa.") MUST
- be sent to the mDNS IPv6 link-local multicast address FF02::FB or
- the mDNS IPv4 link-local multicast address 224.0.0.251.
- 5. Querying
- There are two kinds of Multicast DNS queries: one-shot queries of the
- kind made by legacy DNS resolvers, and continuous, ongoing Multicast
- DNS queries made by fully compliant Multicast DNS queriers, which
- support asynchronous operations including DNS-Based Service Discovery
- [RFC6763].
- Except in the rare case of a Multicast DNS responder that is
- advertising only shared resource records and no unique records, a
- Multicast DNS responder MUST also implement a Multicast DNS querier
- so that it can first verify the uniqueness of those records before it
- begins answering queries for them.
- 5.1. One-Shot Multicast DNS Queries
- The most basic kind of Multicast DNS client may simply send standard
- DNS queries blindly to 224.0.0.251:5353, without necessarily even
- being aware of what a multicast address is. This change can
- typically be implemented with just a few lines of code in an existing
- DNS resolver library. If a name being queried falls within one of
- the reserved Multicast DNS domains (see Sections 3 and 4), then,
- rather than using the configured Unicast DNS server address, the
- query is instead sent to 224.0.0.251:5353 (or its IPv6 equivalent
- [FF02::FB]:5353). Typically, the timeout would also be shortened to
- two or three seconds. It's possible to make a minimal Multicast DNS
- resolver with only these simple changes. These queries are typically
- done using a high-numbered ephemeral UDP source port, but regardless
- of whether they are sent from a dynamic port or from a fixed port,
- these queries MUST NOT be sent using UDP source port 5353, since
- using UDP source port 5353 signals the presence of a fully compliant
- Multicast DNS querier, as described below.
- A simple DNS resolver like this will typically just take the first
- response it receives. It will not listen for additional UDP
- responses, but in many instances this may not be a serious problem.
- If a user types "http://MyPrinter.local." into their web browser, and
- their simple DNS resolver just takes the first response it receives,
- and the user gets to see the status and configuration web page for
- their printer, then the protocol has met the user's needs in this
- case.
- Cheshire & Krochmal Standards Track [Page 8]
- RFC 6762 Multicast DNS February 2013
- While a basic DNS resolver like this may be adequate for simple host
- name lookup, it may not get ideal behavior in other cases.
- Additional refinements to create a fully compliant Multicast DNS
- querier are described below.
- 5.2. Continuous Multicast DNS Querying
- In one-shot queries, the underlying assumption is that the
- transaction begins when the application issues a query, and ends when
- the first response is received. There is another type of query
- operation that is more asynchronous, in which having received one
- response is not necessarily an indication that there will be no more
- relevant responses, and the querying operation continues until no
- further responses are required. Determining when no further
- responses are required depends on the type of operation being
- performed. If the operation is looking up the IPv4 and IPv6
- addresses of another host, then no further responses are required
- once a successful connection has been made to one of those IPv4 or
- IPv6 addresses. If the operation is browsing to present the user
- with a list of DNS-SD services found on the network [RFC6763], then
- no further responses are required once the user indicates this to the
- user-interface software, e.g., by closing the network browsing window
- that was displaying the list of discovered services.
- Imagine some hypothetical software that allows users to discover
- network printers. The user wishes to discover all printers on the
- local network, not only the printer that is quickest to respond.
- When the user is actively looking for a network printer to use, they
- open a network browsing window that displays the list of discovered
- printers. It would be convenient for the user if they could rely on
- this list of network printers to stay up to date as network printers
- come and go, rather than displaying out-of-date stale information,
- and requiring the user explicitly to click a "refresh" button any
- time they want to see accurate information (which, from the moment it
- is displayed, is itself already beginning to become out-of-date and
- stale). If we are to display a continuously updated live list like
- this, we need to be able to do it efficiently, without naive constant
- polling, which would be an unreasonable burden on the network. It is
- not expected that all users will be browsing to discover new printers
- all the time, but when a user is browsing to discover service
- instances for an extended period, we want to be able to support that
- operation efficiently.
- Therefore, when retransmitting Multicast DNS queries to implement
- this kind of continuous monitoring, the interval between the first
- two queries MUST be at least one second, the intervals between
- successive queries MUST increase by at least a factor of two, and the
- querier MUST implement Known-Answer Suppression, as described below
- Cheshire & Krochmal Standards Track [Page 9]
- RFC 6762 Multicast DNS February 2013
- in Section 7.1. The Known-Answer Suppression mechanism tells
- responders which answers are already known to the querier, thereby
- allowing responders to avoid wasting network capacity with pointless
- repeated transmission of those answers. A querier retransmits its
- question because it wishes to receive answers it may have missed the
- first time, not because it wants additional duplicate copies of
- answers it already received. Failure to implement Known-Answer
- Suppression can result in unacceptable levels of network traffic.
- When the interval between queries reaches or exceeds 60 minutes, a
- querier MAY cap the interval to a maximum of 60 minutes, and perform
- subsequent queries at a steady-state rate of one query per hour. To
- avoid accidental synchronization when, for some reason, multiple
- clients begin querying at exactly the same moment (e.g., because of
- some common external trigger event), a Multicast DNS querier SHOULD
- also delay the first query of the series by a randomly chosen amount
- in the range 20-120 ms.
- When a Multicast DNS querier receives an answer, the answer contains
- a TTL value that indicates for how many seconds this answer is valid.
- After this interval has passed, the answer will no longer be valid
- and SHOULD be deleted from the cache. Before the record expiry time
- is reached, a Multicast DNS querier that has local clients with an
- active interest in the state of that record (e.g., a network browsing
- window displaying a list of discovered services to the user) SHOULD
- reissue its query to determine whether the record is still valid.
- To perform this cache maintenance, a Multicast DNS querier should
- plan to retransmit its query after at least 50% of the record
- lifetime has elapsed. This document recommends the following
- specific strategy.
- The querier should plan to issue a query at 80% of the record
- lifetime, and then if no answer is received, at 85%, 90%, and 95%.
- If an answer is received, then the remaining TTL is reset to the
- value given in the answer, and this process repeats for as long as
- the Multicast DNS querier has an ongoing interest in the record. If
- no answer is received after four queries, the record is deleted when
- it reaches 100% of its lifetime. A Multicast DNS querier MUST NOT
- perform this cache maintenance for records for which it has no local
- clients with an active interest. If the expiry of a particular
- record from the cache would result in no net effect to any client
- software running on the querier device, and no visible effect to the
- human user, then there is no reason for the Multicast DNS querier to
- waste network capacity checking whether the record remains valid.
- Cheshire & Krochmal Standards Track [Page 10]
- RFC 6762 Multicast DNS February 2013
- To avoid the case where multiple Multicast DNS queriers on a network
- all issue their queries simultaneously, a random variation of 2% of
- the record TTL should be added, so that queries are scheduled to be
- performed at 80-82%, 85-87%, 90-92%, and then 95-97% of the TTL.
- An additional efficiency optimization SHOULD be performed when a
- Multicast DNS response is received containing a unique answer (as
- indicated by the cache-flush bit being set, described in Section
- 10.2, "Announcements to Flush Outdated Cache Entries"). In this
- case, there is no need for the querier to continue issuing a stream
- of queries with exponentially increasing intervals, since the receipt
- of a unique answer is a good indication that no other answers will be
- forthcoming. In this case, the Multicast DNS querier SHOULD plan to
- issue its next query for this record at 80-82% of the record's TTL,
- as described above.
- A compliant Multicast DNS querier, which implements the rules
- specified in this document, MUST send its Multicast DNS queries from
- UDP source port 5353 (the well-known port assigned to mDNS), and MUST
- listen for Multicast DNS replies sent to UDP destination port 5353 at
- the mDNS link-local multicast address (224.0.0.251 and/or its IPv6
- equivalent FF02::FB).
- 5.3. Multiple Questions per Query
- Multicast DNS allows a querier to place multiple questions in the
- Question Section of a single Multicast DNS query message.
- The semantics of a Multicast DNS query message containing multiple
- questions is identical to a series of individual DNS query messages
- containing one question each. Combining multiple questions into a
- single message is purely an efficiency optimization and has no other
- semantic significance.
- 5.4. Questions Requesting Unicast Responses
- Sending Multicast DNS responses via multicast has the benefit that
- all the other hosts on the network get to see those responses,
- enabling them to keep their caches up to date and detect conflicting
- responses.
- However, there are situations where all the other hosts on the
- network don't need to see every response. Some examples are a laptop
- computer waking from sleep, the Ethernet cable being connected to a
- running machine, or a previously inactive interface being activated
- through a configuration change. At the instant of wake-up or link
- activation, the machine is a brand new participant on a new network.
- Its Multicast DNS cache for that interface is empty, and it has no
- Cheshire & Krochmal Standards Track [Page 11]
- RFC 6762 Multicast DNS February 2013
- knowledge of its peers on that link. It may have a significant
- number of questions that it wants answered right away, to discover
- information about its new surroundings and present that information
- to the user. As a new participant on the network, it has no idea
- whether the exact same questions may have been asked and answered
- just seconds ago. In this case, triggering a large sudden flood of
- multicast responses may impose an unreasonable burden on the network.
- To avoid large floods of potentially unnecessary responses in these
- cases, Multicast DNS defines the top bit in the class field of a DNS
- question as the unicast-response bit. When this bit is set in a
- question, it indicates that the querier is willing to accept unicast
- replies in response to this specific query, as well as the usual
- multicast responses. These questions requesting unicast responses
- are referred to as "QU" questions, to distinguish them from the more
- usual questions requesting multicast responses ("QM" questions). A
- Multicast DNS querier sending its initial batch of questions
- immediately on wake from sleep or interface activation SHOULD set the
- unicast-response bit in those questions.
- When a question is retransmitted (as described in Section 5.2), the
- unicast-response bit SHOULD NOT be set in subsequent retransmissions
- of that question. Subsequent retransmissions SHOULD be usual "QM"
- questions. After the first question has received its responses, the
- querier should have a large Known-Answer list (Section 7.1) so that
- subsequent queries should elicit few, if any, further responses.
- Reverting to multicast responses as soon as possible is important
- because of the benefits that multicast responses provide (see
- Appendix D). In addition, the unicast-response bit SHOULD be set
- only for questions that are active and ready to be sent the moment of
- wake from sleep or interface activation. New questions created by
- local clients afterwards should be treated as normal "QM" questions
- and SHOULD NOT have the unicast-response bit set on the first
- question of the series.
- When receiving a question with the unicast-response bit set, a
- responder SHOULD usually respond with a unicast packet directed back
- to the querier. However, if the responder has not multicast that
- record recently (within one quarter of its TTL), then the responder
- SHOULD instead multicast the response so as to keep all the peer
- caches up to date, and to permit passive conflict detection. In the
- case of answering a probe question (Section 8.1) with the unicast-
- response bit set, the responder should always generate the requested
- unicast response, but it may also send a multicast announcement if
- the time since the last multicast announcement of that record is more
- than a quarter of its TTL.
- Cheshire & Krochmal Standards Track [Page 12]
- RFC 6762 Multicast DNS February 2013
- Unicast replies are subject to all the same packet generation rules
- as multicast replies, including the cache-flush bit (Section 10.2)
- and (except when defending a unique name against a probe from another
- host) randomized delays to reduce network collisions (Section 6).
- 5.5. Direct Unicast Queries to Port 5353
- In specialized applications there may be rare situations where it
- makes sense for a Multicast DNS querier to send its query via unicast
- to a specific machine. When a Multicast DNS responder receives a
- query via direct unicast, it SHOULD respond as it would for "QU"
- questions, as described above in Section 5.4. Since it is possible
- for a unicast query to be received from a machine outside the local
- link, responders SHOULD check that the source address in the query
- packet matches the local subnet for that link (or, in the case of
- IPv6, the source address has an on-link prefix) and silently ignore
- the packet if not.
- There may be specialized situations, outside the scope of this
- document, where it is intended and desirable to create a responder
- that does answer queries originating outside the local link. Such a
- responder would need to ensure that these non-local queries are
- always answered via unicast back to the querier, since an answer sent
- via link-local multicast would not reach a querier outside the local
- link.
- 6. Responding
- When a Multicast DNS responder constructs and sends a Multicast DNS
- response message, the Resource Record Sections of that message must
- contain only records for which that responder is explicitly
- authoritative. These answers may be generated because the record
- answers a question received in a Multicast DNS query message, or at
- certain other times that the responder determines than an unsolicited
- announcement is warranted. A Multicast DNS responder MUST NOT place
- records from its cache, which have been learned from other responders
- on the network, in the Resource Record Sections of outgoing response
- messages. Only an authoritative source for a given record is allowed
- to issue responses containing that record.
- The determination of whether a given record answers a given question
- is made using the standard DNS rules: the record name must match the
- question name, the record rrtype must match the question qtype unless
- the qtype is "ANY" (255) or the rrtype is "CNAME" (5), and the record
- rrclass must match the question qclass unless the qclass is "ANY"
- (255). As with Unicast DNS, generally only DNS class 1 ("Internet")
- is used, but should client software use classes other than 1, the
- matching rules described above MUST be used.
- Cheshire & Krochmal Standards Track [Page 13]
- RFC 6762 Multicast DNS February 2013
- A Multicast DNS responder MUST only respond when it has a positive,
- non-null response to send, or it authoritatively knows that a
- particular record does not exist. For unique records, where the host
- has already established sole ownership of the name, it MUST return
- negative answers to queries for records that it knows not to exist.
- For example, a host with no IPv6 address, that has claimed sole
- ownership of the name "host.local." for all rrtypes, MUST respond to
- AAAA queries for "host.local." by sending a negative answer
- indicating that no AAAA records exist for that name. See Section
- 6.1, "Negative Responses". For shared records, which are owned by no
- single host, the nonexistence of a given record is ascertained by the
- failure of any machine to respond to the Multicast DNS query, not by
- any explicit negative response. For shared records, NXDOMAIN and
- other error responses MUST NOT be sent.
- Multicast DNS responses MUST NOT contain any questions in the
- Question Section. Any questions in the Question Section of a
- received Multicast DNS response MUST be silently ignored. Multicast
- DNS queriers receiving Multicast DNS responses do not care what
- question elicited the response; they care only that the information
- in the response is true and accurate.
- A Multicast DNS responder on Ethernet [IEEE.802.3] and similar shared
- multiple access networks SHOULD have the capability of delaying its
- responses by up to 500 ms, as described below.
- If a large number of Multicast DNS responders were all to respond
- immediately to a particular query, a collision would be virtually
- guaranteed. By imposing a small random delay, the number of
- collisions is dramatically reduced. On a full-sized Ethernet using
- the maximum cable lengths allowed and the maximum number of repeaters
- allowed, an Ethernet frame is vulnerable to collisions during the
- transmission of its first 256 bits. On 10 Mb/s Ethernet, this
- equates to a vulnerable time window of 25.6 microseconds. On higher-
- speed variants of Ethernet, the vulnerable time window is shorter.
- In the case where a Multicast DNS responder has good reason to
- believe that it will be the only responder on the link that will send
- a response (i.e., because it is able to answer every question in the
- query message, and for all of those answer records it has previously
- verified that the name, rrtype, and rrclass are unique on the link),
- it SHOULD NOT impose any random delay before responding, and SHOULD
- normally generate its response within at most 10 ms. In particular,
- this applies to responding to probe queries with the unicast-response
- bit set. Since receiving a probe query gives a clear indication that
- some other responder is planning to start using this name in the very
- near future, answering such probe queries to defend a unique record
- is a high priority and needs to be done without delay. A probe query
- Cheshire & Krochmal Standards Track [Page 14]
- RFC 6762 Multicast DNS February 2013
- can be distinguished from a normal query by the fact that a probe
- query contains a proposed record in the Authority Section that
- answers the question in the Question Section (for more details, see
- Section 8.2, "Simultaneous Probe Tiebreaking").
- Responding without delay is appropriate for records like the address
- record for a particular host name, when the host name has been
- previously verified unique. Responding without delay is *not*
- appropriate for things like looking up PTR records used for DNS-Based
- Service Discovery [RFC6763], where a large number of responses may be
- anticipated.
- In any case where there may be multiple responses, such as queries
- where the answer is a member of a shared resource record set, each
- responder SHOULD delay its response by a random amount of time
- selected with uniform random distribution in the range 20-120 ms.
- The reason for requiring that the delay be at least 20 ms is to
- accommodate the situation where two or more query packets are sent
- back-to-back, because in that case we want a responder with answers
- to more than one of those queries to have the opportunity to
- aggregate all of its answers into a single response message.
- In the case where the query has the TC (truncated) bit set,
- indicating that subsequent Known-Answer packets will follow,
- responders SHOULD delay their responses by a random amount of time
- selected with uniform random distribution in the range 400-500 ms, to
- allow enough time for all the Known-Answer packets to arrive, as
- described in Section 7.2, "Multipacket Known-Answer Suppression".
- The source UDP port in all Multicast DNS responses MUST be 5353 (the
- well-known port assigned to mDNS). Multicast DNS implementations
- MUST silently ignore any Multicast DNS responses they receive where
- the source UDP port is not 5353.
- The destination UDP port in all Multicast DNS responses MUST be 5353,
- and the destination address MUST be the mDNS IPv4 link-local
- multicast address 224.0.0.251 or its IPv6 equivalent FF02::FB, except
- when generating a reply to a query that explicitly requested a
- unicast response:
- * via the unicast-response bit,
- * by virtue of being a legacy query (Section 6.7), or
- * by virtue of being a direct unicast query.
- Except for these three specific cases, responses MUST NOT be sent via
- unicast, because then the "Passive Observation of Failures"
- mechanisms described in Section 10.5 would not work correctly. Other
- Cheshire & Krochmal Standards Track [Page 15]
- RFC 6762 Multicast DNS February 2013
- benefits of sending responses via multicast are discussed in Appendix
- D. A Multicast DNS querier MUST only accept unicast responses if
- they answer a recently sent query (e.g., sent within the last two
- seconds) that explicitly requested unicast responses. A Multicast
- DNS querier MUST silently ignore all other unicast responses.
- To protect the network against excessive packet flooding due to
- software bugs or malicious attack, a Multicast DNS responder MUST NOT
- (except in the one special case of answering probe queries) multicast
- a record on a given interface until at least one second has elapsed
- since the last time that record was multicast on that particular
- interface. A legitimate querier on the network should have seen the
- previous transmission and cached it. A querier that did not receive
- and cache the previous transmission will retry its request and
- receive a subsequent response. In the special case of answering
- probe queries, because of the limited time before the probing host
- will make its decision about whether or not to use the name, a
- Multicast DNS responder MUST respond quickly. In this special case
- only, when responding via multicast to a probe, a Multicast DNS
- responder is only required to delay its transmission as necessary to
- ensure an interval of at least 250 ms since the last time the record
- was multicast on that interface.
- 6.1. Negative Responses
- In the early design of Multicast DNS it was assumed that explicit
- negative responses would never be needed. A host can assert the
- existence of the set of records that it claims to exist, and the
- union of all such sets on a link is the set of Multicast DNS records
- that exist on that link. Asserting the nonexistence of every record
- in the complement of that set -- i.e., all possible Multicast DNS
- records that could exist on this link but do not at this moment --
- was felt to be impractical and unnecessary. The nonexistence of a
- record would be ascertained by a querier querying for it and failing
- to receive a response from any of the hosts currently attached to the
- link.
- However, operational experience showed that explicit negative
- responses can sometimes be valuable. One such example is when a
- querier is querying for a AAAA record, and the host name in question
- has no associated IPv6 addresses. In this case, the responding host
- knows it currently has exclusive ownership of that name, and it knows
- that it currently does not have any IPv6 addresses, so an explicit
- negative response is preferable to the querier having to retransmit
- its query multiple times, and eventually give up with a timeout,
- before it can conclude that a given AAAA record does not exist.
- Cheshire & Krochmal Standards Track [Page 16]
- RFC 6762 Multicast DNS February 2013
- Any time a responder receives a query for a name for which it has
- verified exclusive ownership, for a type for which that name has no
- records, the responder MUST (except as allowed in (a) below) respond
- asserting the nonexistence of that record using a DNS NSEC record
- [RFC4034]. In the case of Multicast DNS the NSEC record is not being
- used for its usual DNSSEC [RFC4033] security properties, but simply
- as a way of expressing which records do or do not exist with a given
- name.
- On receipt of a question for a particular name, rrtype, and rrclass,
- for which a responder does have one or more unique answers, the
- responder MAY also include an NSEC record in the Additional Record
- Section indicating the nonexistence of other rrtypes for that name
- and rrclass.
- Implementers working with devices with sufficient memory and CPU
- resources MAY choose to implement code to handle the full generality
- of the DNS NSEC record [RFC4034], including bitmaps up to 65,536 bits
- long. To facilitate use by devices with limited memory and CPU
- resources, Multicast DNS queriers are only REQUIRED to be able to
- parse a restricted form of the DNS NSEC record. All compliant
- Multicast DNS implementations MUST at least correctly generate and
- parse the restricted DNS NSEC record format described below:
- o The 'Next Domain Name' field contains the record's own name.
- When used with name compression, this means that the 'Next
- Domain Name' field always takes exactly two bytes in the
- message.
- o The Type Bit Map block number is 0.
- o The Type Bit Map block length byte is a value in the range 1-32.
- o The Type Bit Map data is 1-32 bytes, as indicated by length
- byte.
- Because this restricted form of the DNS NSEC record is limited to
- Type Bit Map block number zero, it cannot express the existence of
- rrtypes above 255. Consequently, if a Multicast DNS responder were
- to have records with rrtypes above 255, it MUST NOT generate these
- restricted-form NSEC records for those names, since to do so would
- imply that the name has no records with rrtypes above 255, which
- would be false. In such cases a Multicast DNS responder MUST either
- (a) emit no NSEC record for that name, or (b) emit a full NSEC record
- containing the appropriate Type Bit Map block(s) with the correct
- bits set for all the record types that exist. In practice this is
- not a significant limitation, since rrtypes above 255 are not
- currently in widespread use.
- Cheshire & Krochmal Standards Track [Page 17]
- RFC 6762 Multicast DNS February 2013
- If a Multicast DNS implementation receives an NSEC record where the
- 'Next Domain Name' field is not the record's own name, then the
- implementation SHOULD ignore the 'Next Domain Name' field and process
- the remainder of the NSEC record as usual. In Multicast DNS the
- 'Next Domain Name' field is not currently used, but it could be used
- in a future version of this protocol, which is why a Multicast DNS
- implementation MUST NOT reject or ignore an NSEC record it receives
- just because it finds an unexpected value in the 'Next Domain Name'
- field.
- If a Multicast DNS implementation receives an NSEC record containing
- more than one Type Bit Map, or where the Type Bit Map block number is
- not zero, or where the block length is not in the range 1-32, then
- the Multicast DNS implementation MAY silently ignore the entire NSEC
- record. A Multicast DNS implementation MUST NOT ignore an entire
- message just because that message contains one or more NSEC record(s)
- that the Multicast DNS implementation cannot parse. This provision
- is to allow future enhancements to the protocol to be introduced in a
- backwards-compatible way that does not break compatibility with older
- Multicast DNS implementations.
- To help differentiate these synthesized NSEC records (generated
- programmatically on-the-fly) from conventional Unicast DNS NSEC
- records (which actually exist in a signed DNS zone), the synthesized
- Multicast DNS NSEC records MUST NOT have the NSEC bit set in the Type
- Bit Map, whereas conventional Unicast DNS NSEC records do have the
- NSEC bit set.
- The TTL of the NSEC record indicates the intended lifetime of the
- negative cache entry. In general, the TTL given for an NSEC record
- SHOULD be the same as the TTL that the record would have had, had it
- existed. For example, the TTL for address records in Multicast DNS
- is typically 120 seconds (see Section 10), so the negative cache
- lifetime for an address record that does not exist should also be 120
- seconds.
- A responder MUST only generate negative responses to queries for
- which it has legitimate ownership of the name, rrtype, and rrclass in
- question, and can legitimately assert that no record with that name,
- rrtype, and rrclass exists. A responder can assert that a specified
- rrtype does not exist for one of its names if it knows a priori that
- it has exclusive ownership of that name (e.g., names of reverse
- address mapping PTR records, which are derived from IP addresses,
- which should be unique on the local link) or if it previously claimed
- unique ownership of that name using probe queries for rrtype "ANY".
- (If it were to use probe queries for a specific rrtype, then it would
- only own the name for that rrtype, and could not assert that other
- rrtypes do not exist.)
- Cheshire & Krochmal Standards Track [Page 18]
- RFC 6762 Multicast DNS February 2013
- The design rationale for this mechanism for encoding negative
- responses is discussed further in Appendix E.
- 6.2. Responding to Address Queries
- When a Multicast DNS responder sends a Multicast DNS response message
- containing its own address records, it MUST include all addresses
- that are valid on the interface on which it is sending the message,
- and MUST NOT include addresses that are not valid on that interface
- (such as addresses that may be configured on the host's other
- interfaces). For example, if an interface has both an IPv6 link-
- local and an IPv6 routable address, both should be included in the
- response message so that queriers receive both and can make their own
- choice about which to use. This allows a querier that only has an
- IPv6 link-local address to connect to the link-local address, and a
- different querier that has an IPv6 routable address to connect to the
- IPv6 routable address instead.
- When a Multicast DNS responder places an IPv4 or IPv6 address record
- (rrtype "A" or "AAAA") into a response message, it SHOULD also place
- any records of the other address type with the same name into the
- additional section, if there is space in the message. This is to
- provide fate sharing, so that all a device's addresses are delivered
- atomically in a single message, to reduce the risk that packet loss
- could cause a querier to receive only the IPv4 addresses and not the
- IPv6 addresses, or vice versa.
- In the event that a device has only IPv4 addresses but no IPv6
- addresses, or vice versa, then the appropriate NSEC record SHOULD be
- placed into the additional section, so that queriers can know with
- certainty that the device has no addresses of that kind.
- Some Multicast DNS responders treat a physical interface with both
- IPv4 and IPv6 address as a single interface with two addresses.
- Other Multicast DNS responders may treat this case as logically two
- interfaces (one with one or more IPv4 addresses, and the other with
- one or more IPv6 addresses), but responders that operate this way
- MUST NOT put the corresponding automatic NSEC records in replies they
- send (i.e., a negative IPv4 assertion in their IPv6 responses, and a
- negative IPv6 assertion in their IPv4 responses) because this would
- cause incorrect operation in responders on the network that work the
- former way.
- 6.3. Responding to Multiquestion Queries
- Multicast DNS responders MUST correctly handle DNS query messages
- containing more than one question, by answering any or all of the
- questions to which they have answers. Unlike single-question
- Cheshire & Krochmal Standards Track [Page 19]
- RFC 6762 Multicast DNS February 2013
- queries, where responding without delay is allowed in appropriate
- cases, for query messages containing more than one question, all
- (non-defensive) answers SHOULD be randomly delayed in the range
- 20-120 ms, or 400-500 ms if the TC (truncated) bit is set. This is
- because when a query message contains more than one question, a
- Multicast DNS responder cannot generally be certain that other
- responders will not also be simultaneously generating answers to
- other questions in that query message. (Answers defending a name, in
- response to a probe for that name, are not subject to this delay rule
- and are still sent immediately.)
- 6.4. Response Aggregation
- When possible, a responder SHOULD, for the sake of network
- efficiency, aggregate as many responses as possible into a single
- Multicast DNS response message. For example, when a responder has
- several responses it plans to send, each delayed by a different
- interval, then earlier responses SHOULD be delayed by up to an
- additional 500 ms if that will permit them to be aggregated with
- other responses scheduled to go out a little later.
- 6.5. Wildcard Queries (qtype "ANY" and qclass "ANY")
- When responding to queries using qtype "ANY" (255) and/or qclass
- "ANY" (255), a Multicast DNS responder MUST respond with *ALL* of its
- records that match the query. This is subtly different from how
- qtype "ANY" and qclass "ANY" work in Unicast DNS.
- A common misconception is that a Unicast DNS query for qtype "ANY"
- will elicit a response containing all matching records. This is
- incorrect. If there are any records that match the query, the
- response is required only to contain at least one of them, not
- necessarily all of them.
- This somewhat surprising behavior is commonly seen with caching
- (i.e., "recursive") name servers. If a caching server receives a
- qtype "ANY" query for which it has at least one valid answer, it is
- allowed to return only those matching answers it happens to have
- already in its cache, and it is not required to reconsult the
- authoritative name server to check if there are any more records that
- also match the qtype "ANY" query.
- For example, one might imagine that a query for qtype "ANY" for name
- "host.example.com" would return both the IPv4 (A) and the IPv6 (AAAA)
- address records for that host. In reality, what happens is that it
- depends on the history of what queries have been previously received
- by intervening caching servers. If a caching server has no records
- for "host.example.com", then it will consult another server (usually
- Cheshire & Krochmal Standards Track [Page 20]
- RFC 6762 Multicast DNS February 2013
- the authoritative name server for the name in question), and, in that
- case, it will typically return all IPv4 and IPv6 address records.
- However, if some other host has recently done a query for qtype "A"
- for name "host.example.com", so that the caching server already has
- IPv4 address records for "host.example.com" in its cache but no IPv6
- address records, then it will return only the IPv4 address records it
- already has cached, and no IPv6 address records.
- Multicast DNS does not share this property that qtype "ANY" and
- qclass "ANY" queries return some undefined subset of the matching
- records. When responding to queries using qtype "ANY" (255) and/or
- qclass "ANY" (255), a Multicast DNS responder MUST respond with *ALL*
- of its records that match the query.
- 6.6. Cooperating Multicast DNS Responders
- If a Multicast DNS responder ("A") observes some other Multicast DNS
- responder ("B") send a Multicast DNS response message containing a
- resource record with the same name, rrtype, and rrclass as one of A's
- resource records, but *different* rdata, then:
- o If A's resource record is intended to be a shared resource
- record, then this is no conflict, and no action is required.
- o If A's resource record is intended to be a member of a unique
- resource record set owned solely by that responder, then this is
- a conflict and MUST be handled as described in Section 9,
- "Conflict Resolution".
- If a Multicast DNS responder ("A") observes some other Multicast DNS
- responder ("B") send a Multicast DNS response message containing a
- resource record with the same name, rrtype, and rrclass as one of A's
- resource records, and *identical* rdata, then:
- o If the TTL of B's resource record given in the message is at
- least half the true TTL from A's point of view, then no action
- is required.
- o If the TTL of B's resource record given in the message is less
- than half the true TTL from A's point of view, then A MUST mark
- its record to be announced via multicast. Queriers receiving
- the record from B would use the TTL given by B and, hence, may
- delete the record sooner than A expects. By sending its own
- multicast response correcting the TTL, A ensures that the record
- will be retained for the desired time.
- Cheshire & Krochmal Standards Track [Page 21]
- RFC 6762 Multicast DNS February 2013
- These rules allow multiple Multicast DNS responders to offer the same
- data on the network (perhaps for fault-tolerance reasons) without
- conflicting with each other.
- 6.7. Legacy Unicast Responses
- If the source UDP port in a received Multicast DNS query is not port
- 5353, this indicates that the querier originating the query is a
- simple resolver such as described in Section 5.1, "One-Shot Multicast
- DNS Queries", which does not fully implement all of Multicast DNS.
- In this case, the Multicast DNS responder MUST send a UDP response
- directly back to the querier, via unicast, to the query packet's
- source IP address and port. This unicast response MUST be a
- conventional unicast response as would be generated by a conventional
- Unicast DNS server; for example, it MUST repeat the query ID and the
- question given in the query message. In addition, the cache-flush
- bit described in Section 10.2, "Announcements to Flush Outdated Cache
- Entries", MUST NOT be set in legacy unicast responses.
- The resource record TTL given in a legacy unicast response SHOULD NOT
- be greater than ten seconds, even if the true TTL of the Multicast
- DNS resource record is higher. This is because Multicast DNS
- responders that fully participate in the protocol use the cache
- coherency mechanisms described in Section 10, "Resource Record TTL
- Values and Cache Coherency", to update and invalidate stale data.
- Were unicast responses sent to legacy resolvers to use the same high
- TTLs, these legacy resolvers, which do not implement these cache
- coherency mechanisms, could retain stale cached resource record data
- long after it is no longer valid.
- 7. Traffic Reduction
- A variety of techniques are used to reduce the amount of traffic on
- the network.
- 7.1. Known-Answer Suppression
- When a Multicast DNS querier sends a query to which it already knows
- some answers, it populates the Answer Section of the DNS query
- message with those answers.
- Generally, this applies only to Shared records, not Unique records,
- since if a Multicast DNS querier already has at least one Unique
- record in its cache then it should not be expecting further different
- answers to this question, since the Unique record(s) it already has
- comprise the complete answer, so it has no reason to be sending the
- query at all. In contrast, having some Shared records in its cache
- does not necessarily imply that a Multicast DNS querier will not
- Cheshire & Krochmal Standards Track [Page 22]
- RFC 6762 Multicast DNS February 2013
- receive further answers to this query, and it is in this case that it
- is beneficial to use the Known-Answer list to suppress repeated
- sending of redundant answers that the querier already knows.
- A Multicast DNS responder MUST NOT answer a Multicast DNS query if
- the answer it would give is already included in the Answer Section
- with an RR TTL at least half the correct value. If the RR TTL of the
- answer as given in the Answer Section is less than half of the true
- RR TTL as known by the Multicast DNS responder, the responder MUST
- send an answer so as to update the querier's cache before the record
- becomes in danger of expiration.
- Because a Multicast DNS responder will respond if the remaining TTL
- given in the Known-Answer list is less than half the true TTL, it is
- superfluous for the querier to include such records in the Known-
- Answer list. Therefore, a Multicast DNS querier SHOULD NOT include
- records in the Known-Answer list whose remaining TTL is less than
- half of their original TTL. Doing so would simply consume space in
- the message without achieving the goal of suppressing responses and
- would, therefore, be a pointless waste of network capacity.
- A Multicast DNS querier MUST NOT cache resource records observed in
- the Known-Answer Section of other Multicast DNS queries. The Answer
- Section of Multicast DNS queries is not authoritative. By placing
- information in the Answer Section of a Multicast DNS query, the
- querier is stating that it *believes* the information to be true. It
- is not asserting that the information *is* true. Some of those
- records may have come from other hosts that are no longer on the
- network. Propagating that stale information to other Multicast DNS
- queriers on the network would not be helpful.
- 7.2. Multipacket Known-Answer Suppression
- Sometimes a Multicast DNS querier will already have too many answers
- to fit in the Known-Answer Section of its query packets. In this
- case, it should issue a Multicast DNS query containing a question and
- as many Known-Answer records as will fit. It MUST then set the TC
- (Truncated) bit in the header before sending the query. It MUST
- immediately follow the packet with another query packet containing no
- questions and as many more Known-Answer records as will fit. If
- there are still too many records remaining to fit in the packet, it
- again sets the TC bit and continues until all the Known-Answer
- records have been sent.
- A Multicast DNS responder seeing a Multicast DNS query with the TC
- bit set defers its response for a time period randomly selected in
- the interval 400-500 ms. This gives the Multicast DNS querier time
- to send additional Known-Answer packets before the responder
- Cheshire & Krochmal Standards Track [Page 23]
- RFC 6762 Multicast DNS February 2013
- responds. If the responder sees any of its answers listed in the
- Known-Answer lists of subsequent packets from the querying host, it
- MUST delete that answer from the list of answers it is planning to
- give (provided that no other host on the network has also issued a
- query for that record and is waiting to receive an answer).
- If the responder receives additional Known-Answer packets with the TC
- bit set, it SHOULD extend the delay as necessary to ensure a pause of
- 400-500 ms after the last such packet before it sends its answer.
- This opens the potential risk that a continuous stream of Known-
- Answer packets could, theoretically, prevent a responder from
- answering indefinitely. In practice, answers are never actually
- delayed significantly, and should a situation arise where significant
- delays did happen, that would be a scenario where the network is so
- overloaded that it would be desirable to err on the side of caution.
- The consequence of delaying an answer may be that it takes a user
- longer than usual to discover all the services on the local network;
- in contrast, the consequence of incorrectly answering before all the
- Known-Answer packets have been received would be wasted capacity
- sending unnecessary answers on an already overloaded network. In
- this (rare) situation, sacrificing speed to preserve reliable network
- operation is the right trade-off.
- 7.3. Duplicate Question Suppression
- If a host is planning to transmit (or retransmit) a query, and it
- sees another host on the network send a query containing the same
- "QM" question, and the Known-Answer Section of that query does not
- contain any records that this host would not also put in its own
- Known-Answer Section, then this host SHOULD treat its own query as
- having been sent. When multiple queriers on the network are querying
- for the same resource records, there is no need for them to all be
- repeatedly asking the same question.
- 7.4. Duplicate Answer Suppression
- If a host is planning to send an answer, and it sees another host on
- the network send a response message containing the same answer
- record, and the TTL in that record is not less than the TTL this host
- would have given, then this host SHOULD treat its own answer as
- having been sent, and not also send an identical answer itself. When
- multiple responders on the network have the same data, there is no
- need for all of them to respond.
- Cheshire & Krochmal Standards Track [Page 24]
- RFC 6762 Multicast DNS February 2013
- The opportunity for duplicate answer suppression occurs when a host
- has received a query, and is delaying its response for some pseudo-
- random interval up to 500 ms, as described elsewhere in this
- document, and then, before the host sends its response, it sees some
- other host on the network send a response message containing the same
- answer record.
- This feature is particularly useful when Multicast DNS Proxy Servers
- are in use, where there could be more than one proxy on the network
- giving Multicast DNS answers on behalf of some other host (e.g.,
- because that other host is currently asleep and is not itself
- responding to queries).
- 8. Probing and Announcing on Startup
- Typically a Multicast DNS responder should have, at the very least,
- address records for all of its active interfaces. Creating and
- advertising an HINFO record on each interface as well can be useful
- to network administrators.
- Whenever a Multicast DNS responder starts up, wakes up from sleep,
- receives an indication of a network interface "Link Change" event, or
- has any other reason to believe that its network connectivity may
- have changed in some relevant way, it MUST perform the two startup
- steps below: Probing (Section 8.1) and Announcing (Section 8.3).
- 8.1. Probing
- The first startup step is that, for all those resource records that a
- Multicast DNS responder desires to be unique on the local link, it
- MUST send a Multicast DNS query asking for those resource records, to
- see if any of them are already in use. The primary example of this
- is a host's address records, which map its unique host name to its
- unique IPv4 and/or IPv6 addresses. All probe queries SHOULD be done
- using the desired resource record name and class (usually class 1,
- "Internet"), and query type "ANY" (255), to elicit answers for all
- types of records with that name. This allows a single question to be
- used in place of several questions, which is more efficient on the
- network. It also allows a host to verify exclusive ownership of a
- name for all rrtypes, which is desirable in most cases. It would be
- confusing, for example, if one host owned the "A" record for
- "myhost.local.", but a different host owned the "AAAA" record for
- that name.
- Cheshire & Krochmal Standards Track [Page 25]
- RFC 6762 Multicast DNS February 2013
- The ability to place more than one question in a Multicast DNS query
- is useful here, because it can allow a host to use a single message
- to probe for all of its resource records instead of needing a
- separate message for each. For example, a host can simultaneously
- probe for uniqueness of its "A" record and all its SRV records
- [RFC6763] in the same query message.
- When ready to send its Multicast DNS probe packet(s) the host should
- first wait for a short random delay time, uniformly distributed in
- the range 0-250 ms. This random delay is to guard against the case
- where several devices are powered on simultaneously, or several
- devices are connected to an Ethernet hub, which is then powered on,
- or some other external event happens that might cause a group of
- hosts to all send synchronized probes.
- 250 ms after the first query, the host should send a second; then,
- 250 ms after that, a third. If, by 250 ms after the third probe, no
- conflicting Multicast DNS responses have been received, the host may
- move to the next step, announcing. (Note that probing is the one
- exception from the normal rule that there should be at least one
- second between repetitions of the same question, and the interval
- between subsequent repetitions should at least double.)
- When sending probe queries, a host MUST NOT consult its cache for
- potential answers. Only conflicting Multicast DNS responses received
- "live" from the network are considered valid for the purposes of
- determining whether probing has succeeded or failed.
- In order to allow services to announce their presence without
- unreasonable delay, the time window for probing is intentionally set
- quite short. As a result of this, from the time the first probe
- packet is sent, another device on the network using that name has
- just 750 ms to respond to defend its name. On networks that are
- slow, or busy, or both, it is possible for round-trip latency to
- account for a few hundred milliseconds, and software delays in slow
- devices can add additional delay. Hence, it is important that when a
- device receives a probe query for a name that it is currently using,
- it SHOULD generate its response to defend that name immediately and
- send it as quickly as possible. The usual rules about random delays
- before responding, to avoid sudden bursts of simultaneous answers
- from different hosts, do not apply here since normally at most one
- host should ever respond to a given probe question. Even when a
- single DNS query message contains multiple probe questions, it would
- be unusual for that message to elicit a defensive response from more
- than one other host. Because of the mDNS multicast rate-limiting
- Cheshire & Krochmal Standards Track [Page 26]
- RFC 6762 Multicast DNS February 2013
- rules, the probes SHOULD be sent as "QU" questions with the unicast-
- response bit set, to allow a defending host to respond immediately
- via unicast, instead of potentially having to wait before replying
- via multicast.
- During probing, from the time the first probe packet is sent until
- 250 ms after the third probe, if any conflicting Multicast DNS
- response is received, then the probing host MUST defer to the
- existing host, and SHOULD choose new names for some or all of its
- resource records as appropriate. Apparently conflicting Multicast
- DNS responses received *before* the first probe packet is sent MUST
- be silently ignored (see discussion of stale probe packets in Section
- 8.2, "Simultaneous Probe Tiebreaking", below). In the case of a host
- probing using query type "ANY" as recommended above, any answer
- containing a record with that name, of any type, MUST be considered a
- conflicting response and handled accordingly.
- If fifteen conflicts occur within any ten-second period, then the
- host MUST wait at least five seconds before each successive
- additional probe attempt. This is to help ensure that, in the event
- of software bugs or other unanticipated problems, errant hosts do not
- flood the network with a continuous stream of multicast traffic. For
- very simple devices, a valid way to comply with this requirement is
- to always wait five seconds after any failed probe attempt before
- trying again.
- If a responder knows by other means that its unique resource record
- set name, rrtype, and rrclass cannot already be in use by any other
- responder on the network, then it SHOULD skip the probing step for
- that resource record set. For example, when creating the reverse
- address mapping PTR records, the host can reasonably assume that no
- other host will be trying to create those same PTR records, since
- that would imply that the two hosts were trying to use the same IP
- address, and if that were the case, the two hosts would be suffering
- communication problems beyond the scope of what Multicast DNS is
- designed to solve. Similarly, if a responder is acting as a proxy,
- taking over from another Multicast DNS responder that has already
- verified the uniqueness of the record, then the proxy SHOULD NOT
- repeat the probing step for those records.
- 8.2. Simultaneous Probe Tiebreaking
- The astute reader will observe that there is a race condition
- inherent in the previous description. If two hosts are probing for
- the same name simultaneously, neither will receive any response to
- the probe, and the hosts could incorrectly conclude that they may
- both proceed to use the name. To break this symmetry, each host
- populates the query message's Authority Section with the record or
- Cheshire & Krochmal Standards Track [Page 27]
- RFC 6762 Multicast DNS February 2013
- records with the rdata that it would be proposing to use, should its
- probing be successful. The Authority Section is being used here in a
- way analogous to the way it is used as the "Update Section" in a DNS
- Update message [RFC2136] [RFC3007].
- When a host is probing for a group of related records with the same
- name (e.g., the SRV and TXT record describing a DNS-SD service), only
- a single question need be placed in the Question Section, since query
- type "ANY" (255) is used, which will elicit answers for all records
- with that name. However, for tiebreaking to work correctly in all
- cases, the Authority Section must contain *all* the records and
- proposed rdata being probed for uniqueness.
- When a host that is probing for a record sees another host issue a
- query for the same record, it consults the Authority Section of that
- query. If it finds any resource record(s) there which answers the
- query, then it compares the data of that (those) resource record(s)
- with its own tentative data. We consider first the simple case of a
- host probing for a single record, receiving a simultaneous probe from
- another host also probing for a single record. The two records are
- compared and the lexicographically later data wins. This means that
- if the host finds that its own data is lexicographically later, it
- simply ignores the other host's probe. If the host finds that its
- own data is lexicographically earlier, then it defers to the winning
- host by waiting one second, and then begins probing for this record
- again. The logic for waiting one second and then trying again is to
- guard against stale probe packets on the network (possibly even stale
- probe packets sent moments ago by this host itself, before some
- configuration change, which may be echoed back after a short delay by
- some Ethernet switches and some 802.11 base stations). If the
- winning simultaneous probe was from a real other host on the network,
- then after one second it will have completed its probing, and will
- answer subsequent probes. If the apparently winning simultaneous
- probe was in fact just an old stale packet on the network (maybe from
- the host itself), then when it retries its probing in one second, its
- probes will go unanswered, and it will successfully claim the name.
- The determination of "lexicographically later" is performed by first
- comparing the record class (excluding the cache-flush bit described
- in Section 10.2), then the record type, then raw comparison of the
- binary content of the rdata without regard for meaning or structure.
- If the record classes differ, then the numerically greater class is
- considered "lexicographically later". Otherwise, if the record types
- differ, then the numerically greater type is considered
- "lexicographically later". If the rrtype and rrclass both match,
- then the rdata is compared.
- Cheshire & Krochmal Standards Track [Page 28]
- RFC 6762 Multicast DNS February 2013
- In the case of resource records containing rdata that is subject to
- name compression [RFC1035], the names MUST be uncompressed before
- comparison. (The details of how a particular name is compressed is
- an artifact of how and where the record is written into the DNS
- message; it is not an intrinsic property of the resource record
- itself.)
- The bytes of the raw uncompressed rdata are compared in turn,
- interpreting the bytes as eight-bit UNSIGNED values, until a byte is
- found whose value is greater than that of its counterpart (in which
- case, the rdata whose byte has the greater value is deemed
- lexicographically later) or one of the resource records runs out of
- rdata (in which case, the resource record which still has remaining
- data first is deemed lexicographically later). The following is an
- example of a conflict:
- MyPrinter.local. A 169.254.99.200
- MyPrinter.local. A 169.254.200.50
- In this case, 169.254.200.50 is lexicographically later (the third
- byte, with value 200, is greater than its counterpart with value 99),
- so it is deemed the winner.
- Note that it is vital that the bytes are interpreted as UNSIGNED
- values in the range 0-255, or the wrong outcome may result. In the
- example above, if the byte with value 200 had been incorrectly
- interpreted as a signed eight-bit value, then it would be interpreted
- as value -56, and the wrong address record would be deemed the
- winner.
- 8.2.1. Simultaneous Probe Tiebreaking for Multiple Records
- When a host is probing for a set of records with the same name, or a
- message is received containing multiple tiebreaker records answering
- a given probe question in the Question Section, the host's records
- and the tiebreaker records from the message are each sorted into
- order, and then compared pairwise, using the same comparison
- technique described above, until a difference is found.
- The records are sorted using the same lexicographical order as
- described above, that is, if the record classes differ, the record
- with the lower class number comes first. If the classes are the same
- but the rrtypes differ, the record with the lower rrtype number comes
- first. If the class and rrtype match, then the rdata is compared
- bytewise until a difference is found. For example, in the common
- case of advertising DNS-SD services with a TXT record and an SRV
- record, the TXT record comes first (the rrtype value for TXT is 16)
- and the SRV record comes second (the rrtype value for SRV is 33).
- Cheshire & Krochmal Standards Track [Page 29]
- RFC 6762 Multicast DNS February 2013
- When comparing the records, if the first records match perfectly,
- then the second records are compared, and so on. If either list of
- records runs out of records before any difference is found, then the
- list with records remaining is deemed to have won the tiebreak. If
- both lists run out of records at the same time without any difference
- being found, then this indicates that two devices are advertising
- identical sets of records, as is sometimes done for fault tolerance,
- and there is, in fact, no conflict.
- 8.3. Announcing
- The second startup step is that the Multicast DNS responder MUST send
- an unsolicited Multicast DNS response containing, in the Answer
- Section, all of its newly registered resource records (both shared
- records, and unique records that have completed the probing step).
- If there are too many resource records to fit in a single packet,
- multiple packets should be used.
- In the case of shared records (e.g., the PTR records used by DNS-
- Based Service Discovery [RFC6763]), the records are simply placed as
- is into the Answer Section of the DNS response.
- In the case of records that have been verified to be unique in the
- previous step, they are placed into the Answer Section of the DNS
- response with the most significant bit of the rrclass set to one.
- The most significant bit of the rrclass for a record in the Answer
- Section of a response message is the Multicast DNS cache-flush bit
- and is discussed in more detail below in Section 10.2, "Announcements
- to Flush Outdated Cache Entries".
- The Multicast DNS responder MUST send at least two unsolicited
- responses, one second apart. To provide increased robustness against
- packet loss, a responder MAY send up to eight unsolicited responses,
- provided that the interval between unsolicited responses increases by
- at least a factor of two with every response sent.
- A Multicast DNS responder MUST NOT send announcements in the absence
- of information that its network connectivity may have changed in some
- relevant way. In particular, a Multicast DNS responder MUST NOT send
- regular periodic announcements as a matter of course.
- Whenever a Multicast DNS responder receives any Multicast DNS
- response (solicited or otherwise) containing a conflicting resource
- record, the conflict MUST be resolved as described in Section 9,
- "Conflict Resolution".
- Cheshire & Krochmal Standards Track [Page 30]
- RFC 6762 Multicast DNS February 2013
- 8.4. Updating
- At any time, if the rdata of any of a host's Multicast DNS records
- changes, the host MUST repeat the Announcing step described above to
- update neighboring caches. For example, if any of a host's IP
- addresses change, it MUST re-announce those address records. The
- host does not need to repeat the Probing step because it has already
- established unique ownership of that name.
- In the case of shared records, a host MUST send a "goodbye"
- announcement with RR TTL zero (see Section 10.1, "Goodbye Packets")
- for the old rdata, to cause it to be deleted from peer caches, before
- announcing the new rdata. In the case of unique records, a host
- SHOULD omit the "goodbye" announcement, since the cache-flush bit on
- the newly announced records will cause old rdata to be flushed from
- peer caches anyway.
- A host may update the contents of any of its records at any time,
- though a host SHOULD NOT update records more frequently than ten
- times per minute. Frequent rapid updates impose a burden on the
- network. If a host has information to disseminate which changes more
- frequently than ten times per minute, then it may be more appropriate
- to design a protocol for that specific purpose.
- 9. Conflict Resolution
- A conflict occurs when a Multicast DNS responder has a unique record
- for which it is currently authoritative, and it receives a Multicast
- DNS response message containing a record with the same name, rrtype
- and rrclass, but inconsistent rdata. What may be considered
- inconsistent is context sensitive, except that resource records with
- identical rdata are never considered inconsistent, even if they
- originate from different hosts. This is to permit use of proxies and
- other fault-tolerance mechanisms that may cause more than one
- responder to be capable of issuing identical answers on the network.
- A common example of a resource record type that is intended to be
- unique, not shared between hosts, is the address record that maps a
- host's name to its IP address. Should a host witness another host
- announce an address record with the same name but a different IP
- address, then that is considered inconsistent, and that address
- record is considered to be in conflict.
- Whenever a Multicast DNS responder receives any Multicast DNS
- response (solicited or otherwise) containing a conflicting resource
- record in any of the Resource Record Sections, the Multicast DNS
- responder MUST immediately reset its conflicted unique record to
- probing state, and go through the startup steps described above in
- Cheshire & Krochmal Standards Track [Page 31]
- RFC 6762 Multicast DNS February 2013
- Section 8, "Probing and Announcing on Startup". The protocol used in
- the Probing phase will determine a winner and a loser, and the loser
- MUST cease using the name, and reconfigure.
- It is very important that any host receiving a resource record that
- conflicts with one of its own MUST take action as described above.
- In the case of two hosts using the same host name, where one has been
- configured to require a unique host name and the other has not, the
- one that has not been configured to require a unique host name will
- not perceive any conflict, and will not take any action. By
- reverting to Probing state, the host that desires a unique host name
- will go through the necessary steps to ensure that a unique host name
- is obtained.
- The recommended course of action after probing and failing is as
- follows:
- 1. Programmatically change the resource record name in an attempt
- to find a new name that is unique. This could be done by
- adding some further identifying information (e.g., the model
- name of the hardware) if it is not already present in the name,
- or appending the digit "2" to the name, or incrementing a
- number at the end of the name if one is already present.
- 2. Probe again, and repeat as necessary until a unique name is
- found.
- 3. Once an available unique name has been determined, by probing
- without receiving any conflicting response, record this newly
- chosen name in persistent storage so that the device will use
- the same name the next time it is power-cycled.
- 4. Display a message to the user or operator informing them of the
- name change. For example:
- The name "Bob's Music" is in use by another music server on
- the network. Your music collection has been renamed to
- "Bob's Music (2)". If you want to change this name, use
- [describe appropriate menu item or preference dialog here].
- The details of how the user or operator is informed of the new
- name depends on context. A desktop computer with a screen
- might put up a dialog box. A headless server in the closet may
- write a message to a log file, or use whatever mechanism
- (email, SNMP trap, etc.) it uses to inform the administrator of
- error conditions. On the other hand, a headless server in the
- closet may not inform the user at all -- if the user cares,
- Cheshire & Krochmal Standards Track [Page 32]
- RFC 6762 Multicast DNS February 2013
- they will notice the name has changed, and connect to the
- server in the usual way (e.g., via web browser) to configure a
- new name.
- 5. After one minute of probing, if the Multicast DNS responder has
- been unable to find any unused name, it should log an error
- message to inform the user or operator of this fact. This
- situation should never occur in normal operation. The only
- situations that would cause this to happen would be either a
- deliberate denial-of-service attack, or some kind of very
- obscure hardware or software bug that acts like a deliberate
- denial-of-service attack.
- These considerations apply to address records (i.e., host names) and
- to all resource records where uniqueness (or maintenance of some
- other defined constraint) is desired.
- 10. Resource Record TTL Values and Cache Coherency
- As a general rule, the recommended TTL value for Multicast DNS
- resource records with a host name as the resource record's name
- (e.g., A, AAAA, HINFO) or a host name contained within the resource
- record's rdata (e.g., SRV, reverse mapping PTR record) SHOULD be 120
- seconds.
- The recommended TTL value for other Multicast DNS resource records is
- 75 minutes.
- A querier with an active outstanding query will issue a query message
- when one or more of the resource records in its cache are 80% of the
- way to expiry. If the TTL on those records is 75 minutes, this
- ongoing cache maintenance process yields a steady-state query rate of
- one query every 60 minutes.
- Any distributed cache needs a cache coherency protocol. If Multicast
- DNS resource records follow the recommendation and have a TTL of 75
- minutes, that means that stale data could persist in the system for a
- little over an hour. Making the default RR TTL significantly lower
- would reduce the lifetime of stale data, but would produce too much
- extra traffic on the network. Various techniques are available to
- minimize the impact of such stale data, outlined in the five
- subsections below.
- 10.1. Goodbye Packets
- In the case where a host knows that certain resource record data is
- about to become invalid (for example, when the host is undergoing a
- clean shutdown), the host SHOULD send an unsolicited Multicast DNS
- Cheshire & Krochmal Standards Track [Page 33]
- RFC 6762 Multicast DNS February 2013
- response packet, giving the same resource record name, rrtype,
- rrclass, and rdata, but an RR TTL of zero. This has the effect of
- updating the TTL stored in neighboring hosts' cache entries to zero,
- causing that cache entry to be promptly deleted.
- Queriers receiving a Multicast DNS response with a TTL of zero SHOULD
- NOT immediately delete the record from the cache, but instead record
- a TTL of 1 and then delete the record one second later. In the case
- of multiple Multicast DNS responders on the network described in
- Section 6.6 above, if one of the responders shuts down and
- incorrectly sends goodbye packets for its records, it gives the other
- cooperating responders one second to send out their own response to
- "rescue" the records before they expire and are deleted.
- 10.2. Announcements to Flush Outdated Cache Entries
- Whenever a host has a resource record with new data, or with what
- might potentially be new data (e.g., after rebooting, waking from
- sleep, connecting to a new network link, or changing IP address), the
- host needs to inform peers of that new data. In cases where the host
- has not been continuously connected and participating on the network
- link, it MUST first probe to re-verify uniqueness of its unique
- records, as described above in Section 8.1, "Probing".
- Having completed the Probing step, if necessary, the host MUST then
- send a series of unsolicited announcements to update cache entries in
- its neighbor hosts. In these unsolicited announcements, if the
- record is one that has been verified unique, the host sets the most
- significant bit of the rrclass field of the resource record. This
- bit, the cache-flush bit, tells neighboring hosts that this is not a
- shared record type. Instead of merging this new record additively
- into the cache in addition to any previous records with the same
- name, rrtype, and rrclass, all old records with that name, rrtype,
- and rrclass that were received more than one second ago are declared
- invalid, and marked to expire from the cache in one second.
- The semantics of the cache-flush bit are as follows: normally when a
- resource record appears in a Resource Record Section of the DNS
- response it means, "This is an assertion that this information is
- true". When a resource record appears in a Resource Record Section
- of the DNS response with the cache-flush bit set, it means, "This is
- an assertion that this information is the truth and the whole truth,
- and anything you may have heard more than a second ago regarding
- records of this name/rrtype/rrclass is no longer true".
- To accommodate the case where the set of records from one host
- constituting a single unique RRSet is too large to fit in a single
- packet, only cache records that are more than one second old are
- Cheshire & Krochmal Standards Track [Page 34]
- RFC 6762 Multicast DNS February 2013
- flushed. This allows the announcing host to generate a quick burst
- of packets back-to-back on the wire containing all the members of the
- RRSet. When receiving records with the cache-flush bit set, all
- records older than one second are marked to be deleted one second in
- the future. One second after the end of the little packet burst, any
- records not represented within that packet burst will then be expired
- from all peer caches.
- Any time a host sends a response packet containing some members of a
- unique RRSet, it MUST send the entire RRSet, preferably in a single
- packet, or if the entire RRSet will not fit in a single packet, in a
- quick burst of packets sent as close together as possible. The host
- MUST set the cache-flush bit on all members of the unique RRSet.
- Another reason for waiting one second before deleting stale records
- from the cache is to accommodate bridged networks. For example, a
- host's address record announcement on a wireless interface may be
- bridged onto a wired Ethernet and may cause that same host's Ethernet
- address records to be flushed from peer caches. The one-second delay
- gives the host the chance to see its own announcement arrive on the
- wired Ethernet, and immediately re-announce its Ethernet interface's
- address records so that both sets remain valid and live in peer
- caches.
- These rules, about when to set the cache-flush bit and about sending
- the entire rrset, apply regardless of *why* the response message is
- being generated. They apply to startup announcements as described in
- Section 8.3, "Announcing", and to responses generated as a result of
- receiving query messages.
- The cache-flush bit is only set in records in the Resource Record
- Sections of Multicast DNS responses sent to UDP port 5353.
- The cache-flush bit MUST NOT be set in any resource records in a
- response message sent in legacy unicast responses to UDP ports other
- than 5353.
- The cache-flush bit MUST NOT be set in any resource records in the
- Known-Answer list of any query message.
- The cache-flush bit MUST NOT ever be set in any shared resource
- record. To do so would cause all the other shared versions of this
- resource record with different rdata from different responders to be
- immediately deleted from all the caches on the network.
- Cheshire & Krochmal Standards Track [Page 35]
- RFC 6762 Multicast DNS February 2013
- The cache-flush bit does *not* apply to questions listed in the
- Question Section of a Multicast DNS message. The top bit of the
- rrclass field in questions is used for an entirely different purpose
- (see Section 5.4, "Questions Requesting Unicast Responses").
- Note that the cache-flush bit is NOT part of the resource record
- class. The cache-flush bit is the most significant bit of the second
- 16-bit word of a resource record in a Resource Record Section of a
- Multicast DNS message (the field conventionally referred to as the
- rrclass field), and the actual resource record class is the least
- significant fifteen bits of this field. There is no Multicast DNS
- resource record class 0x8001. The value 0x8001 in the rrclass field
- of a resource record in a Multicast DNS response message indicates a
- resource record with class 1, with the cache-flush bit set. When
- receiving a resource record with the cache-flush bit set,
- implementations should take care to mask off that bit before storing
- the resource record in memory, or otherwise ensure that it is given
- the correct semantic interpretation.
- The reuse of the top bit of the rrclass field only applies to
- conventional resource record types that are subject to caching, not
- to pseudo-RRs like OPT [RFC2671], TSIG [RFC2845], TKEY [RFC2930],
- SIG0 [RFC2931], etc., that pertain only to a particular transport
- level message and not to any actual DNS data. Since pseudo-RRs
- should never go into the Multicast DNS cache, the concept of a cache-
- flush bit for these types is not applicable. In particular, the
- rrclass field of an OPT record encodes the sender's UDP payload size,
- and should be interpreted as a sixteen-bit length value in the range
- 0-65535, not a one-bit flag and a fifteen-bit length.
- 10.3. Cache Flush on Topology change
- If the hardware on a given host is able to indicate physical changes
- of connectivity, then when the hardware indicates such a change, the
- host should take this information into account in its Multicast DNS
- cache management strategy. For example, a host may choose to
- immediately flush all cache records received on a particular
- interface when that cable is disconnected. Alternatively, a host may
- choose to adjust the remaining TTL on all those records to a few
- seconds so that if the cable is not reconnected quickly, those
- records will expire from the cache.
- Likewise, when a host reboots, wakes from sleep, or undergoes some
- other similar discontinuous state change, the cache management
- strategy should take that information into account.
- Cheshire & Krochmal Standards Track [Page 36]
- RFC 6762 Multicast DNS February 2013
- 10.4. Cache Flush on Failure Indication
- Sometimes a cache record can be determined to be stale when a client
- attempts to use the rdata it contains, and the client finds that
- rdata to be incorrect.
- For example, the rdata in an address record can be determined to be
- incorrect if attempts to contact that host fail, either because (for
- an IPv4 address on a local subnet) ARP requests for that address go
- unanswered, because (for an IPv6 address with an on-link prefix) ND
- requests for that address go unanswered, or because (for an address
- on a remote network) a router returns an ICMP "Host Unreachable"
- error.
- The rdata in an SRV record can be determined to be incorrect if
- attempts to communicate with the indicated service at the host and
- port number indicated are not successful.
- The rdata in a DNS-SD PTR record can be determined to be incorrect if
- attempts to look up the SRV record it references are not successful.
- The software implementing the Multicast DNS resource record cache
- should provide a mechanism so that clients detecting stale rdata can
- inform the cache.
- When the cache receives this hint that it should reconfirm some
- record, it MUST issue two or more queries for the resource record in
- dispute. If no response is received within ten seconds, then, even
- though its TTL may indicate that it is not yet due to expire, that
- record SHOULD be promptly flushed from the cache.
- The end result of this is that if a printer suffers a sudden power
- failure or other abrupt disconnection from the network, its name may
- continue to appear in DNS-SD browser lists displayed on users'
- screens. Eventually, that entry will expire from the cache
- naturally, but if a user tries to access the printer before that
- happens, the failure to successfully contact the printer will trigger
- the more hasty demise of its cache entries. This is a sensible
- trade-off between good user experience and good network efficiency.
- If we were to insist that printers should disappear from the printer
- list within 30 seconds of becoming unavailable, for all failure
- modes, the only way to achieve this would be for the client to poll
- the printer at least every 30 seconds, or for the printer to announce
- its presence at least every 30 seconds, both of which would be an
- unreasonable burden on most networks.
- Cheshire & Krochmal Standards Track [Page 37]
- RFC 6762 Multicast DNS February 2013
- 10.5. Passive Observation Of Failures (POOF)
- A host observes the multicast queries issued by the other hosts on
- the network. One of the major benefits of also sending responses
- using multicast is that it allows all hosts to see the responses (or
- lack thereof) to those queries.
- If a host sees queries, for which a record in its cache would be
- expected to be given as an answer in a multicast response, but no
- such answer is seen, then the host may take this as an indication
- that the record may no longer be valid.
- After seeing two or more of these queries, and seeing no multicast
- response containing the expected answer within ten seconds, then even
- though its TTL may indicate that it is not yet due to expire, that
- record SHOULD be flushed from the cache. The host SHOULD NOT perform
- its own queries to reconfirm that the record is truly gone. If every
- host on a large network were to do this, it would cause a lot of
- unnecessary multicast traffic. If host A sends multicast queries
- that remain unanswered, then there is no reason to suppose that host
- B or any other host is likely to be any more successful.
- The previous section, "Cache Flush on Failure Indication", describes
- a situation where a user trying to print discovers that the printer
- is no longer available. By implementing the passive observation
- described here, when one user fails to contact the printer, all hosts
- on the network observe that failure and update their caches
- accordingly.
- 11. Source Address Check
- All Multicast DNS responses (including responses sent via unicast)
- SHOULD be sent with IP TTL set to 255. This is recommended to
- provide backwards-compatibility with older Multicast DNS queriers
- (implementing a draft version of this document, posted in February
- 2004) that check the IP TTL on reception to determine whether the
- packet originated on the local link. These older queriers discard
- all packets with TTLs other than 255.
- A host sending Multicast DNS queries to a link-local destination
- address (including the 224.0.0.251 and FF02::FB link-local multicast
- addresses) MUST only accept responses to that query that originate
- from the local link, and silently discard any other response packets.
- Without this check, it could be possible for remote rogue hosts to
- send spoof answer packets (perhaps unicast to the victim host), which
- the receiving machine could misinterpret as having originated on the
- local link.
- Cheshire & Krochmal Standards Track [Page 38]
- RFC 6762 Multicast DNS February 2013
- The test for whether a response originated on the local link is done
- in two ways:
- * All responses received with a destination address in the IP
- header that is the mDNS IPv4 link-local multicast address
- 224.0.0.251 or the mDNS IPv6 link-local multicast address
- FF02::FB are necessarily deemed to have originated on the local
- link, regardless of source IP address. This is essential to
- allow devices to work correctly and reliably in unusual
- configurations, such as multiple logical IP subnets overlayed on
- a single link, or in cases of severe misconfiguration, where
- devices are physically connected to the same link, but are
- currently misconfigured with completely unrelated IP addresses
- and subnet masks.
- * For responses received with a unicast destination address in the
- IP header, the source IP address in the packet is checked to see
- if it is an address on a local subnet. An IPv4 source address
- is determined to be on a local subnet if, for (one of) the
- address(es) configured on the interface receiving the packet, (I
- & M) == (P & M), where I and M are the interface address and
- subnet mask respectively, P is the source IP address from the
- packet, '&' represents the bitwise logical 'and' operation, and
- '==' represents a bitwise equality test. An IPv6 source address
- is determined to be on the local link if, for any of the on-link
- IPv6 prefixes on the interface receiving the packet (learned via
- IPv6 router advertisements or otherwise configured on the host),
- the first 'n' bits of the IPv6 source address match the first
- 'n' bits of the prefix address, where 'n' is the length of the
- prefix being considered.
- Since queriers will ignore responses apparently originating outside
- the local subnet, a responder SHOULD avoid generating responses that
- it can reasonably predict will be ignored. This applies particularly
- in the case of overlayed subnets. If a responder receives a query
- addressed to the mDNS IPv4 link-local multicast address 224.0.0.251,
- from a source address not apparently on the same subnet as the
- responder (or, in the case of IPv6, from a source IPv6 address for
- which the responder does not have any address with the same prefix on
- that interface), then even if the query indicates that a unicast
- response is preferred (see Section 5.4, "Questions Requesting Unicast
- Responses"), the responder SHOULD elect to respond by multicast
- anyway, since it can reasonably predict that a unicast response with
- an apparently non-local source address will probably be ignored.
- Cheshire & Krochmal Standards Track [Page 39]
- RFC 6762 Multicast DNS February 2013
- 12. Special Characteristics of Multicast DNS Domains
- Unlike conventional DNS names, names that end in ".local." have only
- local significance. The same is true of names within the IPv4 link-
- local reverse mapping domain "254.169.in-addr.arpa." and the IPv6
- link-local reverse mapping domains "8.e.f.ip6.arpa.",
- "9.e.f.ip6.arpa.", "a.e.f.ip6.arpa.", and "b.e.f.ip6.arpa.".
- These names function primarily as protocol identifiers, rather than
- as user-visible identifiers. Even though they may occasionally be
- visible to end users, that is not their primary purpose. As such,
- these names should be treated as opaque identifiers. In particular,
- the string "local" should not be translated or localized into
- different languages, much as the name "localhost" is not translated
- or localized into different languages.
- Conventional Unicast DNS seeks to provide a single unified namespace,
- where a given DNS query yields the same answer no matter where on the
- planet it is performed or to which recursive DNS server the query is
- sent. In contrast, each IP link has its own private ".local.",
- "254.169.in-addr.arpa." and IPv6 link-local reverse mapping
- namespaces, and the answer to any query for a name within those
- domains depends on where that query is asked. (This characteristic
- is not unique to Multicast DNS. Although the original concept of DNS
- was a single global namespace, in recent years, split views,
- firewalls, intranets, DNS geolocation, and the like have increasingly
- meant that the answer to a given DNS query has become dependent on
- the location of the querier.)
- The IPv4 name server address for a Multicast DNS domain is
- 224.0.0.251. The IPv6 name server address for a Multicast DNS domain
- is FF02::FB. These are multicast addresses; therefore, they identify
- not a single host but a collection of hosts, working in cooperation
- to maintain some reasonable facsimile of a competently managed DNS
- zone. Conceptually, a Multicast DNS domain is a single DNS zone;
- however, its server is implemented as a distributed process running
- on a cluster of loosely cooperating CPUs rather than as a single
- process running on a single CPU.
- Multicast DNS domains are not delegated from their parent domain via
- use of NS (Name Server) records, and there is also no concept of
- delegation of subdomains within a Multicast DNS domain. Just because
- a particular host on the network may answer queries for a particular
- record type with the name "example.local." does not imply anything
- about whether that host will answer for the name
- "child.example.local.", or indeed for other record types with the
- name "example.local.".
- Cheshire & Krochmal Standards Track [Page 40]
- RFC 6762 Multicast DNS February 2013
- There are no NS records anywhere in Multicast DNS domains. Instead,
- the Multicast DNS domains are reserved by IANA, and there is
- effectively an implicit delegation of all Multicast DNS domains to
- the 224.0.0.251:5353 and [FF02::FB]:5353 multicast groups, by virtue
- of client software implementing the protocol rules specified in this
- document.
- Multicast DNS zones have no SOA (Start of Authority) record. A
- conventional DNS zone's SOA record contains information such as the
- email address of the zone administrator and the monotonically
- increasing serial number of the last zone modification. There is no
- single human administrator for any given Multicast DNS zone, so there
- is no email address. Because the hosts managing any given Multicast
- DNS zone are only loosely coordinated, there is no readily available
- monotonically increasing serial number to determine whether or not
- the zone contents have changed. A host holding part of the shared
- zone could crash or be disconnected from the network at any time
- without informing the other hosts. There is no reliable way to
- provide a zone serial number that would, whenever such a crash or
- disconnection occurred, immediately change to indicate that the
- contents of the shared zone had changed.
- Zone transfers are not possible for any Multicast DNS zone.
- 13. Enabling and Disabling Multicast DNS
- The option to fail-over to Multicast DNS for names not ending in
- ".local." SHOULD be a user-configured option, and SHOULD be disabled
- by default because of the possible security issues related to
- unintended local resolution of apparently global names. Enabling
- Multicast DNS for names not ending in ".local." may be appropriate on
- a secure isolated network, or on some future network were machines
- exclusively use DNSSEC for all DNS queries, and have Multicast DNS
- responders capable of generating the appropriate cryptographic DNSSEC
- signatures, thereby guarding against spoofing.
- The option to look up unqualified (relative) names by appending
- ".local." (or not) is controlled by whether ".local." appears (or
- not) in the client's DNS search list.
- No special control is needed for enabling and disabling Multicast DNS
- for names explicitly ending with ".local." as entered by the user.
- The user doesn't need a way to disable Multicast DNS for names ending
- with ".local.", because if the user doesn't want to use Multicast
- DNS, they can achieve this by simply not using those names. If a
- user *does* enter a name ending in ".local.", then we can safely
- assume the user's intention was probably that it should work. Having
- user configuration options that can be (intentionally or
- Cheshire & Krochmal Standards Track [Page 41]
- RFC 6762 Multicast DNS February 2013
- unintentionally) set so that local names don't work is just one more
- way of frustrating the user's ability to perform the tasks they want,
- perpetuating the view that, "IP networking is too complicated to
- configure and too hard to use".
- 14. Considerations for Multiple Interfaces
- A host SHOULD defend its dot-local host name on all active interfaces
- on which it is answering Multicast DNS queries.
- In the event of a name conflict on *any* interface, a host should
- configure a new host name, if it wishes to maintain uniqueness of its
- host name.
- A host may choose to use the same name (or set of names) for all of
- its address records on all interfaces, or it may choose to manage its
- Multicast DNS interfaces independently, potentially answering to a
- different name (or set of names) on different interfaces.
- Except in the case of proxying and other similar specialized uses,
- addresses in IPv4 or IPv6 address records in Multicast DNS responses
- MUST be valid for use on the interface on which the response is being
- sent.
- Just as the same link-local IP address may validly be in use
- simultaneously on different links by different hosts, the same link-
- local host name may validly be in use simultaneously on different
- links, and this is not an error. A multihomed host with connections
- to two different links may be able to communicate with two different
- hosts that are validly using the same name. While this kind of name
- duplication should be rare, it means that a host that wants to fully
- support this case needs network programming APIs that allow
- applications to specify on what interface to perform a link-local
- Multicast DNS query, and to discover on what interface a Multicast
- DNS response was received.
- There is one other special precaution that multihomed hosts need to
- take. It's common with today's laptop computers to have an Ethernet
- connection and an 802.11 [IEEE.802.11] wireless connection active at
- the same time. What the software on the laptop computer can't easily
- tell is whether the wireless connection is in fact bridged onto the
- same network segment as its Ethernet connection. If the two networks
- are bridged together, then packets the host sends on one interface
- will arrive on the other interface a few milliseconds later, and care
- must be taken to ensure that this bridging does not cause problems:
- Cheshire & Krochmal Standards Track [Page 42]
- RFC 6762 Multicast DNS February 2013
- When the host announces its host name (i.e., its address records) on
- its wireless interface, those announcement records are sent with the
- cache-flush bit set, so when they arrive on the Ethernet segment,
- they will cause all the peers on the Ethernet to flush the host's
- Ethernet address records from their caches. The Multicast DNS
- protocol has a safeguard to protect against this situation: when
- records are received with the cache-flush bit set, other records are
- not deleted from peer caches immediately, but are marked for deletion
- in one second. When the host sees its own wireless address records
- arrive on its Ethernet interface, with the cache-flush bit set, this
- one-second grace period gives the host time to respond and re-
- announce its Ethernet address records, to reinstate those records in
- peer caches before they are deleted.
- As described, this solves one problem, but creates another, because
- when those Ethernet announcement records arrive back on the wireless
- interface, the host would again respond defensively to reinstate its
- wireless records, and this process would continue forever,
- continuously flooding the network with traffic. The Multicast DNS
- protocol has a second safeguard, to solve this problem: the cache-
- flush bit does not apply to records received very recently, within
- the last second. This means that when the host sees its own Ethernet
- address records arrive on its wireless interface, with the cache-
- flush bit set, it knows there's no need to re-announce its wireless
- address records again because it already sent them less than a second
- ago, and this makes them immune from deletion from peer caches. (See
- Section 10.2.)
- 15. Considerations for Multiple Responders on the Same Machine
- It is possible to have more than one Multicast DNS responder and/or
- querier implementation coexist on the same machine, but there are
- some known issues.
- 15.1. Receiving Unicast Responses
- In most operating systems, incoming *multicast* packets can be
- delivered to *all* open sockets bound to the right port number,
- provided that the clients take the appropriate steps to allow this.
- For this reason, all Multicast DNS implementations SHOULD use the
- SO_REUSEPORT and/or SO_REUSEADDR options (or equivalent as
- appropriate for the operating system in question) so they will all be
- able to bind to UDP port 5353 and receive incoming multicast packets
- addressed to that port. However, unlike multicast packets, incoming
- unicast UDP packets are typically delivered only to the first socket
- to bind to that port. This means that "QU" responses and other
- packets sent via unicast will be received only by the first Multicast
- DNS responder and/or querier on a system. This limitation can be
- Cheshire & Krochmal Standards Track [Page 43]
- RFC 6762 Multicast DNS February 2013
- partially mitigated if Multicast DNS implementations detect when they
- are not the first to bind to port 5353, and in that case they do not
- request "QU" responses. One way to detect if there is another
- Multicast DNS implementation already running is to attempt binding to
- port 5353 without using SO_REUSEPORT and/or SO_REUSEADDR, and if that
- fails it indicates that some other socket is already bound to this
- port.
- 15.2. Multipacket Known-Answer lists
- When a Multicast DNS querier issues a query with too many Known
- Answers to fit into a single packet, it divides the Known-Answer list
- into two or more packets. Multicast DNS responders associate the
- initial truncated query with its continuation packets by examining
- the source IP address in each packet. Since two independent
- Multicast DNS queriers running on the same machine will be sending
- packets with the same source IP address, from an outside perspective
- they appear to be a single entity. If both queriers happened to send
- the same multipacket query at the same time, with different Known-
- Answer lists, then they could each end up suppressing answers that
- the other needs.
- 15.3. Efficiency
- If different clients on a machine were each to have their own
- independent Multicast DNS implementation, they would lose certain
- efficiency benefits. Apart from the unnecessary code duplication,
- memory usage, and CPU load, the clients wouldn't get the benefit of a
- shared system-wide cache, and they would not be able to aggregate
- separate queries into single packets to reduce network traffic.
- 15.4. Recommendation
- Because of these issues, this document encourages implementers to
- design systems with a single Multicast DNS implementation that
- provides Multicast DNS services shared by all clients on that
- machine, much as most operating systems today have a single TCP
- implementation, which is shared between all clients on that machine.
- Due to engineering constraints, there may be situations where
- embedding a "user-level" Multicast DNS implementation in the client
- application software is the most expedient solution, and while this
- will usually work in practice, implementers should be aware of the
- issues outlined in this section.
- Cheshire & Krochmal Standards Track [Page 44]
- RFC 6762 Multicast DNS February 2013
- 16. Multicast DNS Character Set
- Historically, Unicast DNS has been used with a very restricted set of
- characters. Indeed, conventional DNS is usually limited to just
- twenty-six letters, ten digits and the hyphen character, not even
- allowing spaces or other punctuation. Attempts to remedy this for
- Unicast DNS have been badly constrained by the perceived need to
- accommodate old buggy legacy DNS implementations. In reality, the
- DNS specification itself actually imposes no limits on what
- characters may be used in names, and good DNS implementations handle
- any arbitrary eight-bit data without trouble. "Clarifications to the
- DNS Specification" [RFC2181] directly discusses the subject of
- allowable character set in Section 11 ("Name syntax"), and explicitly
- states that DNS names may contain arbitrary eight-bit data. However,
- the old rules for ARPANET host names back in the 1980s required host
- names to be just letters, digits, and hyphens [RFC1034], and since
- the predominant use of DNS is to store host address records, many
- have assumed that the DNS protocol itself suffers from the same
- limitation. It might be accurate to say that there could be
- hypothetical bad implementations that do not handle eight-bit data
- correctly, but it would not be accurate to say that the protocol
- doesn't allow names containing eight-bit data.
- Multicast DNS is a new protocol and doesn't (yet) have old buggy
- legacy implementations to constrain the design choices. Accordingly,
- it adopts the simple obvious elegant solution: all names in Multicast
- DNS MUST be encoded as precomposed UTF-8 [RFC3629] "Net-Unicode"
- [RFC5198] text.
- Some users of 16-bit Unicode have taken to stuffing a "zero-width
- nonbreaking space" character (U+FEFF) at the start of each UTF-16
- file, as a hint to identify whether the data is big-endian or little-
- endian, and calling it a "Byte Order Mark" (BOM). Since there is
- only one possible byte order for UTF-8 data, a BOM is neither
- necessary nor permitted. Multicast DNS names MUST NOT contain a
- "Byte Order Mark". Any occurrence of the Unicode character U+FEFF at
- the start or anywhere else in a Multicast DNS name MUST be
- interpreted as being an actual intended part of the name,
- representing (just as for any other legal unicode value) an actual
- literal instance of that character (in this case a zero-width non-
- breaking space character).
- For names that are restricted to US-ASCII [RFC0020] letters, digits,
- and hyphens, the UTF-8 encoding is identical to the US-ASCII
- encoding, so this is entirely compatible with existing host names.
- For characters outside the US-ASCII range, UTF-8 encoding is used.
- Cheshire & Krochmal Standards Track [Page 45]
- RFC 6762 Multicast DNS February 2013
- Multicast DNS implementations MUST NOT use any other encodings apart
- from precomposed UTF-8 (US-ASCII being considered a compatible subset
- of UTF-8). The reasons for selecting UTF-8 instead of Punycode
- [RFC3492] are discussed further in Appendix F.
- The simple rules for case-insensitivity in Unicast DNS [RFC1034]
- [RFC1035] also apply in Multicast DNS; that is to say, in name
- comparisons, the lowercase letters "a" to "z" (0x61 to 0x7A) match
- their uppercase equivalents "A" to "Z" (0x41 to 0x5A). Hence, if a
- querier issues a query for an address record with the name
- "myprinter.local.", then a responder having an address record with
- the name "MyPrinter.local." should issue a response. No other
- automatic equivalences should be assumed. In particular, all UTF-8
- multibyte characters (codes 0x80 and higher) are compared by simple
- binary comparison of the raw byte values. Accented characters are
- *not* defined to be automatically equivalent to their unaccented
- counterparts. Where automatic equivalences are desired, this may be
- achieved through the use of programmatically generated CNAME records.
- For example, if a responder has an address record for an accented
- name Y, and a querier issues a query for a name X, where X is the
- same as Y with all the accents removed, then the responder may issue
- a response containing two resource records: a CNAME record "X CNAME
- Y", asserting that the requested name X (unaccented) is an alias for
- the true (accented) name Y, followed by the address record for Y.
- 17. Multicast DNS Message Size
- The 1987 DNS specification [RFC1035] restricts DNS messages carried
- by UDP to no more than 512 bytes (not counting the IP or UDP
- headers). For UDP packets carried over the wide-area Internet in
- 1987, this was appropriate. For link-local multicast packets on
- today's networks, there is no reason to retain this restriction.
- Given that the packets are by definition link-local, there are no
- Path MTU issues to consider.
- Multicast DNS messages carried by UDP may be up to the IP MTU of the
- physical interface, less the space required for the IP header (20
- bytes for IPv4; 40 bytes for IPv6) and the UDP header (8 bytes).
- In the case of a single Multicast DNS resource record that is too
- large to fit in a single MTU-sized multicast response packet, a
- Multicast DNS responder SHOULD send the resource record alone, in a
- single IP datagram, using multiple IP fragments. Resource records
- this large SHOULD be avoided, except in the very rare cases where
- they really are the appropriate solution to the problem at hand.
- Implementers should be aware that many simple devices do not
- reassemble fragmented IP datagrams, so large resource records SHOULD
- NOT be used except in specialized cases where the implementer knows
- Cheshire & Krochmal Standards Track [Page 46]
- RFC 6762 Multicast DNS February 2013
- that all receivers implement reassembly, or where the large resource
- record contains optional data which is not essential for correct
- operation of the client.
- A Multicast DNS packet larger than the interface MTU, which is sent
- using fragments, MUST NOT contain more than one resource record.
- Even when fragmentation is used, a Multicast DNS packet, including IP
- and UDP headers, MUST NOT exceed 9000 bytes.
- Note that 9000 bytes is also the maximum payload size of an Ethernet
- "Jumbo" packet [Jumbo]. However, in practice Ethernet "Jumbo"
- packets are not widely used, so it is advantageous to keep packets
- under 1500 bytes whenever possible. Even on hosts that normally
- handle Ethernet "Jumbo" packets and IP fragment reassembly, it is
- becoming more common for these hosts to implement power-saving modes
- where the main CPU goes to sleep and hands off packet reception tasks
- to a more limited processor in the network interface hardware, which
- may not support Ethernet "Jumbo" packets or IP fragment reassembly.
- 18. Multicast DNS Message Format
- This section describes specific rules pertaining to the allowable
- values for the header fields of a Multicast DNS message, and other
- message format considerations.
- 18.1. ID (Query Identifier)
- Multicast DNS implementations SHOULD listen for unsolicited responses
- issued by hosts booting up (or waking up from sleep or otherwise
- joining the network). Since these unsolicited responses may contain
- a useful answer to a question for which the querier is currently
- awaiting an answer, Multicast DNS implementations SHOULD examine all
- received Multicast DNS response messages for useful answers, without
- regard to the contents of the ID field or the Question Section. In
- Multicast DNS, knowing which particular query message (if any) is
- responsible for eliciting a particular response message is less
- interesting than knowing whether the response message contains useful
- information.
- Multicast DNS implementations MAY cache data from any or all
- Multicast DNS response messages they receive, for possible future
- use, provided of course that normal TTL aging is performed on these
- cached resource records.
- In multicast query messages, the Query Identifier SHOULD be set to
- zero on transmission.
- Cheshire & Krochmal Standards Track [Page 47]
- RFC 6762 Multicast DNS February 2013
- In multicast responses, including unsolicited multicast responses,
- the Query Identifier MUST be set to zero on transmission, and MUST be
- ignored on reception.
- In legacy unicast response messages generated specifically in
- response to a particular (unicast or multicast) query, the Query
- Identifier MUST match the ID from the query message.
- 18.2. QR (Query/Response) Bit
- In query messages the QR bit MUST be zero.
- In response messages the QR bit MUST be one.
- 18.3. OPCODE
- In both multicast query and multicast response messages, the OPCODE
- MUST be zero on transmission (only standard queries are currently
- supported over multicast). Multicast DNS messages received with an
- OPCODE other than zero MUST be silently ignored.
- 18.4. AA (Authoritative Answer) Bit
- In query messages, the Authoritative Answer bit MUST be zero on
- transmission, and MUST be ignored on reception.
- In response messages for Multicast domains, the Authoritative Answer
- bit MUST be set to one (not setting this bit would imply there's some
- other place where "better" information may be found) and MUST be
- ignored on reception.
- 18.5. TC (Truncated) Bit
- In query messages, if the TC bit is set, it means that additional
- Known-Answer records may be following shortly. A responder SHOULD
- record this fact, and wait for those additional Known-Answer records,
- before deciding whether to respond. If the TC bit is clear, it means
- that the querying host has no additional Known Answers.
- In multicast response messages, the TC bit MUST be zero on
- transmission, and MUST be ignored on reception.
- In legacy unicast response messages, the TC bit has the same meaning
- as in conventional Unicast DNS: it means that the response was too
- large to fit in a single packet, so the querier SHOULD reissue its
- query using TCP in order to receive the larger response.
- Cheshire & Krochmal Standards Track [Page 48]
- RFC 6762 Multicast DNS February 2013
- 18.6. RD (Recursion Desired) Bit
- In both multicast query and multicast response messages, the
- Recursion Desired bit SHOULD be zero on transmission, and MUST be
- ignored on reception.
- 18.7. RA (Recursion Available) Bit
- In both multicast query and multicast response messages, the
- Recursion Available bit MUST be zero on transmission, and MUST be
- ignored on reception.
- 18.8. Z (Zero) Bit
- In both query and response messages, the Zero bit MUST be zero on
- transmission, and MUST be ignored on reception.
- 18.9. AD (Authentic Data) Bit
- In both multicast query and multicast response messages, the
- Authentic Data bit [RFC2535] MUST be zero on transmission, and MUST
- be ignored on reception.
- 18.10. CD (Checking Disabled) Bit
- In both multicast query and multicast response messages, the Checking
- Disabled bit [RFC2535] MUST be zero on transmission, and MUST be
- ignored on reception.
- 18.11. RCODE (Response Code)
- In both multicast query and multicast response messages, the Response
- Code MUST be zero on transmission. Multicast DNS messages received
- with non-zero Response Codes MUST be silently ignored.
- 18.12. Repurposing of Top Bit of qclass in Question Section
- In the Question Section of a Multicast DNS query, the top bit of the
- qclass field is used to indicate that unicast responses are preferred
- for this particular question. (See Section 5.4.)
- 18.13. Repurposing of Top Bit of rrclass in Resource Record Sections
- In the Resource Record Sections of a Multicast DNS response, the top
- bit of the rrclass field is used to indicate that the record is a
- member of a unique RRSet, and the entire RRSet has been sent together
- (in the same packet, or in consecutive packets if there are too many
- records to fit in a single packet). (See Section 10.2.)
- Cheshire & Krochmal Standards Track [Page 49]
- RFC 6762 Multicast DNS February 2013
- 18.14. Name Compression
- When generating Multicast DNS messages, implementations SHOULD use
- name compression wherever possible to compress the names of resource
- records, by replacing some or all of the resource record name with a
- compact two-byte reference to an appearance of that data somewhere
- earlier in the message [RFC1035].
- This applies not only to Multicast DNS responses, but also to
- queries. When a query contains more than one question, successive
- questions in the same message often contain similar names, and
- consequently name compression SHOULD be used, to save bytes. In
- addition, queries may also contain Known Answers in the Answer
- Section, or probe tiebreaking data in the Authority Section, and
- these names SHOULD similarly be compressed for network efficiency.
- In addition to compressing the *names* of resource records, names
- that appear within the *rdata* of the following rrtypes SHOULD also
- be compressed in all Multicast DNS messages:
- NS, CNAME, PTR, DNAME, SOA, MX, AFSDB, RT, KX, RP, PX, SRV, NSEC
- Until future IETF Standards Action [RFC5226] specifying that names in
- the rdata of other types should be compressed, names that appear
- within the rdata of any type not listed above MUST NOT be compressed.
- Implementations receiving Multicast DNS messages MUST correctly
- decode compressed names appearing in the Question Section, and
- compressed names of resource records appearing in other sections.
- In addition, implementations MUST correctly decode compressed names
- appearing within the *rdata* of the rrtypes listed above. Where
- possible, implementations SHOULD also correctly decode compressed
- names appearing within the *rdata* of other rrtypes known to the
- implementers at the time of implementation, because such forward-
- thinking planning helps facilitate the deployment of future
- implementations that may have reason to compress those rrtypes. It
- is possible that no future IETF Standards Action [RFC5226] will be
- created that mandates or permits the compression of rdata in new
- types, but having implementations designed such that they are capable
- of decompressing all known types helps keep future options open.
- One specific difference between Unicast DNS and Multicast DNS is that
- Unicast DNS does not allow name compression for the target host in an
- SRV record, because Unicast DNS implementations before the first SRV
- specification in 1996 [RFC2052] may not decode these compressed
- Cheshire & Krochmal Standards Track [Page 50]
- RFC 6762 Multicast DNS February 2013
- records properly. Since all Multicast DNS implementations were
- created after 1996, all Multicast DNS implementations are REQUIRED to
- decode compressed SRV records correctly.
- In legacy unicast responses generated to answer legacy queries, name
- compression MUST NOT be performed on SRV records.
- 19. Summary of Differences between Multicast DNS and Unicast DNS
- Multicast DNS shares, as much as possible, the familiar APIs, naming
- syntax, resource record types, etc., of Unicast DNS. There are, of
- course, necessary differences by virtue of it using multicast, and by
- virtue of it operating in a community of cooperating peers, rather
- than a precisely defined hierarchy controlled by a strict chain of
- formal delegations from the root. These differences are summarized
- below:
- Multicast DNS...
- * uses multicast
- * uses UDP port 5353 instead of port 53
- * operates in well-defined parts of the DNS namespace
- * has no SOA (Start of Authority) records
- * uses UTF-8, and only UTF-8, to encode resource record names
- * allows names up to 255 bytes plus a terminating zero byte
- * allows name compression in rdata for SRV and other record types
- * allows larger UDP packets
- * allows more than one question in a query message
- * defines consistent results for qtype "ANY" and qclass "ANY" queries
- * uses the Answer Section of a query to list Known Answers
- * uses the TC bit in a query to indicate additional Known Answers
- * uses the Authority Section of a query for probe tiebreaking
- * ignores the Query ID field (except for generating legacy responses)
- * doesn't require the question to be repeated in the response message
- * uses unsolicited responses to announce new records
- * uses NSEC records to signal nonexistence of records
- * defines a unicast-response bit in the rrclass of query questions
- * defines a cache-flush bit in the rrclass of response records
- * uses DNS RR TTL 0 to indicate that a record has been deleted
- * recommends AAAA records in the additional section when responding
- to rrtype "A" queries, and vice versa
- * monitors queries to perform Duplicate Question Suppression
- * monitors responses to perform Duplicate Answer Suppression...
- * ... and Ongoing Conflict Detection
- * ... and Opportunistic Caching
- Cheshire & Krochmal Standards Track [Page 51]
- RFC 6762 Multicast DNS February 2013
- 20. IPv6 Considerations
- An IPv4-only host and an IPv6-only host behave as "ships that pass in
- the night". Even if they are on the same Ethernet, neither is aware
- of the other's traffic. For this reason, each physical link may have
- *two* unrelated ".local." zones, one for IPv4 and one for IPv6.
- Since for practical purposes, a group of IPv4-only hosts and a group
- of IPv6-only hosts on the same Ethernet act as if they were on two
- entirely separate Ethernet segments, it is unsurprising that their
- use of the ".local." zone should occur exactly as it would if they
- really were on two entirely separate Ethernet segments.
- A dual-stack (v4/v6) host can participate in both ".local." zones,
- and should register its name(s) and perform its lookups both using
- IPv4 and IPv6. This enables it to reach, and be reached by, both
- IPv4-only and IPv6-only hosts. In effect, this acts like a
- multihomed host, with one connection to the logical "IPv4 Ethernet
- segment", and a connection to the logical "IPv6 Ethernet segment".
- When such a host generates NSEC records, if it is using the same host
- name for its IPv4 addresses and its IPv6 addresses on that network
- interface, its NSEC records should indicate that the host name has
- both A and AAAA records.
- 21. Security Considerations
- The algorithm for detecting and resolving name conflicts is, by its
- very nature, an algorithm that assumes cooperating participants. Its
- purpose is to allow a group of hosts to arrive at a mutually disjoint
- set of host names and other DNS resource record names, in the absence
- of any central authority to coordinate this or mediate disputes. In
- the absence of any higher authority to resolve disputes, the only
- alternative is that the participants must work together cooperatively
- to arrive at a resolution.
- In an environment where the participants are mutually antagonistic
- and unwilling to cooperate, other mechanisms are appropriate, like
- manually configured DNS.
- In an environment where there is a group of cooperating participants,
- but clients cannot be sure that there are no antagonistic hosts on
- the same physical link, the cooperating participants need to use
- IPsec signatures and/or DNSSEC [RFC4033] signatures so that they can
- distinguish Multicast DNS messages from trusted participants (which
- they process as usual) from Multicast DNS messages from untrusted
- participants (which they silently discard).
- Cheshire & Krochmal Standards Track [Page 52]
- RFC 6762 Multicast DNS February 2013
- If DNS queries for *global* DNS names are sent to the mDNS multicast
- address (during network outages which disrupt communication with the
- greater Internet) it is *especially* important to use DNSSEC, because
- the user may have the impression that he or she is communicating with
- some authentic host, when in fact he or she is really communicating
- with some local host that is merely masquerading as that name. This
- is less critical for names ending with ".local.", because the user
- should be aware that those names have only local significance and no
- global authority is implied.
- Most computer users neglect to type the trailing dot at the end of a
- fully qualified domain name, making it a relative domain name (e.g.,
- "www.example.com"). In the event of network outage, attempts to
- positively resolve the name as entered will fail, resulting in
- application of the search list, including ".local.", if present. A
- malicious host could masquerade as "www.example.com." by answering
- the resulting Multicast DNS query for "www.example.com.local.". To
- avoid this, a host MUST NOT append the search suffix ".local.", if
- present, to any relative (partially qualified) host name containing
- two or more labels. Appending ".local." to single-label relative
- host names is acceptable, since the user should have no expectation
- that a single-label host name will resolve as is. However, users who
- have both "example.com" and "local" in their search lists should be
- aware that if they type "www" into their web browser, it may not be
- immediately clear to them whether the page that appears is
- "www.example.com" or "www.local".
- Multicast DNS uses UDP port 5353. On operating systems where only
- privileged processes are allowed to use ports below 1024, no such
- privilege is required to use port 5353.
- 22. IANA Considerations
- IANA has allocated the UDP port 5353 for the Multicast DNS protocol
- described in this document [SN].
- IANA has allocated the IPv4 link-local multicast address 224.0.0.251
- for the use described in this document [MC4].
- IANA has allocated the IPv6 multicast address set FF0X::FB (where "X"
- indicates any hexadecimal digit from '1' to 'F') for the use
- described in this document [MC6]. Only address FF02::FB (link-local
- scope) is currently in use by deployed software, but it is possible
- that in the future implementers may experiment with Multicast DNS
- using larger-scoped addresses, such as FF05::FB (site-local scope)
- [RFC4291].
- Cheshire & Krochmal Standards Track [Page 53]
- RFC 6762 Multicast DNS February 2013
- IANA has implemented the following DNS records:
- MDNS.MCAST.NET. IN A 224.0.0.251
- 251.0.0.224.IN-ADDR.ARPA. IN PTR MDNS.MCAST.NET.
- Entries for the AAAA and corresponding PTR records have not been made
- as there is not yet an RFC providing direction for the management of
- the IP6.ARPA domain relating to the IPv6 multicast address space.
- The reuse of the top bit of the rrclass field in the Question and
- Resource Record Sections means that Multicast DNS can only carry DNS
- records with classes in the range 0-32767. Classes in the range
- 32768 to 65535 are incompatible with Multicast DNS. IANA has noted
- this fact, and if IANA receives a request to allocate a DNS class
- value above 32767, IANA will make sure the requester is aware of this
- implication before proceeding. This does not mean that allocations
- of DNS class values above 32767 should be denied, only that they
- should not be allowed until the requester has indicated that they are
- aware of how this allocation will interact with Multicast DNS.
- However, to date, only three DNS classes have been assigned by IANA
- (1, 3, and 4), and only one (1, "Internet") is actually in widespread
- use, so this issue is likely to remain a purely theoretical one.
- IANA has recorded the list of domains below as being Special-Use
- Domain Names [RFC6761]:
- .local.
- .254.169.in-addr.arpa.
- .8.e.f.ip6.arpa.
- .9.e.f.ip6.arpa.
- .a.e.f.ip6.arpa.
- .b.e.f.ip6.arpa.
- 22.1. Domain Name Reservation Considerations
- The six domains listed above, and any names falling within those
- domains (e.g., "MyPrinter.local.", "34.12.254.169.in-addr.arpa.",
- "Ink-Jet._pdl-datastream._tcp.local.") are special [RFC6761] in the
- following ways:
- 1. Users may use these names as they would other DNS names,
- entering them anywhere that they would otherwise enter a
- conventional DNS name, or a dotted decimal IPv4 address, or a
- literal IPv6 address.
- Since there is no central authority responsible for assigning
- dot-local names, and all devices on the local network are
- equally entitled to claim any dot-local name, users SHOULD be
- Cheshire & Krochmal Standards Track [Page 54]
- RFC 6762 Multicast DNS February 2013
- aware of this and SHOULD exercise appropriate caution. In an
- untrusted or unfamiliar network environment, users SHOULD be
- aware that using a name like "www.local" may not actually
- connect them to the web site they expected, and could easily
- connect them to a different web page, or even a fake or spoof
- of their intended web site, designed to trick them into
- revealing confidential information. As always with networking,
- end-to-end cryptographic security can be a useful tool. For
- example, when connecting with ssh, the ssh host key
- verification process will inform the user if it detects that
- the identity of the entity they are communicating with has
- changed since the last time they connected to that name.
- 2. Application software may use these names as they would other
- similar DNS names, and is not required to recognize the names
- and treat them specially. Due to the relative ease of spoofing
- dot-local names, end-to-end cryptographic security remains
- important when communicating across a local network, just as it
- is when communicating across the global Internet.
- 3. Name resolution APIs and libraries SHOULD recognize these names
- as special and SHOULD NOT send queries for these names to their
- configured (unicast) caching DNS server(s). This is to avoid
- unnecessary load on the root name servers and other name
- servers, caused by queries for which those name servers do not
- have useful non-negative answers to give, and will not ever
- have useful non-negative answers to give.
- 4. Caching DNS servers SHOULD recognize these names as special and
- SHOULD NOT attempt to look up NS records for them, or otherwise
- query authoritative DNS servers in an attempt to resolve these
- names. Instead, caching DNS servers SHOULD generate immediate
- NXDOMAIN responses for all such queries they may receive (from
- misbehaving name resolver libraries). This is to avoid
- unnecessary load on the root name servers and other name
- servers.
- 5. Authoritative DNS servers SHOULD NOT by default be configurable
- to answer queries for these names, and, like caching DNS
- servers, SHOULD generate immediate NXDOMAIN responses for all
- such queries they may receive. DNS server software MAY provide
- a configuration option to override this default, for testing
- purposes or other specialized uses.
- 6. DNS server operators SHOULD NOT attempt to configure
- authoritative DNS servers to act as authoritative for any of
- these names. Configuring an authoritative DNS server to act as
- authoritative for any of these names may not, in many cases,
- Cheshire & Krochmal Standards Track [Page 55]
- RFC 6762 Multicast DNS February 2013
- yield the expected result. Since name resolver libraries and
- caching DNS servers SHOULD NOT send queries for those names
- (see 3 and 4 above), such queries SHOULD be suppressed before
- they even reach the authoritative DNS server in question, and
- consequently it will not even get an opportunity to answer
- them.
- 7. DNS Registrars MUST NOT allow any of these names to be
- registered in the normal way to any person or entity. These
- names are reserved protocol identifiers with special meaning
- and fall outside the set of names available for allocation by
- registrars. Attempting to allocate one of these names as if it
- were a normal domain name will probably not work as desired,
- for reasons 3, 4, and 6 above.
- 23. Acknowledgments
- The concepts described in this document have been explored,
- developed, and implemented with help from Ran Atkinson, Richard
- Brown, Freek Dijkstra, Erik Guttman, Kyle McKay, Pasi Sarolahti,
- Pekka Savola, Robby Simpson, Mark Townsley, Paul Vixie, Bill
- Woodcock, and others. Special thanks go to Bob Bradley, Josh
- Graessley, Scott Herscher, Rory McGuire, Roger Pantos, and Kiren
- Sekar for their significant contributions. Special thanks also to
- Kerry Lynn for converting the document to xml2rfc form in May 2010,
- and to Area Director Ralph Droms for shepherding the document through
- its final steps.
- 24. References
- 24.1. Normative References
- [MC4] IANA, "IPv4 Multicast Address Space Registry",
- <http://www.iana.org/assignments/multicast-addresses/>.
- [MC6] IANA, "IPv6 Multicast Address Space Registry",
- <http://www.iana.org/assignments/
- ipv6-multicast-addresses/>.
- [RFC0020] Cerf, V., "ASCII format for network interchange", RFC 20,
- October 1969.
- [RFC1034] Mockapetris, P., "Domain names - concepts and facilities",
- STD 13, RFC 1034, November 1987.
- [RFC1035] Mockapetris, P., "Domain names - implementation and
- specification", STD 13, RFC 1035, November 1987.
- Cheshire & Krochmal Standards Track [Page 56]
- RFC 6762 Multicast DNS February 2013
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
- [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
- 10646", STD 63, RFC 3629, November 2003.
- [RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S.
- Rose, "Resource Records for the DNS Security Extensions",
- RFC 4034, March 2005.
- [RFC5198] Klensin, J. and M. Padlipsky, "Unicode Format for Network
- Interchange", RFC 5198, March 2008.
- [RFC6195] Eastlake 3rd, D., "Domain Name System (DNS) IANA
- Considerations", BCP 42, RFC 6195, March 2011.
- [RFC6761] Cheshire, S. and M. Krochmal, "Special-Use Domain Names",
- RFC 6761, February 2013.
- [SN] IANA, "Service Name and Transport Protocol Port Number
- Registry", <http://www.iana.org/assignments/
- service-names-port-numbers/>.
- 24.2. Informative References
- [B4W] "Bonjour for Windows",
- <http://en.wikipedia.org/wiki/Bonjour_(software)>.
- [BJ] Apple Bonjour Open Source Software,
- <http://developer.apple.com/bonjour/>.
- [IEEE.802.3]
- "Information technology - Telecommunications and
- information exchange between systems - Local and
- metropolitan area networks - Specific requirements - Part
- 3: Carrier Sense Multiple Access with Collision Detection
- (CMSA/CD) Access Method and Physical Layer
- Specifications", IEEE Std 802.3-2008, December 2008,
- <http://standards.ieee.org/getieee802/802.3.html>.
- [IEEE.802.11]
- "Information technology - Telecommunications and
- information exchange between systems - Local and
- metropolitan area networks - Specific requirements - Part
- 11: Wireless LAN Medium Access Control (MAC) and Physical
- Layer (PHY) Specifications", IEEE Std 802.11-2007, June
- 2007, <http://standards.ieee.org/getieee802/802.11.html>.
- Cheshire & Krochmal Standards Track [Page 57]
- RFC 6762 Multicast DNS February 2013
- [Jumbo] "Ethernet Jumbo Frames", November 2009,
- <http://www.ethernetalliance.org/library/whitepaper/
- ethernet-jumbo-frames/>.
- [NIAS] Cheshire, S. "Discovering Named Instances of Abstract
- Services using DNS", Work in Progress, July 2001.
- [NSD] "NsdManager | Android Developer", June 2012,
- <http://developer.android.com/reference/
- android/net/nsd/NsdManager.html>.
- [RFC2052] Gulbrandsen, A. and P. Vixie, "A DNS RR for specifying the
- location of services (DNS SRV)", RFC 2052, October 1996.
- [RFC2132] Alexander, S. and R. Droms, "DHCP Options and BOOTP Vendor
- Extensions", RFC 2132, March 1997.
- [RFC2136] Vixie, P., Ed., Thomson, S., Rekhter, Y., and J. Bound,
- "Dynamic Updates in the Domain Name System (DNS UPDATE)",
- RFC 2136, April 1997.
- [RFC2181] Elz, R. and R. Bush, "Clarifications to the DNS
- Specification", RFC 2181, July 1997.
- [RFC2535] Eastlake 3rd, D., "Domain Name System Security
- Extensions", RFC 2535, March 1999.
- [RFC2671] Vixie, P., "Extension Mechanisms for DNS (EDNS0)", RFC
- 2671, August 1999.
- [RFC2845] Vixie, P., Gudmundsson, O., Eastlake 3rd, D., and B.
- Wellington, "Secret Key Transaction Authentication for DNS
- (TSIG)", RFC 2845, May 2000.
- [RFC2930] Eastlake 3rd, D., "Secret Key Establishment for DNS (TKEY
- RR)", RFC 2930, September 2000.
- [RFC2931] Eastlake 3rd, D., "DNS Request and Transaction Signatures
- ( SIG(0)s )", RFC 2931, September 2000.
- [RFC3007] Wellington, B., "Secure Domain Name System (DNS) Dynamic
- Update", RFC 3007, November 2000.
- [RFC3492] Costello, A., "Punycode: A Bootstring encoding of Unicode
- for Internationalized Domain Names in Applications
- (IDNA)", RFC 3492, March 2003.
- Cheshire & Krochmal Standards Track [Page 58]
- RFC 6762 Multicast DNS February 2013
- [RFC3927] Cheshire, S., Aboba, B., and E. Guttman, "Dynamic
- Configuration of IPv4 Link-Local Addresses", RFC 3927, May
- 2005.
- [RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S.
- Rose, "DNS Security Introduction and Requirements", RFC
- 4033, March 2005.
- [RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing
- Architecture", RFC 4291, February 2006.
- [RFC4795] Aboba, B., Thaler, D., and L. Esibov, "Link-local
- Multicast Name Resolution (LLMNR)", RFC 4795, January
- 2007.
- [RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman,
- "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861,
- September 2007.
- [RFC4862] Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless
- Address Autoconfiguration", RFC 4862, September 2007.
- [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
- IANA Considerations Section in RFCs", BCP 26, RFC 5226,
- May 2008.
- [RFC5890] Klensin, J., "Internationalized Domain Names for
- Applications (IDNA): Definitions and Document Framework",
- RFC 5890, August 2010.
- [RFC6281] Cheshire, S., Zhu, Z., Wakikawa, R., and L. Zhang,
- "Understanding Apple's Back to My Mac (BTMM) Service", RFC
- 6281, June 2011.
- [RFC6760] Cheshire, S. and M. Krochmal, "Requirements for a Protocol
- to Replace the AppleTalk Name Binding Protocol (NBP)", RFC
- 6760, February 2013.
- [RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service
- Discovery", RFC 6763, February 2013.
- [Zeroconf] Cheshire, S. and D. Steinberg, "Zero Configuration
- Networking: The Definitive Guide", O'Reilly Media, Inc.,
- ISBN 0-596-10100-7, December 2005.
- Cheshire & Krochmal Standards Track [Page 59]
- RFC 6762 Multicast DNS February 2013
- Appendix A. Design Rationale for Choice of UDP Port Number
- Arguments were made for and against using UDP port 53, the standard
- Unicast DNS port. Some of the arguments are given below. The
- arguments for using a different port were greater in number and more
- compelling, so that option was ultimately selected. The UDP port
- "5353" was selected for its mnemonic similarity to "53".
- Arguments for using UDP port 53:
- * This is "just DNS", so it should be the same port.
- * There is less work to be done updating old resolver libraries to do
- simple Multicast DNS queries. Only the destination address need be
- changed. In some cases, this can be achieved without any code
- changes, just by adding the address 224.0.0.251 to a configuration
- file.
- Arguments for using a different port (UDP port 5353):
- * This is not "just DNS". This is a DNS-like protocol, but
- different.
- * Changing resolver library code to use a different port number is
- not hard. In some cases, this can be achieved without any code
- changes, just by adding the address 224.0.0.251:5353 to a
- configuration file.
- * Using the same port number makes it hard to run a Multicast DNS
- responder and a conventional Unicast DNS server on the same
- machine. If a conventional Unicast DNS server wishes to implement
- Multicast DNS as well, it can still do that, by opening two
- sockets. Having two different port numbers allows this
- flexibility.
- * Some VPN software hijacks all outgoing traffic to port 53 and
- redirects it to a special DNS server set up to serve those VPN
- clients while they are connected to the corporate network. It is
- questionable whether this is the right thing to do, but it is
- common, and redirecting link-local multicast DNS packets to a
- remote server rarely produces any useful results. It does mean,
- for example, that a user of such VPN software becomes unable to
- access their local network printer sitting on their desk right next
- to their computer. Using a different UDP port helps avoid this
- particular problem.
- Cheshire & Krochmal Standards Track [Page 60]
- RFC 6762 Multicast DNS February 2013
- * On many operating systems, unprivileged software may not send or
- receive packets on low-numbered ports. This means that any
- software sending or receiving Multicast DNS packets on port 53
- would have to run as "root", which is an undesirable security risk.
- Using a higher-numbered UDP port avoids this restriction.
- Appendix B. Design Rationale for Not Using Hashed Multicast Addresses
- Some discovery protocols use a range of multicast addresses, and
- determine the address to be used by a hash function of the name being
- sought. Queries are sent via multicast to the address as indicated
- by the hash function, and responses are returned to the querier via
- unicast. Particularly in IPv6, where multicast addresses are
- extremely plentiful, this approach is frequently advocated. For
- example, IPv6 Neighbor Discovery [RFC4861] sends Neighbor
- Solicitation messages to the "solicited-node multicast address",
- which is computed as a function of the solicited IPv6 address.
- There are some disadvantages to using hashed multicast addresses like
- this in a service discovery protocol:
- * When a host has a large number of records with different names, the
- host may have to join a large number of multicast groups. Each
- time a host joins or leaves a multicast group, this results in
- Internet Group Management Protocol (IGMP) or Multicast Listener
- Discovery (MLD) traffic on the network announcing this fact.
- Joining a large number of multicast groups can place undue burden
- on the Ethernet hardware, which typically supports a limited number
- of multicast addresses efficiently. When this number is exceeded,
- the Ethernet hardware may have to resort to receiving all
- multicasts and passing them up to the host networking code for
- filtering in software, thereby defeating much of the point of using
- a multicast address range in the first place. Finally, many IPv6
- stacks have a fixed limit IPV6_MAX_MEMBERSHIPS, and the code simply
- fails with an error if a client attempts to exceed this limit.
- Common values for IPV6_MAX_MEMBERSHIPS are 20 or 31.
- * Multiple questions cannot be placed in one packet if they don't all
- hash to the same multicast address.
- * Duplicate Question Suppression doesn't work if queriers are not
- seeing each other's queries.
- * Duplicate Answer Suppression doesn't work if responders are not
- seeing each other's responses.
- * Opportunistic Caching doesn't work.
- Cheshire & Krochmal Standards Track [Page 61]
- RFC 6762 Multicast DNS February 2013
- * Ongoing Conflict Detection doesn't work.
- Appendix C. Design Rationale for Maximum Multicast DNS Name Length
- Multicast DNS names may be up to 255 bytes long (in the on-the-wire
- message format), not counting the terminating zero byte at the end.
- "Domain Names - Implementation and Specification" [RFC1035] says:
- Various objects and parameters in the DNS have size limits. They
- are listed below. Some could be easily changed, others are more
- fundamental.
- labels 63 octets or less
- names 255 octets or less
- ...
- the total length of a domain name (i.e., label octets and label
- length octets) is restricted to 255 octets or less.
- This text does not state whether this 255-byte limit includes the
- terminating zero at the end of every name.
- Several factors lead us to conclude that the 255-byte limit does
- *not* include the terminating zero:
- o It is common in software engineering to have size limits that are a
- power of two, or a multiple of a power of two, for efficiency. For
- example, an integer on a modern processor is typically 2, 4, or 8
- bytes, not 3 or 5 bytes. The number 255 is not a power of two, nor
- is it to most people a particularly noteworthy number. It is
- noteworthy to computer scientists for only one reason -- because it
- is exactly one *less* than a power of two. When a size limit is
- exactly one less than a power of two, that suggests strongly that
- the one extra byte is being reserved for some specific reason -- in
- this case reserved, perhaps, to leave room for a terminating zero
- at the end.
- o In the case of DNS label lengths, the stated limit is 63 bytes. As
- with the total name length, this limit is exactly one less than a
- power of two. This label length limit also excludes the label
- length byte at the start of every label. Including that extra
- byte, a 63-byte label takes 64 bytes of space in memory or in a DNS
- message.
- Cheshire & Krochmal Standards Track [Page 62]
- RFC 6762 Multicast DNS February 2013
- o It is common in software engineering for the semantic "length" of
- an object to be one less than the number of bytes it takes to store
- that object. For example, in C, strlen("foo") is 3, but
- sizeof("foo") (which includes the terminating zero byte at the end)
- is 4.
- o The text describing the total length of a domain name mentions
- explicitly that label length and data octets are included, but does
- not mention the terminating zero at the end. The zero byte at the
- end of a domain name is not a label length. Indeed, the value zero
- is chosen as the terminating marker precisely because it is not a
- legal length byte value -- DNS prohibits empty labels. For
- example, a name like "bad..name." is not a valid domain name
- because it contains a zero-length label in the middle, which cannot
- be expressed in a DNS message, because software parsing the message
- would misinterpret a zero label-length byte as being a zero "end of
- name" marker instead.
- Finally, "Clarifications to the DNS Specification" [RFC2181] offers
- additional confirmation that, in the context of DNS specifications,
- the stated "length" of a domain name does not include the terminating
- zero byte at the end. That document refers to the root name, which
- is typically written as "." and is represented in a DNS message by a
- single lone zero byte (i.e., zero bytes of data plus a terminating
- zero), as the "zero length full name":
- The zero length full name is defined as representing the root of
- the DNS tree, and is typically written and displayed as ".".
- This wording supports the interpretation that, in a DNS context, when
- talking about lengths of names, the terminating zero byte at the end
- is not counted. If the root name (".") is considered to be zero
- length, then to be consistent, the length (for example) of "org" has
- to be 4 and the length of "ietf.org" has to be 9, as shown below:
- ------
- | 0x00 | length = 0
- ------
- ------------------ ------
- | 0x03 | o | r | g | | 0x00 | length = 4
- ------------------ ------
- ----------------------------------------- ------
- | 0x04 | i | e | t | f | 0x03 | o | r | g | | 0x00 | length = 9
- ----------------------------------------- ------
- Cheshire & Krochmal Standards Track [Page 63]
- RFC 6762 Multicast DNS February 2013
- This means that the maximum length of a domain name, as represented
- in a Multicast DNS message, up to but not including the final
- terminating zero, must not exceed 255 bytes.
- However, many Unicast DNS implementers have read these RFCs
- differently, and argue that the 255-byte limit does include the
- terminating zero, and that the "Clarifications to the DNS
- Specification" [RFC2181] statement that "." is the "zero length full
- name" was simply a mistake.
- Hence, implementers should be aware that other Unicast DNS
- implementations may limit the maximum domain name to 254 bytes plus a
- terminating zero, depending on how that implementer interpreted the
- DNS specifications.
- Compliant Multicast DNS implementations MUST support names up to 255
- bytes plus a terminating zero, i.e., 256 bytes total.
- Appendix D. Benefits of Multicast Responses
- Some people have argued that sending responses via multicast is
- inefficient on the network. In fact, using multicast responses can
- result in a net lowering of overall multicast traffic for a variety
- of reasons, and provides other benefits too:
- * Opportunistic Caching. One multicast response can update the
- caches on all machines on the network. If another machine later
- wants to issue the same query, and it already has the answer in its
- cache, it may not need to even transmit that multicast query on the
- network at all.
- * Duplicate Query Suppression. When more than one machine has the
- same ongoing long-lived query running, every machine does not have
- to transmit its own independent query. When one machine transmits
- a query, all the other hosts see the answers, so they can suppress
- their own queries.
- * Passive Observation Of Failures (POOF). When a host sees a
- multicast query, but does not see the corresponding multicast
- response, it can use this information to promptly delete stale data
- from its cache. To achieve the same level of user-interface
- quality and responsiveness without multicast responses would
- require lower cache lifetimes and more frequent network polling,
- resulting in a higher packet rate.
- * Passive Conflict Detection. Just because a name has been
- previously verified to be unique does not guarantee it will
- continue to be so indefinitely. By allowing all Multicast DNS
- Cheshire & Krochmal Standards Track [Page 64]
- RFC 6762 Multicast DNS February 2013
- responders to constantly monitor their peers' responses, conflicts
- arising out of network topology changes can be promptly detected
- and resolved. If responses were not sent via multicast, some other
- conflict detection mechanism would be needed, imposing its own
- additional burden on the network.
- * Use on devices with constrained memory resources: When using
- delayed responses to reduce network collisions, responders need to
- maintain a list recording to whom each answer should be sent. The
- option of multicast responses allows responders with limited
- storage, which cannot store an arbitrarily long list of response
- addresses, to choose to fail-over to a single multicast response in
- place of multiple unicast responses, when appropriate.
- * Overlayed Subnets. In the case of overlayed subnets, multicast
- responses allow a receiver to know with certainty that a response
- originated on the local link, even when its source address may
- apparently suggest otherwise.
- * Robustness in the face of misconfiguration: Link-local multicast
- transcends virtually every conceivable network misconfiguration.
- Even if you have a collection of devices where every device's IP
- address, subnet mask, default gateway, and DNS server address are
- all wrong, packets sent by any of those devices addressed to a
- link-local multicast destination address will still be delivered to
- all peers on the local link. This can be extremely helpful when
- diagnosing and rectifying network problems, since it facilitates a
- direct communication channel between client and server that works
- without reliance on ARP, IP routing tables, etc. Being able to
- discover what IP address a device has (or thinks it has) is
- frequently a very valuable first step in diagnosing why it is
- unable to communicate on the local network.
- Appendix E. Design Rationale for Encoding Negative Responses
- Alternative methods of asserting nonexistence were considered, such
- as using an NXDOMAIN response, or emitting a resource record with
- zero-length rdata.
- Using an NXDOMAIN response does not work well with Multicast DNS. A
- Unicast DNS NXDOMAIN response applies to the entire message, but for
- efficiency Multicast DNS allows (and encourages) multiple responses
- in a single message. If the error code in the header were NXDOMAIN,
- it would not be clear to which name(s) that error code applied.
- Asserting nonexistence by emitting a resource record with zero-length
- rdata would mean that there would be no way to differentiate between
- a record that doesn't exist, and a record that does exist, with zero-
- Cheshire & Krochmal Standards Track [Page 65]
- RFC 6762 Multicast DNS February 2013
- length rdata. By analogy, most file systems today allow empty files,
- so a file that exists with zero bytes of data is not considered
- equivalent to a filename that does not exist.
- A benefit of asserting nonexistence through NSEC records instead of
- through NXDOMAIN responses is that NSEC records can be added to the
- Additional Section of a DNS response to offer additional information
- beyond what the querier explicitly requested. For example, in
- response to an SRV query, a responder should include A record(s)
- giving its IPv4 addresses in the Additional Section, and an NSEC
- record indicating which other types it does or does not have for this
- name. If the responder is running on a host that does not support
- IPv6 (or does support IPv6 but currently has no IPv6 address on that
- interface) then this NSEC record in the Additional Section will
- indicate this absence of AAAA records. In effect, the responder is
- saying, "Here's my SRV record, and here are my IPv4 addresses, and
- no, I don't have any IPv6 addresses, so don't waste your time
- asking". Without this information in the Additional Section, it
- would take the querier an additional round-trip to perform an
- additional query to ascertain that the target host has no AAAA
- records. (Arguably Unicast DNS could also benefit from this ability
- to express nonexistence in the Additional Section, but that is
- outside the scope of this document.)
- Appendix F. Use of UTF-8
- After many years of debate, as a result of the perceived need to
- accommodate certain DNS implementations that apparently couldn't
- handle any character that's not a letter, digit, or hyphen (and
- apparently never would be updated to remedy this limitation), the
- Unicast DNS community settled on an extremely baroque encoding called
- "Punycode" [RFC3492]. Punycode is a remarkably ingenious encoding
- solution, but it is complicated, hard to understand, and hard to
- implement, using sophisticated techniques including insertion unsort
- coding, generalized variable-length integers, and bias adaptation.
- The resulting encoding is remarkably compact given the constraints,
- but it's still not as good as simple straightforward UTF-8, and it's
- hard even to predict whether a given input string will encode to a
- Punycode string that fits within DNS's 63-byte limit, except by
- simply trying the encoding and seeing whether it fits. Indeed, the
- encoded size depends not only on the input characters, but on the
- order they appear, so the same set of characters may or may not
- encode to a legal Punycode string that fits within DNS's 63-byte
- limit, depending on the order the characters appear. This is
- extremely hard to present in a user interface that explains to users
- why one name is allowed, but another name containing the exact same
- characters is not. Neither Punycode nor any other of the "ASCII-
- Compatible Encodings" [RFC5890] proposed for Unicast DNS may be used
- Cheshire & Krochmal Standards Track [Page 66]
- RFC 6762 Multicast DNS February 2013
- in Multicast DNS messages. Any text being represented internally in
- some other representation must be converted to canonical precomposed
- UTF-8 before being placed in any Multicast DNS message.
- Appendix G. Private DNS Namespaces
- The special treatment of names ending in ".local." has been
- implemented in Macintosh computers since the days of Mac OS 9, and
- continues today in Mac OS X and iOS. There are also implementations
- for Microsoft Windows [B4W], Linux, and other platforms.
- Some network operators setting up private internal networks
- ("intranets") have used unregistered top-level domains, and some may
- have used the ".local" top-level domain. Using ".local" as a private
- top-level domain conflicts with Multicast DNS and may cause problems
- for users. Clients can be configured to send both Multicast and
- Unicast DNS queries in parallel for these names, and this does allow
- names to be looked up both ways, but this results in additional
- network traffic and additional delays in name resolution, as well as
- potentially creating user confusion when it is not clear whether any
- given result was received via link-local multicast from a peer on the
- same link, or from the configured unicast name server. Because of
- this, we recommend against using ".local" as a private Unicast DNS
- top-level domain. We do not recommend use of unregistered top-level
- domains at all, but should network operators decide to do this, the
- following top-level domains have been used on private internal
- networks without the problems caused by trying to reuse ".local." for
- this purpose:
- .intranet.
- .internal.
- .private.
- .corp.
- .home.
- .lan.
- Appendix H. Deployment History
- In July 1997, in an email to the net-thinkers@thumper.vmeng.com
- mailing list, Stuart Cheshire first proposed the idea of running the
- AppleTalk Name Binding Protocol [RFC6760] over IP. As a result of
- this and related IETF discussions, the IETF Zeroconf working group
- was chartered September 1999. After various working group
- discussions and other informal IETF discussions, several Internet-
- Drafts were written that were loosely related to the general themes
- of DNS and multicast, but did not address the service discovery
- aspect of NBP.
- Cheshire & Krochmal Standards Track [Page 67]
- RFC 6762 Multicast DNS February 2013
- In April 2000, Stuart Cheshire registered IPv4 multicast address
- 224.0.0.251 with IANA [MC4] and began writing code to test and
- develop the idea of performing NBP-like service discovery using
- Multicast DNS, which was documented in a group of three Internet-
- Drafts:
- o "Requirements for a Protocol to Replace the AppleTalk Name Binding
- Protocol (NBP)" [RFC6760] is an overview explaining the AppleTalk
- Name Binding Protocol, because many in the IETF community had
- little first-hand experience using AppleTalk, and confusion in the
- IETF community about what AppleTalk NBP did was causing confusion
- about what would be required in an IP-based replacement.
- o "Discovering Named Instances of Abstract Services using DNS" [NIAS]
- proposed a way to perform NBP-like service discovery using DNS-
- compatible names and record types.
- o "Multicast DNS" (this document) specifies a way to transport those
- DNS-compatible queries and responses using IP multicast, for zero-
- configuration environments where no conventional Unicast DNS server
- was available.
- In 2001, an update to Mac OS 9 added resolver library support for
- host name lookup using Multicast DNS. If the user typed a name such
- as "MyPrinter.local." into any piece of networking software that used
- the standard Mac OS 9 name lookup APIs, then those name lookup APIs
- would recognize the name as a dot-local name and query for it by
- sending simple one-shot Multicast DNS queries to 224.0.0.251:5353.
- This enabled the user to, for example, enter the name
- "MyPrinter.local." into their web browser in order to view a
- printer's status and configuration web page, or enter the name
- "MyPrinter.local." into the printer setup utility to create a print
- queue for printing documents on that printer.
- Multicast DNS responder software, with full service discovery, first
- began shipping to end users in volume with the launch of Mac OS X
- 10.2 "Jaguar" in August 2002, and network printer makers (who had
- historically supported AppleTalk in their network printers and were
- receptive to IP-based technologies that could offer them similar
- ease-of-use) started adopting Multicast DNS shortly thereafter.
- In September 2002, Apple released the source code for the
- mDNSResponder daemon as Open Source under Apple's standard Apple
- Public Source License (APSL).
- Multicast DNS responder software became available for Microsoft
- Windows users in June 2004 with the launch of Apple's "Rendezvous for
- Windows" (now "Bonjour for Windows"), both in executable form (a
- Cheshire & Krochmal Standards Track [Page 68]
- RFC 6762 Multicast DNS February 2013
- downloadable installer for end users) and as Open Source (one of the
- supported platforms within Apple's body of cross-platform code in the
- publicly accessible mDNSResponder CVS source code repository) [BJ].
- In August 2006, Apple re-licensed the cross-platform mDNSResponder
- source code under the Apache License, Version 2.0.
- In addition to desktop and laptop computers running Mac OS X and
- Microsoft Windows, Multicast DNS is now implemented in a wide range
- of hardware devices, such as Apple's "AirPort" wireless base
- stations, iPhone and iPad, and in home gateways from other vendors,
- network printers, network cameras, TiVo DVRs, etc.
- The Open Source community has produced many independent
- implementations of Multicast DNS, some in C like Apple's
- mDNSResponder daemon, and others in a variety of different languages
- including Java, Python, Perl, and C#/Mono.
- In January 2007, the IETF published the Informational RFC "Link-Local
- Multicast Name Resolution (LLMNR)" [RFC4795], which is substantially
- similar to Multicast DNS, but incompatible in some small but
- important ways. In particular, the LLMNR design explicitly excluded
- support for service discovery, which made it an unsuitable candidate
- for a protocol to replace AppleTalk NBP [RFC6760].
- While the original focus of Multicast DNS and DNS-Based Service
- Discovery was for zero-configuration environments without a
- conventional Unicast DNS server, DNS-Based Service Discovery also
- works using Unicast DNS servers, using DNS Update [RFC2136] [RFC3007]
- to create service discovery records and standard DNS queries to query
- for them. Apple's Back to My Mac service, launched with Mac OS X
- 10.5 "Leopard" in October 2007, uses DNS-Based Service Discovery over
- Unicast DNS [RFC6281].
- In June 2012, Google's Android operating system added native support
- for DNS-SD and Multicast DNS with the android.net.nsd.NsdManager
- class in Android 4.1 "Jelly Bean" (API Level 16) [NSD].
- Cheshire & Krochmal Standards Track [Page 69]
- RFC 6762 Multicast DNS February 2013
- Authors' Addresses
- Stuart Cheshire
- Apple Inc.
- 1 Infinite Loop
- Cupertino, CA 95014
- USA
- Phone: +1 408 974 3207
- EMail: cheshire@apple.com
- Marc Krochmal
- Apple Inc.
- 1 Infinite Loop
- Cupertino, CA 95014
- USA
- Phone: +1 408 974 4368
- EMail: marc@apple.com
- Cheshire & Krochmal Standards Track [Page 70]
|