1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
|
Internet Engineering Task Force (IETF) S. Cheshire
Request for Comments: 6763 M. Krochmal
Category: Standards Track Apple Inc.
ISSN: 2070-1721 February 2013
DNS-Based Service Discovery
Abstract
This document specifies how DNS resource records are named and
structured to facilitate service discovery. Given a type of service
that a client is looking for, and a domain in which the client is
looking for that service, this mechanism allows clients to discover
a list of named instances of that desired service, using standard
DNS queries. This mechanism is referred to as DNS-based Service
Discovery, or DNS-SD.
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/rfc6763.
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.
Cheshire & Krochmal Standards Track [Page 1]
^L
RFC 6763 DNS-Based Service Discovery February 2013
Table of Contents
1. Introduction ....................................................3
2. Conventions and Terminology Used in This Document ...............5
3. Design Goals ....................................................5
4. Service Instance Enumeration (Browsing) .........................6
4.1. Structured Service Instance Names ..........................6
4.2. User Interface Presentation ................................9
4.3. Internal Handling of Names .................................9
5. Service Instance Resolution ....................................10
6. Data Syntax for DNS-SD TXT Records .............................11
6.1. General Format Rules for DNS TXT Records ..................11
6.2. DNS-SD TXT Record Size ....................................12
6.3. DNS TXT Record Format Rules for Use in DNS-SD .............13
6.4. Rules for Keys in DNS-SD Key/Value Pairs ..................14
6.5. Rules for Values in DNS-SD Key/Value Pairs ................16
6.6. Example TXT Record ........................................17
6.7. Version Tag ...............................................17
6.8. Service Instances with Multiple TXT Records ...............18
7. Service Names ..................................................19
7.1. Selective Instance Enumeration (Subtypes) .................21
7.2. Service Name Length Limits ................................23
8. Flagship Naming ................................................25
9. Service Type Enumeration .......................................27
10. Populating the DNS with Information ...........................27
11. Discovery of Browsing and Registration Domains (Domain
Enumeration) ..................................................28
12. DNS Additional Record Generation ..............................30
12.1. PTR Records ..............................................30
12.2. SRV Records ..............................................30
12.3. TXT Records ..............................................31
12.4. Other Record Types .......................................31
13. Working Examples ..............................................31
13.1. What web pages are being advertised from dns-sd.org? .....31
13.2. What printer-configuration web pages are there? ..........31
13.3. How do I access the web page called "Service
Discovery"? ..............................................32
14. IPv6 Considerations ...........................................32
15. Security Considerations .......................................32
16. IANA Considerations ...........................................32
17. Acknowledgments ...............................................33
18. References ....................................................33
18.1. Normative References .....................................33
18.2. Informative References ...................................34
Appendix A. Rationale for Using DNS as a Basis for Service
Discovery .............................................37
Cheshire & Krochmal Standards Track [Page 2]
^L
RFC 6763 DNS-Based Service Discovery February 2013
Appendix B. Ordering of Service Instance Name Components ..........38
B.1. Semantic Structure ........................................38
B.2. Network Efficiency ........................................39
B.3. Operational Flexibility ...................................39
Appendix C. What You See Is What You Get ..........................40
Appendix D. Choice of Factory-Default Names .......................42
Appendix E. Name Encodings in the Domain Name System ..............44
Appendix F. "Continuous Live Update" Browsing Model ...............45
Appendix G. Deployment History ....................................47
1. Introduction
This document specifies how DNS resource records are named and
structured to facilitate service discovery. Given a type of service
that a client is looking for, and a domain in which the client is
looking for that service, this mechanism allows clients to discover a
list of named instances of that desired service, using standard DNS
queries. This mechanism is referred to as DNS-based Service
Discovery, or DNS-SD.
This document proposes no change to the structure of DNS messages,
and no new operation codes, response codes, resource record types, or
any other new DNS protocol values.
This document specifies that a particular service instance can be
described using a DNS SRV [RFC2782] and DNS TXT [RFC1035] record.
The SRV record has a name of the form "<Instance>.<Service>.<Domain>"
and gives the target host and port where the service instance can be
reached. The DNS TXT record of the same name gives additional
information about this instance, in a structured form using key/value
pairs, described in Section 6. A client discovers the list of
available instances of a given service type using a query for a DNS
PTR [RFC1035] record with a name of the form "<Service>.<Domain>",
which returns a set of zero or more names, which are the names of the
aforementioned DNS SRV/TXT record pairs.
This specification is compatible with both Multicast DNS [RFC6762]
and with today's existing Unicast DNS server and client software.
When used with Multicast DNS, DNS-SD can provide zero-configuration
operation -- just connect a DNS-SD/mDNS device, and its services are
advertised on the local link with no further user interaction [ZC].
When used with conventional Unicast DNS, some configuration will
usually be required -- such as configuring the device with the DNS
domain(s) in which it should advertise its services, and configuring
it with the DNS Update [RFC2136] [RFC3007] keys to give it permission
to do so. In rare cases, such as a secure corporate network behind a
Cheshire & Krochmal Standards Track [Page 3]
^L
RFC 6763 DNS-Based Service Discovery February 2013
firewall where no DNS Update keys are required, zero-configuration
operation may be achieved by simply having the device register its
services in a default registration domain learned from the network
(see Section 11, "Discovery of Browsing and Registration Domains"),
but this is the exception and usually security credentials will be
required to perform DNS updates.
Note that when using DNS-SD with Unicast DNS, the Unicast DNS-SD
service does NOT have to be provided by the same DNS server hardware
that is currently providing an organization's conventional host name
lookup service. While many people think of "DNS" exclusively in the
context of mapping host names to IP addresses, in fact, "the DNS is a
general (if somewhat limited) hierarchical database, and can store
almost any kind of data, for almost any purpose" [RFC2181]. By
delegating the "_tcp" and "_udp" subdomains, all the workload related
to DNS-SD can be offloaded to a different machine. This flexibility,
to handle DNS-SD on the main DNS server or not, at the network
administrator's discretion, is one of the benefits of using DNS.
Even when the DNS-SD functions are delegated to a different machine,
the benefits of using DNS remain: it is mature technology, well
understood, with multiple independent implementations from different
vendors, a wide selection of books published on the subject, and an
established workforce experienced in its operation. In contrast,
adopting some other service discovery technology would require every
site in the world to install, learn, configure, operate, and maintain
some entirely new and unfamiliar server software. Faced with these
obstacles, it seems unlikely that any other service discovery
technology could hope to compete with the ubiquitous deployment that
DNS already enjoys. For further discussion, see Appendix A,
"Rationale for Using DNS as a Basis for Service Discovery".
This document is written for two audiences: for developers creating
application software that offers or accesses services on the network,
and for developers creating DNS-SD libraries to implement the
advertising and discovery mechanisms. For both audiences,
understanding the entire document is helpful. For developers
creating application software, this document provides guidance on
choosing instance names, service names, and other aspects that play a
role in creating a good overall user experience. However, also
understanding the underlying DNS mechanisms used to provide the
service discovery facilities helps application developers understand
the capabilities and limitations of those underlying mechanisms
(e.g., name length limits). For library developers writing software
to construct the DNS records (to advertise a service) and generate
the DNS queries (to discover and use a service), understanding the
ultimate user-experience goals helps them provide APIs that can meet
those goals.
Cheshire & Krochmal Standards Track [Page 4]
^L
RFC 6763 DNS-Based Service Discovery February 2013
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].
3. Design Goals
Of the many properties a good service discovery protocol needs to
have, three of particular importance are:
(i) The ability to query for services of a certain type in a
certain logical domain, and receive in response a list of named
instances (network browsing or "Service Instance Enumeration").
(ii) Given a particular named instance, the ability to efficiently
resolve that instance name to the required information a client
needs to actually use the service, i.e., IP address and port
number, at the very least (Service Instance Resolution).
(iii) Instance names should be relatively persistent. If a user
selects their default printer from a list of available choices
today, then tomorrow they should still be able to print on that
printer -- even if the IP address and/or port number where the
service resides have changed -- without the user (or their
software) having to repeat the step (i) (the initial network
browsing) a second time.
In addition, if it is to become successful, a service discovery
protocol should be so simple to implement that virtually any device
capable of implementing IP should not have any trouble implementing
the service discovery software as well.
These goals are discussed in more detail in the remainder of this
document. A more thorough treatment of service discovery
requirements may be found in "Requirements for a Protocol to Replace
the AppleTalk Name Binding Protocol (NBP)" [RFC6760]. That document
draws upon examples from two decades of operational experience with
AppleTalk to develop a list of universal requirements that are
broadly applicable to any potential service discovery protocol.
Cheshire & Krochmal Standards Track [Page 5]
^L
RFC 6763 DNS-Based Service Discovery February 2013
4. Service Instance Enumeration (Browsing)
Traditional DNS SRV records [RFC2782] are useful for locating
instances of a particular type of service when all the instances are
effectively indistinguishable and provide the same service to the
client.
For example, SRV records with the (hypothetical) name
"_http._tcp.example.com." would allow a client to discover servers
implementing the "_http._tcp" service (i.e., web servers) for the
"example.com." domain. The unstated assumption is that all these
servers offer an identical set of web pages, and it doesn't matter to
the client which of the servers it uses, as long as it selects one at
random according to the weight and priority rules laid out in the DNS
SRV specification [RFC2782].
Instances of other kinds of service are less easily interchangeable.
If a word processing application were to look up the (hypothetical)
SRV record "_ipp._tcp.example.com." to find the list of Internet
Printing Protocol (IPP) [RFC2910] printers at Example Co., then
picking one at random and printing on it would probably not be what
the user wanted.
The remainder of this section describes how SRV records may be used
in a slightly different way, to allow a user to discover the names of
all available instances of a given type of service, and then select,
from that list, the particular instance they desire.
4.1. Structured Service Instance Names
This document borrows the logical service-naming syntax and semantics
from DNS SRV records, but adds one level of indirection. Instead of
requesting records of type "SRV" with name "_ipp._tcp.example.com.",
the client requests records of type "PTR" (pointer from one name to
another in the DNS namespace) [RFC1035].
In effect, if one thinks of the domain name "_ipp._tcp.example.com."
as being analogous to an absolute path to a directory in a file
system, then DNS-SD's PTR lookup is akin to performing a listing of
that directory to find all the entries it contains. (Remember that
domain names are expressed in reverse order compared to path names --
an absolute path name starts with the root on the left and is read
from left to right, whereas a fully qualified domain name starts with
the root on the right and is read from right to left. If the fully
qualified domain name "_ipp._tcp.example.com." were expressed as a
file system path name, it would be "/com/example/_tcp/_ipp".)
Cheshire & Krochmal Standards Track [Page 6]
^L
RFC 6763 DNS-Based Service Discovery February 2013
The result of this PTR lookup for the name "<Service>.<Domain>" is a
set of zero or more PTR records giving Service Instance Names of the
form:
Service Instance Name = <Instance> . <Service> . <Domain>
For explanation of why the components are in this order, see Appendix
B, "Ordering of Service Instance Name Components".
4.1.1. Instance Names
The <Instance> portion of the Service Instance Name is a user-
friendly name consisting of arbitrary Net-Unicode text [RFC5198]. It
MUST NOT contain ASCII control characters (byte values 0x00-0x1F and
0x7F) [RFC20] but otherwise is allowed to contain any characters,
without restriction, including spaces, uppercase, lowercase,
punctuation -- including dots -- accented characters, non-Roman text,
and anything else that may be represented using Net-Unicode. For
discussion of why the <Instance> name should be a user-visible, user-
friendly name rather than an invisible machine-generated opaque
identifier, see Appendix C, "What You See Is What You Get".
The <Instance> portion of the name of a service being offered on the
network SHOULD be configurable by the user setting up the service, so
that he or she may give it an informative name. However, the device
or service SHOULD NOT require the user to configure a name before it
can be used. A sensible choice of default name can in many cases
allow the device or service to be accessed without any manual
configuration at all. The default name should be short and
descriptive, and SHOULD NOT include the device's Media Access Control
(MAC) address, serial number, or any similar incomprehensible
hexadecimal string in an attempt to make the name globally unique.
For discussion of why <Instance> names don't need to be (and SHOULD
NOT be) made unique at the factory, see Appendix D, "Choice of
Factory-Default Names".
This <Instance> portion of the Service Instance Name is stored
directly in the DNS as a single DNS label of canonical precomposed
UTF-8 [RFC3629] "Net-Unicode" (Unicode Normalization Form C)
[RFC5198] text. For further discussion of text encodings, see
Appendix E, "Name Encodings in the Domain Name System".
DNS labels are currently limited to 63 octets in length. UTF-8
encoding can require up to four octets per Unicode character, which
means that in the worst case, the <Instance> portion of a name could
be limited to fifteen Unicode characters. However, the Unicode
Cheshire & Krochmal Standards Track [Page 7]
^L
RFC 6763 DNS-Based Service Discovery February 2013
characters with longer octet lengths under UTF-8 encoding tend to be
the more rarely used ones, and tend to be the ones that convey
greater meaning per character.
Note that any character in the commonly used 16-bit Unicode Basic
Multilingual Plane [Unicode6] can be encoded with no more than three
octets of UTF-8 encoding. This means that an instance name can
contain up to 21 Kanji characters, which is a sufficiently expressive
name for most purposes.
4.1.2. Service Names
The <Service> portion of the Service Instance Name consists of a pair
of DNS labels, following the convention already established for SRV
records [RFC2782]. The first label of the pair is an underscore
character followed by the Service Name [RFC6335]. The Service Name
identifies what the service does and what application protocol it
uses to do it. The second label is either "_tcp" (for application
protocols that run over TCP) or "_udp" (for all others). For more
details, see Section 7, "Service Names".
4.1.3. Domain Names
The <Domain> portion of the Service Instance Name specifies the DNS
subdomain within which those names are registered. It may be
"local.", meaning "link-local Multicast DNS" [RFC6762], or it may be
a conventional Unicast DNS domain name, such as "ietf.org.",
"cs.stanford.edu.", or "eng.us.ibm.com." Because Service Instance
Names are not host names, they are not constrained by the usual rules
for host names [RFC1033] [RFC1034] [RFC1035], and rich-text service
subdomains are allowed and encouraged, for example:
Building 2, 1st Floor . example . com .
Building 2, 2nd Floor . example . com .
Building 2, 3rd Floor . example . com .
Building 2, 4th Floor . example . com .
In addition, because Service Instance Names are not constrained by
the limitations of host names, this document recommends that they be
stored in the DNS, and communicated over the wire, encoded as
straightforward canonical precomposed UTF-8 [RFC3629] "Net-Unicode"
(Unicode Normalization Form C) [RFC5198] text. In cases where the
DNS server returns a negative response for the name in question,
client software MAY choose to retry the query using the "Punycode"
algorithm [RFC3492] to convert the UTF-8 name to an IDNA "A-label"
[RFC5890], beginning with the top-level label, then issuing the query
Cheshire & Krochmal Standards Track [Page 8]
^L
RFC 6763 DNS-Based Service Discovery February 2013
repeatedly, with successively more labels translated to IDNA A-labels
each time, and giving up if it has converted all labels to IDNA
A-labels and the query still fails.
4.2. User Interface Presentation
The names resulting from the Service Instance Enumeration PTR lookup
are presented to the user in a list for the user to select one (or
more). Typically, only the first label is shown (the user-friendly
<Instance> portion of the name).
In the common case the <Service> and <Domain> are already known to
the client software, these having been provided implicitly by the
user in the first place, by the act of indicating the service being
sought, and the domain in which to look for it. Note that the
software handling the response should be careful not to make invalid
assumptions though, since it *is* possible, though rare, for a
service enumeration in one domain to return the names of services in
a different domain. Similarly, when using subtypes (see Section 7.1,
"Selective Instance Enumeration") the <Service> of the discovered
instance may not be exactly the same as the <Service> that was
requested.
For further discussion of Service Instance Enumeration (browsing)
user-interface considerations, see Appendix F, "'Continuous Live
Update' Browsing Model".
Once the user has selected the desired named instance, the Service
Instance Name may then be used immediately, or saved away in some
persistent user-preference data structure for future use, depending
on what is appropriate for the application in question.
4.3. Internal Handling of Names
If client software takes the <Instance>, <Service>, and <Domain>
portions of a Service Instance Name and internally concatenates them
together into a single string, then because the <Instance> portion is
allowed to contain any characters, including dots, appropriate
precautions MUST be taken to ensure that DNS label boundaries are
properly preserved. Client software can do this in a variety of
ways, such as character escaping.
This document RECOMMENDS that if concatenating the three portions of
a Service Instance Name, any dots in the <Instance> portion be
escaped following the customary DNS convention for text files: by
preceding literal dots with a backslash (so "." becomes "\.").
Likewise, any backslashes in the <Instance> portion should also be
escaped by preceding them with a backslash (so "\" becomes "\\").
Cheshire & Krochmal Standards Track [Page 9]
^L
RFC 6763 DNS-Based Service Discovery February 2013
Having done this, the three components of the name may be safely
concatenated. The backslash-escaping allows literal dots in the name
(escaped) to be distinguished from label-separator dots (not
escaped), and the resulting concatenated string may be safely passed
to standard DNS APIs like res_query(), which will interpret the
backslash-escaped string as intended.
5. Service Instance Resolution
When a client needs to contact a particular service, identified by a
Service Instance Name, previously discovered via Service Instance
Enumeration (browsing), it queries for the SRV and TXT records of
that name. The SRV record for a service gives the port number and
target host name where the service may be found. The TXT record
gives additional information about the service, as described in
Section 6, "Data Syntax for DNS-SD TXT Records".
SRV records are extremely useful because they remove the need for
preassigned port numbers. There are only 65535 TCP port numbers
available. These port numbers are traditionally allocated one per
application protocol [RFC6335]. Some protocols like the X Window
System have a block of 64 TCP ports allocated (6000-6063). Using a
different TCP port for each different instance of a given service on
a given machine is entirely sensible, but allocating each application
its own large static range, as was done for the X Window System, is
not a practical way to do that. On any given host, most TCP ports
are reserved for services that will never run on that particular host
in its lifetime. This is very poor utilization of the limited port
space. Using SRV records allows each host to allocate its available
port numbers dynamically to those services actually running on that
host that need them, and then advertise the allocated port numbers
via SRV records. Allocating the available listening port numbers
locally on a per-host basis as needed allows much better utilization
of the available port space than today's centralized global
allocation.
In the event that more than one SRV is returned, clients MUST
correctly interpret the priority and weight fields -- i.e., lower-
numbered priority servers should be used in preference to higher-
numbered priority servers, and servers with equal priority should be
selected randomly in proportion to their relative weights. However,
in the overwhelmingly common case, a single advertised DNS-SD service
instance is described by exactly one SRV record, and in this common
case the priority and weight fields of the SRV record SHOULD both be
set to zero.
Cheshire & Krochmal Standards Track [Page 10]
^L
RFC 6763 DNS-Based Service Discovery February 2013
6. Data Syntax for DNS-SD TXT Records
Some services discovered via Service Instance Enumeration may need
more than just an IP address and port number to completely identify
the service instance. For example, printing via the old Unix LPR
(port 515) protocol [RFC1179] often specifies a queue name [BJP].
This queue name is typically short and cryptic, and need not be shown
to the user. It should be regarded the same way as the IP address
and port number: it is another component of the addressing
information required to identify a specific instance of a service
being offered by some piece of hardware. Similarly, a file server
may have multiple volumes, each identified by its own volume name. A
web server typically has multiple pages, each identified by its own
URL. In these cases, the necessary additional data is stored in a
TXT record with the same name as the SRV record. The specific nature
of that additional data, and how it is to be used, is service-
dependent, but the overall syntax of the data in the TXT record is
standardized, as described below.
Every DNS-SD service MUST have a TXT record in addition to its SRV
record, with the same name, even if the service has no additional
data to store and the TXT record contains no more than a single zero
byte. This allows a service to have explicit control over the Time
to Live (TTL) of its (empty) TXT record, rather than using the
default negative caching TTL, which would otherwise be used for a "no
error no answer" DNS response.
Note that this requirement for a mandatory TXT record applies
exclusively to DNS-SD service advertising, i.e., services advertised
using the PTR+SRV+TXT convention specified in this document. It is
not a requirement of SRV records in general. The DNS SRV record
datatype [RFC2782] may still be used in other contexts without any
requirement for accompanying PTR and TXT records.
6.1. General Format Rules for DNS TXT Records
A DNS TXT record can be up to 65535 (0xFFFF) bytes long. The total
length is indicated by the length given in the resource record header
in the DNS message. There is no way to tell directly from the data
alone how long it is (e.g., there is no length count at the start, or
terminating NULL byte at the end).
Note that when using Multicast DNS [RFC6762] the maximum packet size
is 9000 bytes, including the IP header, UDP header, and DNS message
header, which imposes an upper limit on the size of TXT records of
about 8900 bytes. In practice the maximum sensible size of a DNS-SD
TXT record is smaller even than this, typically at most a few hundred
bytes, as described below in Section 6.2.
Cheshire & Krochmal Standards Track [Page 11]
^L
RFC 6763 DNS-Based Service Discovery February 2013
The format of the data within a DNS TXT record is one or more
strings, packed together in memory without any intervening gaps or
padding bytes for word alignment.
The format of each constituent string within the DNS TXT record is a
single length byte, followed by 0-255 bytes of text data.
These format rules for TXT records are defined in Section 3.3.14 of
the DNS specification [RFC1035] and are not specific to DNS-SD.
DNS-SD specifies additional rules for what data should be stored in
those constituent strings when used for DNS-SD service advertising,
i.e., when used to describe services advertised using the PTR+SRV+TXT
convention specified in this document.
An empty TXT record containing zero strings is not allowed [RFC1035].
DNS-SD implementations MUST NOT emit empty TXT records. DNS-SD
clients MUST treat the following as equivalent:
o A TXT record containing a single zero byte.
(i.e., a single empty string.)
o An empty (zero-length) TXT record.
(This is not strictly legal, but should one be received, it should
be interpreted as the same as a single empty string.)
o No TXT record.
(i.e., an NXDOMAIN or no-error-no-answer response.)
6.2. DNS-SD TXT Record Size
The total size of a typical DNS-SD TXT record is intended to be small
-- 200 bytes or less.
In cases where more data is justified (e.g., LPR printing [BJP]),
keeping the total size under 400 bytes should allow it to fit in a
single 512-byte DNS message [RFC1035].
In extreme cases where even this is not enough, keeping the size of
the TXT record under 1300 bytes should allow it to fit in a single
1500-byte Ethernet packet.
Using TXT records larger than 1300 bytes is NOT RECOMMENDED at this
time.
Note that some Ethernet hardware vendors offer chipsets with
Multicast DNS [RFC6762] offload, so that computers can sleep and
still be discoverable on the network. Early versions of such
chipsets were sometimes quite limited: for example, some were
Cheshire & Krochmal Standards Track [Page 12]
^L
RFC 6763 DNS-Based Service Discovery February 2013
(unwisely) limited to handling TXT records no larger than 256 bytes
(which meant that LPR printer services with larger TXT records did
not work). Developers should be aware of this real-world limitation,
and should understand that even hardware which is otherwise perfectly
capable may have low-power and sleep modes that are more limited.
6.3. DNS TXT Record Format Rules for Use in DNS-SD
DNS-SD uses DNS TXT records to store arbitrary key/value pairs
conveying additional information about the named service. Each
key/value pair is encoded as its own constituent string within the
DNS TXT record, in the form "key=value" (without the quotation
marks). Everything up to the first '=' character is the key (Section
6.4). Everything after the first '=' character to the end of the
string (including subsequent '=' characters, if any) is the value
(Section 6.5). No quotation marks are required around the value,
even if it contains spaces, '=' characters, or other punctuation
marks. Each author defining a DNS-SD profile for discovering
instances of a particular type of service should define the base set
of key/value attributes that are valid for that type of service.
Using this standardized key/value syntax within the TXT record makes
it easier for these base definitions to be expanded later by defining
additional named attributes. If an implementation sees unknown keys
in a service TXT record, it MUST silently ignore them.
The target host name and TCP (or UDP) port number of the service are
given in the SRV record. This information -- target host name and
port number -- MUST NOT be duplicated using key/value attributes in
the TXT record.
The intention of DNS-SD TXT records is to convey a small amount of
useful additional information about a service. Ideally, it should
not be necessary for a client to retrieve this additional information
before it can usefully establish a connection to the service. For a
well-designed application protocol, even if there is no information
at all in the TXT record, it should be possible, knowing only the
host name, port number, and protocol being used, to communicate with
that listening process and then perform version- or feature-
negotiation to determine any further options or capabilities of the
service instance. For example, when connecting to an AFP (Apple
Filing Protocol) server [AFP] over TCP, the client enters into a
protocol exchange with the server to determine which version of AFP
the server implements and which optional features or capabilities (if
any) are available.
For protocols designed with adequate in-band version- and feature-
negotiation, any information in the TXT record should be viewed as a
Cheshire & Krochmal Standards Track [Page 13]
^L
RFC 6763 DNS-Based Service Discovery February 2013
performance optimization -- when a client discovers many instances of
a service, the TXT record allows the client to know some rudimentary
information about each instance without having to open a TCP
connection to each one and interrogate every service instance
separately. Care should be taken when doing this to ensure that the
information in the TXT record is in agreement with the information
that would be retrieved by a client connecting over TCP.
There are legacy protocols that provide no feature negotiation
capability, and in these cases it may be useful to convey necessary
information in the TXT record. For example, when printing using LPR
[RFC1179], the LPR protocol provides no way for the client to
determine whether a particular printer accepts PostScript, what
version of PostScript, etc. In this case it is appropriate to embed
this information in the TXT record [BJP], because the alternative
would be worse -- passing around written instructions to the users,
arcane manual configuration of "/etc/printcap" files, etc.
The engineering decision about what keys to define for the TXT record
needs to be decided on a case-by-case basis for each service type.
For some service types it is appropriate to communicate information
via the TXT record as well as (or instead of) via in-band
communication in the application protocol.
6.4. Rules for Keys in DNS-SD Key/Value Pairs
The key MUST be at least one character. DNS-SD TXT record strings
beginning with an '=' character (i.e., the key is missing) MUST be
silently ignored.
The key SHOULD be no more than nine characters long. This is because
it is beneficial to keep packet sizes small for the sake of network
efficiency. When using DNS-SD in conjunction with Multicast DNS
[RFC6762] this is important because multicast traffic is especially
expensive on 802.11 wireless networks [IEEEW], but even when using
conventional Unicast DNS, keeping the TXT records small helps improve
the chance that responses will fit within the original DNS 512-byte
size limit [RFC1035]. Also, each constituent string of a DNS TXT
record is limited to 255 bytes, so excessively long keys reduce the
space available for that key's values.
The keys in key/value pairs can be as short as a single character.
A key name needs only to be unique and unambiguous within the context
of the service type for which it is defined. A key name is intended
solely to be a machine-readable identifier, not a human-readable
essay giving detailed discussion of the purpose of a parameter, with
a URL for a web page giving yet more details of the specification.
For ease of development and debugging, it can be valuable to use key
Cheshire & Krochmal Standards Track [Page 14]
^L
RFC 6763 DNS-Based Service Discovery February 2013
names that are mnemonic textual names, but excessively verbose keys
are wasteful and inefficient, hence the recommendation to keep them
to nine characters or fewer.
The characters of a key MUST be printable US-ASCII values (0x20-0x7E)
[RFC20], excluding '=' (0x3D).
Spaces in the key are significant, whether leading, trailing, or in
the middle -- so don't include any spaces unless you really intend
that.
Case is ignored when interpreting a key, so "papersize=A4",
"PAPERSIZE=A4", and "Papersize=A4" are all identical.
If there is no '=' in a DNS-SD TXT record string, then it is a
boolean attribute, simply identified as being present, with no value.
A given key SHOULD NOT appear more than once in a TXT record. The
reason for this simplifying rule is to facilitate the creation of
client libraries that parse the TXT record into an internal data
structure (such as a hash table or dictionary object that maps from
keys to values) and then make that abstraction available to client
code. The rule that a given key may not appear more than once
simplifies these abstractions because they aren't required to support
the case of returning more than one value for a given key.
If a client receives a TXT record containing the same key more than
once, then the client MUST silently ignore all but the first
occurrence of that attribute. For client implementations that
process a DNS-SD TXT record from start to end, placing key/value
pairs into a hash table using the key as the hash table key, this
means that if the implementation attempts to add a new key/value pair
into the table and finds an entry with the same key already present,
then the new entry being added should be silently discarded instead.
Client implementations that retrieve key/value pairs by searching the
TXT record for the requested key should search the TXT record from
the start and simply return the first matching key they find.
Cheshire & Krochmal Standards Track [Page 15]
^L
RFC 6763 DNS-Based Service Discovery February 2013
When examining a TXT record for a given key, there are therefore four
categories of results that may be returned:
* Attribute not present (Absent)
* Attribute present, with no value
(e.g., "passreq" -- password required for this service)
* Attribute present, with empty value
(e.g., "PlugIns=" -- the server supports plugins, but none are
presently installed)
* Attribute present, with non-empty value
(e.g., "PlugIns=JPEG,MPEG2,MPEG4")
Each author defining a DNS-SD profile for discovering instances of a
particular type of service should define the interpretation of these
different kinds of result. For example, for some keys, there may be
a natural true/false boolean interpretation:
* Absent implies 'false'
* Present implies 'true'
For other keys it may be sensible to define other semantics, such as
value/no-value/unknown:
* Present with value implies that value.
(e.g., "Color=4" for a four-color ink-jet printer
or "Color=6" for a six-color ink-jet printer)
* Present with empty value implies 'false'.
(e.g., not a color printer)
* Absent implies 'Unknown'.
(e.g., a print server connected to some unknown printer where the
print server doesn't actually know if the printer does color or
not -- which gives a very bad user experience and should be
avoided wherever possible)
Note that this is a hypothetical example, not an example of actual
key/value keys used by DNS-SD network printers, which are documented
in the "Bonjour Printing Specification" [BJP].
6.5. Rules for Values in DNS-SD Key/Value Pairs
If there is an '=' in a DNS-SD TXT record string, then everything
after the first '=' to the end of the string is the value. The value
can contain any eight-bit values including '='. The value MUST NOT
Cheshire & Krochmal Standards Track [Page 16]
^L
RFC 6763 DNS-Based Service Discovery February 2013
be enclosed in additional quotation marks or any similar punctuation;
any quotation marks, or leading or trailing spaces, are part of the
value.
The value is opaque binary data. Often the value for a particular
attribute will be US-ASCII [RFC20] or UTF-8 [RFC3629] text, but it is
legal for a value to be any binary data.
Generic debugging tools should generally display all attribute values
as a hex dump, with accompanying text alongside displaying the UTF-8
interpretation of those bytes, except for attributes where the
debugging tool has embedded knowledge that the value is some other
kind of data.
Authors defining DNS-SD profiles SHOULD NOT generically convert
binary attribute data types into printable text using hexadecimal
representation, Base-64 [RFC4648], or Unix-to-Unix (UU) encoding,
merely for the sake of making the data appear to be printable text
when seen in a generic debugging tool. Doing this simply bloats the
size of the TXT record, without actually making the data any more
understandable to someone looking at it in a generic debugging tool.
6.6. Example TXT Record
The TXT record below contains three syntactically valid key/value
strings. (The meaning of these key/value pairs, if any, would depend
on the definitions pertaining to the service in question that is
using them.)
-------------------------------------------------------
| 0x09 | key=value | 0x08 | paper=A4 | 0x07 | passreq |
-------------------------------------------------------
6.7. Version Tag
It is recommended that authors defining DNS-SD profiles include an
attribute of the form "txtvers=x", where "x" is a decimal version
number in US-ASCII [RFC20] text (e.g., "txtvers=1" or "txtvers=8"),
in their definition, and require it to be the first key/value pair in
the TXT record. This information in the TXT record can be useful to
help clients maintain backwards compatibility with older
implementations if it becomes necessary to change or update the
specification over time. Even if the profile author doesn't
anticipate the need for any future incompatible changes, having a
version number in the TXT record provides useful insurance should
incompatible changes become unavoidable [RFC6709]. Clients SHOULD
ignore TXT records with a txtvers number higher (or lower) than the
version(s) they know how to interpret.
Cheshire & Krochmal Standards Track [Page 17]
^L
RFC 6763 DNS-Based Service Discovery February 2013
Note that the version number in the txtvers tag describes the version
of the specification governing the defined keys and the meaning of
those keys for that particular TXT record, not the version of the
application protocol that will be used if the client subsequently
decides to contact that service. Ideally, every DNS-SD TXT record
specification starts at txtvers=1 and stays that way forever.
Improvements can be made by defining new keys that older clients
silently ignore. The only reason to increment the version number is
if the old specification is subsequently found to be so horribly
broken that there's no way to do a compatible forward revision, so
the txtvers number has to be incremented to tell all the old clients
they should just not even try to understand this new TXT record.
If there is a need to indicate which version number(s) of the
application protocol the service implements, the recommended key for
this is "protovers".
6.8. Service Instances with Multiple TXT Records
Generally speaking, every DNS-SD service instance has exactly one TXT
record. However, it is possible for a particular protocol's DNS-SD
advertising specification to state that it allows multiple TXT
records. In this case, each TXT record describes a different variant
of the same logical service, offered using the same underlying
protocol on the same port, described by the same SRV record.
Having multiple TXT records to describe a single service instance is
very rare, and to date, of the many hundreds of registered DNS-SD
service types [SN], only one makes use of this capability, namely LPR
printing [BJP]. This capability is used when a printer conceptually
supports multiple logical queue names, where each different logical
queue name implements a different page description language, such as
80-column monospaced plain text, seven-bit Adobe PostScript, eight-
bit ("binary") PostScript, or some proprietary page description
language. When multiple TXT records are used to describe multiple
logical LPR queue names for the same underlying service, printers
include two additional keys in each TXT record: 'qtotal', which
specifies the total number of TXT records associated with this SRV
record, and 'priority', which gives the printer's relative preference
for this particular TXT record. Clients then select the most
preferred TXT record that meets the client's needs [BJP]. The only
reason multiple TXT records are used is because the LPR protocol
lacks in-band feature-negotiation capabilities for the client and
server to agree on a data representation for the print job, so this
information has to be communicated out-of-band instead using the DNS-
SD TXT records. Future protocol designs should not follow this bad
example by mimicking this inadequacy of the LPR printing protocol.
Cheshire & Krochmal Standards Track [Page 18]
^L
RFC 6763 DNS-Based Service Discovery February 2013
7. Service Names
The <Service> portion of a Service Instance Name consists of a pair
of DNS labels, following the convention already established for SRV
records [RFC2782].
The first label of the pair is an underscore character followed by
the Service Name [RFC6335]. The Service Name identifies what the
service does and what application protocol it uses to do it.
For applications using TCP, the second label is "_tcp".
For applications using any transport protocol other than TCP, the
second label is "_udp". This applies to all other transport
protocols, including User Datagram Protocol (UDP), Stream Control
Transmission Protocol (SCTP) [RFC4960], Datagram Congestion Control
Protocol (DCCP) [RFC4340], Adobe's Real Time Media Flow Protocol
(RTMFP), etc. In retrospect, perhaps the SRV specification should
not have used the "_tcp" and "_udp" labels at all, and instead should
have used a single label "_srv" to carve off a subdomain of DNS
namespace for this use, but that specification is already published
and deployed. At this point there is no benefit in changing
established practice. While "_srv" might be aesthetically nicer than
"_udp", it is not a user-visible string, and all that is required
protocol-wise is (i) that it be a label that can form a DNS
delegation point, and (ii) that it be short so that it does not take
up too much space in the packet, and in this respect either "_udp" or
"_srv" is equally good. Thus, it makes sense to use "_tcp" for TCP-
based services and "_udp" for all other transport protocols -- which
are in fact, in today's world, often encapsulated over UDP -- rather
than defining a new subdomain for every new transport protocol.
Note that this usage of the "_udp" label for all protocols other than
TCP applies exclusively to DNS-SD service advertising, i.e., services
advertised using the PTR+SRV+TXT convention specified in this
document. It is not a requirement of SRV records in general. Other
specifications that are independent of DNS-SD and not intended to
interoperate with DNS-SD records are not in any way constrained by
how DNS-SD works just because they also use the DNS SRV record
datatype [RFC2782]; they are free to specify their own naming
conventions as appropriate.
The rules for Service Names [RFC6335] state that they may be no more
than fifteen characters long (not counting the mandatory underscore),
consisting of only letters, digits, and hyphens, must begin and end
with a letter or digit, must not contain consecutive hyphens, and
must contain at least one letter. The requirement to contain at
least one letter is to disallow Service Names such as "80" or
Cheshire & Krochmal Standards Track [Page 19]
^L
RFC 6763 DNS-Based Service Discovery February 2013
"6000-6063", which could be misinterpreted as port numbers or port
number ranges. While both uppercase and lowercase letters may be
used for mnemonic clarity, case is ignored for comparison purposes,
so the strings "HTTP" and "http" refer to the same service.
Wise selection of a Service Name is important, and the choice is not
always as obvious as it may appear.
In many cases, the Service Name merely names and refers to the on-
the-wire message format and semantics being used. FTP is "ftp", IPP
printing is "ipp", and so on.
However, it is common to "borrow" an existing protocol and repurpose
it for a new task. This is entirely sensible and sound engineering
practice, but that doesn't mean that the new protocol is providing
the same semantic service as the old one, even if it borrows the same
message formats. For example, the network music sharing protocol
implemented by iTunes on Macintosh and Windows is built upon "HTTP
GET" commands. However, that does *not* mean that it is sensible or
useful to try to access one of these music servers by connecting to
it with a standard web browser. Consequently, the DNS-SD service
advertised (and browsed for) by iTunes is "_daap._tcp" (Digital Audio
Access Protocol), not "_http._tcp".
If iTunes were to advertise that it offered "_http._tcp" service,
that would cause iTunes servers to appear in conventional web
browsers (Safari, Camino, OmniWeb, Internet Explorer, Firefox,
Chrome, etc.), which is of little use since an iTunes music library
offers no HTML pages containing human-readable content that a web
browser could display.
Equally, if iTunes were to browse for "_http._tcp" service, that
would cause it to discover generic web servers, such as the embedded
web servers in devices like printers, which is of little use since
printers generally don't have much music to offer.
Analogously, Sun Microsystems's Network File System (NFS) is built on
top of Sun Microsystems's Remote Procedure Call (Sun RPC) mechanism,
but that doesn't mean it makes sense for an NFS server to advertise
that it provides "Sun RPC" service. Likewise, Microsoft's Server
Message Block (SMB) file service is built on top of Netbios running
over IP, but that doesn't mean it makes sense for an SMB file server
to advertise that it provides "Netbios-over-IP" service. The DNS-SD
name of a service needs to encapsulate both the "what" (semantics)
and the "how" (protocol implementation) of the service, since
knowledge of both is necessary for a client to use the service
meaningfully. Merely advertising that a service was built on top of
Sun RPC is no use if the client has no idea what the service does.
Cheshire & Krochmal Standards Track [Page 20]
^L
RFC 6763 DNS-Based Service Discovery February 2013
Another common question is whether the service type advertised by
iTunes should be "_daap._http._tcp." This would also be incorrect.
Similarly, a protocol designer implementing a network service that
happens to use the Simple Object Access Protocol [SOAP] should not
feel compelled to have "_soap" appear somewhere in the Service Name.
Part of the confusion here is that the presence of "_tcp" or "_udp"
in the <Service> portion of a Service Instance Name has led people to
assume that the visible structure of the <Service> should reflect
the private internal structure of how the protocol was implemented.
This is not correct. All that is required is that the service be
identified by some unique opaque Service Name. Making the Service
Name be English text that is at least marginally descriptive of what
the service does may be convenient, but it is by no means essential.
7.1. Selective Instance Enumeration (Subtypes)
This document does not attempt to define a sophisticated (e.g.,
Turing complete, or even regular expression) query language for
service discovery, nor do we believe one is necessary.
However, there are some limited circumstances where narrowing the set
of results may be useful. For example, many network printers offer a
web-based user interface, for management and administration, using
HTML/HTTP. A web browser wanting to discover all advertised web
pages issues a query for "_http._tcp.<Domain>". On the other hand,
there are cases where users wish to manage printers specifically, not
to discover web pages in general, and it is good accommodate this.
In this case, we define the "_printer" subtype of "_http._tcp", and
to discover only the subset of pages advertised as having that
subtype property, the web browser issues a query for
"_printer._sub._http._tcp.<Domain>".
The Safari web browser on Mac OS X 10.5 "Leopard" and later uses
subtypes in this way. If an "_http._tcp" service is discovered both
via "_printer._sub._http._tcp" browsing and via "_http._tcp" browsing
then it is displayed in the "Printers" section of Safari's UI. If a
service is discovered only via "_http._tcp" browsing then it is
displayed in the "Webpages" section of Safari's UI. This can be seen
by using the commands below on Mac OS X to advertise two "fake"
services. The service instance "A web page" is displayed in the
"Webpages" section of Safari's Bonjour list, while the instance
"A printer's web page" is displayed in the "Printers" section.
dns-sd -R "A web page" _http._tcp local 100
dns-sd -R "A printer's web page" _http._tcp,_printer local 101
Note that the advertised web page's Service Instance Name is
unchanged by the use of subtypes -- it is still something of the form
Cheshire & Krochmal Standards Track [Page 21]
^L
RFC 6763 DNS-Based Service Discovery February 2013
"The Server._http._tcp.example.com.", and the advertised web page is
still discoverable using a standard browsing query for services of
type "_http._tcp". The subdomain in which HTTP server SRV records
are registered defines the namespace within which HTTP server names
are unique. Additional subtypes (e.g., "_printer") of the basic
service type (e.g., "_http._tcp") serve to allow clients to query for
a narrower set of results, not to create more namespace.
Using DNS zone file syntax, the service instance "A web page" is
advertised using one PTR record, while the instance "A printer's web
page" is advertised using two: the primary service type and the
additional subtype. Even though the "A printer's web page" service
is advertised two different ways, both PTR records refer to the name
of the same SRV+TXT record pair:
; One PTR record advertises "A web page"
_http._tcp.local. PTR A\032web\032page._http._tcp.local.
; Two different PTR records advertise "A printer's web page"
_http._tcp.local. PTR A\032printer's\032web\032page._http._tcp.local.
_printer._sub._http._tcp.local.
PTR A\032printer's\032web\032page._http._tcp.local.
Subtypes are appropriate when it is desirable for different kinds of
client to be able to browse for services at two levels of
granularity. In the example above, we describe two classes of HTTP
clients: general web browsing clients that are interested in all web
pages, and specific printer management tools that would like to
discover only web UI pages advertised by printers. The set of HTTP
servers on the network is the same in both cases; the difference is
that some clients want to discover all of them, whereas other clients
only want to find the subset of HTTP servers whose purpose is printer
administration.
Subtypes are only appropriate in two-level scenarios such as this
one, where some clients want to find the full set of services of a
given type, and at the same time other clients only want to find some
subset. Generally speaking, if there is no client that wants to find
the entire set, then it's neither necessary nor desirable to use the
subtype mechanism. If all clients are browsing for some particular
subtype, and no client exists that browses for the parent type, then
a new Service Name representing the logical service should be
defined, and software should simply advertise and browse for that
particular service type directly. In particular, just because a
particular network service happens to be implemented in terms of some
other underlying protocol, like HTTP, Sun RPC, or SOAP, doesn't mean
that it's sensible for that service to be defined as a subtype of
"_http", "_sunrpc", or "_soap". That would only be useful if there
Cheshire & Krochmal Standards Track [Page 22]
^L
RFC 6763 DNS-Based Service Discovery February 2013
were some class of client for which it is sensible to say, "I want to
discover a service on the network, and I don't care what it does, as
long as it does it using the SOAP XML RPC mechanism."
Subtype strings are not required to begin with an underscore, though
they often do. As with the TXT record key/value pairs, the list of
possible subtypes, if any (including whether some or all begin with
an underscore) are defined and specified separately for each basic
service type.
Subtype strings (e.g., "_printer" in the example above) may be
constructed using arbitrary 8-bit data values. In many cases these
data values may be UTF-8 [RFC3629] representations of text, or even
(as in the example above) plain ASCII [RFC20], but they do not have
to be. Note, however, that even when using arbitrary 8-bit data for
subtype strings, DNS name comparisons are still case-insensitive, so
(for example) the byte values 0x41 and 0x61 will be considered
equivalent for subtype comparison purposes.
7.2. Service Name Length Limits
As specified above, Service Names are allowed to be no more than
fifteen characters long. The reason for this limit is to conserve
bytes in the domain name for use both by the network administrator
(choosing service domain names) and by the end user (choosing
instance names).
A fully qualified domain name may be up to 255 bytes long, plus one
byte for the final terminating root label at the end. Domain names
used by DNS-SD take the following forms:
<sn>._tcp . <servicedomain> . <parentdomain>.
<Instance> . <sn>._tcp . <servicedomain> . <parentdomain>.
<sub>._sub . <sn>._tcp . <servicedomain> . <parentdomain>.
The first example shows the name used for PTR queries. The second
shows a Service Instance Name, i.e., the name of the service's SRV
and TXT records. The third shows a subtype browsing name, i.e., the
name of a PTR record pointing to a Service Instance Name (see Section
7.1, "Selective Instance Enumeration").
The Service Name <sn> may be up to 15 bytes, plus the underscore and
length byte, making a total of 17. Including the "_udp" or "_tcp"
and its length byte, this makes 22 bytes.
The instance name <Instance> may be up to 63 bytes. Including the
length byte used by the DNS format when the name is stored in a
packet, that makes 64 bytes.
Cheshire & Krochmal Standards Track [Page 23]
^L
RFC 6763 DNS-Based Service Discovery February 2013
When using subtypes, the subtype identifier is allowed to be up to 63
bytes, plus the length byte, making 64. Including the "_sub" and its
length byte, this makes 69 bytes.
Typically, DNS-SD service records are placed into subdomains of their
own beneath a company's existing domain name. Since these subdomains
are intended to be accessed through graphical user interfaces, not
typed on a command line, they are frequently long and descriptive.
Including the length byte, the user-visible service domain may be up
to 64 bytes.
Of our available 255 bytes, we have now accounted for 69+22+64 = 155
bytes. This leaves 100 bytes to accommodate the organization's
existing domain name <parentdomain>. When used with Multicast DNS,
<parentdomain> is "local.", which easily fits. When used with parent
domains of 100 bytes or less, the full functionality of DNS-SD is
available without restriction. When used with parent domains longer
than 100 bytes, the protocol risks exceeding the maximum possible
length of domain names, causing failures. In this case, careful
choice of short <servicedomain> names can help avoid overflows. If
the <servicedomain> and <parentdomain> are too long, then service
instances with long instance names will not be discoverable or
resolvable, and applications making use of long subtype names may
fail.
Because of this constraint, we choose to limit Service Names to 15
characters or less. Allowing more characters would not increase the
expressive power of the protocol and would needlessly reduce the
maximum <parentdomain> length that may be safely used.
Note that <Instance> name lengths affect the maximum number of
services of a given type that can be discovered in a given
<servicedomain>. The largest Unicast DNS response than can be sent
(typically using TCP, not UDP) is 64 kB. Using DNS name compression,
a Service Instance Enumeration PTR record requires 2 bytes for the
(compressed) name, plus 10 bytes for type, class, ttl, and rdata
length. The rdata of the PTR record requires up to 64 bytes for the
<Instance> part of the name, plus 2 bytes for a name compression
pointer to the common suffix, making a maximum of 78 bytes total.
This means that using maximum-sized <Instance> names, up to 839
instances of a given service type can be discovered in a given
<servicedomain>.
Multicast DNS aggregates response packets, so it does not have the
same hard limit, but in practice it is also useful for up to a few
hundred instances of a given service type, but probably not
thousands.
Cheshire & Krochmal Standards Track [Page 24]
^L
RFC 6763 DNS-Based Service Discovery February 2013
However, displaying even 100 instances in a flat list is probably too
many to be helpful to a typical user. If a network has more than 100
instances of a given service type, it's probably appropriate to
divide those services into logical subdomains by building, by floor,
by department, etc.
8. Flagship Naming
In some cases, there may be several network protocols available that
all perform roughly the same logical function. For example, the
printing world has the lineprinter (LPR) protocol [RFC1179] and the
Internet Printing Protocol (IPP) [RFC2910], both of which cause
printed sheets to be emitted from printers in much the same way. In
addition, many printer vendors send their own proprietary page
description language (PDL) data over a TCP connection to TCP port
9100, herein referred to generically as the "pdl-datastream"
protocol. In an ideal world, we would have only one network printing
protocol, and it would be sufficiently good that no one felt a
compelling need to invent a different one. However, in practice,
multiple legacy protocols do exist, and a service discovery protocol
has to accommodate that.
Many printers implement all three printing protocols: LPR, IPP, and
pdl-datastream. For the benefit of clients that may speak only one
of those protocols, all three are advertised.
However, some clients may implement two, or all three of those
printing protocols. When a client looks for all three service types
on the network, it will find three distinct services -- an LPR
service, an IPP service, and a pdl-datastream service -- all of which
cause printed sheets to be emitted from the same physical printer.
In a case like this, where multiple protocols all perform effectively
the same function, a client may browse for all the service types it
supports and display all the discovered instance names in a single
aggregated list. Where the same instance name is discovered more
than once because that entity supports more than one service type
(e.g. a single printer which implements multiple printing protocols)
the duplicates should be suppressed and the name should appear only
once in the list. When the user indicates their desire to print on a
given named printer, the printing client is responsible for choosing
which of the available protocols will best achieve the desired
effect, without, for example, requiring the user to make a manual
choice between LPR and IPP.
As described so far, this all works very well. However, consider the
case of: some future printer that only supports IPP printing, and
some other future printer that only supports pdl-datastream printing.
Cheshire & Krochmal Standards Track [Page 25]
^L
RFC 6763 DNS-Based Service Discovery February 2013
The namespaces for different service types are intentionally disjoint
(it is acceptable and desirable to be able to have both a file server
called "Sales Department" and a printer called "Sales Department").
However, it is not desirable, in the common case, to allow two
different printers both to be called "Sales Department" merely
because those two printers implement different printing protocols.
To help guard against this, when there are two or more network
protocols that perform roughly the same logical function, one of the
protocols is declared the "flagship" of the fleet of related
protocols. Typically the flagship protocol is the oldest and/or
best-known protocol of the set.
If a device does not implement the flagship protocol, then it instead
creates a placeholder SRV record (priority=0, weight=0, port=0,
target host = host name of device) with that name. If, when it
attempts to create this SRV record, it finds that a record with the
same name already exists, then it knows that this name is already
taken by some other entity implementing at least one of the protocols
from the fleet, and it must choose another. If no SRV record already
exists, then the act of creating it stakes a claim to that name so
that future devices in the same protocol fleet will detect a conflict
when they try to use it.
Note: When used with Multicast DNS [RFC6762], the target host field
of the placeholder SRV record MUST NOT be the empty root label. The
SRV record needs to contain a real target host name in order for the
Multicast DNS conflict detection rules to operate. If two different
devices were to create placeholder SRV records both using a null
target host name (just the root label), then the two SRV records
would be seen to be in agreement, and no conflict would be detected.
By defining a common well-known flagship protocol for the class,
future devices that may not even know about each other's protocols
establish a common ground where they can coordinate to verify
uniqueness of names.
No PTR record is created advertising the presence of empty flagship
SRV records, since they do not represent a real service being
advertised, and hence are not (and should not be) discoverable via
Service Instance Enumeration (browsing).
Cheshire & Krochmal Standards Track [Page 26]
^L
RFC 6763 DNS-Based Service Discovery February 2013
9. Service Type Enumeration
In general, a normal client is not interested in finding *every*
service on the network, just the services that the client knows how
to use.
However, for problem diagnosis and network management tools, it may
be useful for network administrators to find the list of advertised
service types on the network, even if those Service Names are just
opaque identifiers and not particularly informative in isolation.
For this purpose, a special meta-query is defined. A DNS query for
PTR records with the name "_services._dns-sd._udp.<Domain>" yields a
set of PTR records, where the rdata of each PTR record is the two-
label <Service> name, plus the same domain, e.g.,
"_http._tcp.<Domain>". Including the domain in the PTR rdata allows
for slightly better name compression in Unicast DNS responses, but
only the first two labels are relevant for the purposes of service
type enumeration. These two-label service types can then be used to
construct subsequent Service Instance Enumeration PTR queries, in
this <Domain> or others, to discover instances of that service type.
10. Populating the DNS with Information
How a service's PTR, SRV, and TXT records make their way into the DNS
is outside the scope of this document, but, for illustrative
purposes, some examples are given here.
On some networks, the administrator might manually enter the records
into the name server's configuration file.
A network monitoring tool could output a standard zone file to be
read into a conventional DNS server. For example, a tool that can
find networked PostScript laser printers using AppleTalk NBP could
find the list of printers, communicate with each one to find its IP
address, PostScript version, installed options, etc., and then write
out a DNS zone file describing those printers and their capabilities
using DNS resource records. That information would then be available
to IP-only clients that implement DNS-SD but not AppleTalk NBP.
A printer manager device that has knowledge of printers on the
network through some other management protocol could also output a
zone file or use DNS Update [RFC2136] [RFC3007].
Alternatively, a printer manager device could implement enough of the
DNS protocol that it is able to answer DNS queries directly, and
Example Co.'s main DNS server could delegate the
"_ipp._tcp.example.com." subdomain to the printer manager device.
Cheshire & Krochmal Standards Track [Page 27]
^L
RFC 6763 DNS-Based Service Discovery February 2013
IP printers could use Dynamic DNS Update [RFC2136] [RFC3007] to
automatically register their own PTR, SRV, and TXT records with the
DNS server.
Zeroconf printers answer Multicast DNS queries on the local link for
their own PTR, SRV, and TXT names ending with ".local." [RFC6762].
11. Discovery of Browsing and Registration Domains (Domain Enumeration)
One of the motivations for DNS-based Service Discovery is to enable a
visiting client (e.g., a Wi-Fi-equipped [IEEEW] laptop computer,
tablet, or mobile telephone) arriving on a new network to discover
what services are available on that network, without any manual
configuration. The logic that discovering services without manual
configuration is a good idea also dictates that discovering
recommended registration and browsing domains without manual
configuration is a similarly good idea.
This discovery is performed using DNS queries, using Unicast or
Multicast DNS. Five special RR names are reserved for this purpose:
b._dns-sd._udp.<domain>.
db._dns-sd._udp.<domain>.
r._dns-sd._udp.<domain>.
dr._dns-sd._udp.<domain>.
lb._dns-sd._udp.<domain>.
By performing PTR queries for these names, a client can learn,
respectively:
o A list of domains recommended for browsing.
o A single recommended default domain for browsing.
o A list of domains recommended for registering services using
Dynamic Update.
o A single recommended default domain for registering services.
o The "legacy browsing" or "automatic browsing" domain(s).
Sophisticated client applications that care to present choices of
domain to the user use the answers learned from the previous four
queries to discover the domains to present. In contrast, many
current applications browse without specifying an explicit domain,
allowing the operating system to automatically select an
appropriate domain on their behalf. It is for this class of
application that the "automatic browsing" query is provided, to
Cheshire & Krochmal Standards Track [Page 28]
^L
RFC 6763 DNS-Based Service Discovery February 2013
allow the network administrator to communicate to the client
operating systems which domain(s) should be used automatically for
these applications.
These domains are purely advisory. The client or user is free to
register services and/or browse in any domains. The purpose of these
special queries is to allow software to create a user interface that
displays a useful list of suggested choices to the user, from which
the user may make an informed selection, or ignore the offered
suggestions and manually enter their own choice.
The <domain> part of the Domain Enumeration query name may be
"local." (meaning "perform the query using link-local multicast") or
it may be learned through some other mechanism, such as the DHCP
"Domain" option (option code 15) [RFC2132], the DHCP "Domain Search"
option (option code 119) [RFC3397], or IPv6 Router Advertisement
Options [RFC6106].
The <domain> part of the query name may also be derived a different
way, from the host's IP address. The host takes its IP address and
calculates the logical AND of that address and its subnet mask, to
derive the 'base' address of the subnet (the 'network address' of
that subnet, or, equivalently, the IP address of the 'all-zero' host
address on that subnet). It then constructs the conventional DNS
"reverse mapping" name corresponding to that base address, and uses
that as the <domain> part of the name for the queries described
above. For example, if a host has the address 192.168.12.34, with
the subnet mask 255.255.0.0, then the 'base' address of the subnet is
192.168.0.0, and to discover the recommended automatic browsing
domain(s) for devices on this subnet, the host issues a DNS PTR query
for the name "lb._dns-sd._udp.0.0.168.192.in-addr.arpa."
Equivalent address-derived Domain Enumeration queries should also be
done for the host's IPv6 address(es).
Address-derived Domain Enumeration queries SHOULD NOT be done for
IPv4 link-local addresses [RFC3927] or IPv6 link-local addresses
[RFC4862].
Sophisticated clients may perform Domain Enumeration queries both in
"local." and in one or more unicast domains, using both name-derived
and address-derived queries, and then present the user with an
combined result, aggregating the information received from all
sources.
Cheshire & Krochmal Standards Track [Page 29]
^L
RFC 6763 DNS-Based Service Discovery February 2013
12. DNS Additional Record Generation
DNS has an efficiency feature whereby a DNS server may place
additional records in the additional section of the DNS message.
These additional records are records that the client did not
explicitly request, but the server has reasonable grounds to expect
that the client might request them shortly, so including them can
save the client from having to issue additional queries.
This section recommends which additional records SHOULD be generated
to improve network efficiency, for both Unicast and Multicast DNS-SD
responses.
Note that while servers SHOULD add these additional records for
efficiency purposes, as with all DNS additional records, it is the
client's responsibility to determine whether or not to trust them.
Generally speaking, stub resolvers that talk to a single recursive
name server for all their queries will trust all records they receive
from that recursive name server (whom else would they ask?).
Recursive name servers that talk to multiple authoritative name
servers should verify that any records they receive from a given
authoritative name server are "in bailiwick" for that server, and
ignore them if not.
Clients MUST be capable of functioning correctly with DNS servers
(and Multicast DNS Responders) that fail to generate these additional
records automatically, by issuing subsequent queries for any further
record(s) they require. The additional-record generation rules in
this section are RECOMMENDED for improving network efficiency, but
are not required for correctness.
12.1. PTR Records
When including a DNS-SD Service Instance Enumeration or Selective
Instance Enumeration (subtype) PTR record in a response packet, the
server/responder SHOULD include the following additional records:
o The SRV record(s) named in the PTR rdata.
o The TXT record(s) named in the PTR rdata.
o All address records (type "A" and "AAAA") named in the SRV rdata.
12.2. SRV Records
When including an SRV record in a response packet, the
server/responder SHOULD include the following additional records:
o All address records (type "A" and "AAAA") named in the SRV rdata.
Cheshire & Krochmal Standards Track [Page 30]
^L
RFC 6763 DNS-Based Service Discovery February 2013
12.3. TXT Records
When including a TXT record in a response packet, no additional
records are required.
12.4. Other Record Types
In response to address queries, or other record types, no new
additional records are recommended by this document.
13. Working Examples
The following examples were prepared using standard unmodified
nslookup and standard unmodified BIND running on GNU/Linux.
Note: In real products, this information is obtained and presented to
the user using graphical network browser software, not command-line
tools. However, if you wish, you can try these examples for yourself
as you read along, using the nslookup command already available on
most Unix machines.
13.1. What web pages are being advertised from dns-sd.org?
nslookup -q=ptr _http._tcp.dns-sd.org.
_http._tcp.dns-sd.org
name = Zeroconf._http._tcp.dns-sd.org
_http._tcp.dns-sd.org
name = Multicast\032DNS._http._tcp.dns-sd.org
_http._tcp.dns-sd.org
name = Service\032Discovery._http._tcp.dns-sd.org
_http._tcp.dns-sd.org
name = Stuart's\032Printer._http._tcp.dns-sd.org
Answer: There are four, called "Zeroconf", "Multicast DNS", "Service
Discovery", and "Stuart's Printer".
Note that nslookup escapes spaces as "\032" for display purposes, but
a graphical DNS-SD browser should not.
13.2. What printer-configuration web pages are there?
nslookup -q=ptr _printer._sub._http._tcp.dns-sd.org.
_printer._sub._http._tcp.dns-sd.org
name = Stuart's\032Printer._http._tcp.dns-sd.org
Answer: "Stuart's Printer" is the web configuration UI of a network
printer.
Cheshire & Krochmal Standards Track [Page 31]
^L
RFC 6763 DNS-Based Service Discovery February 2013
13.3. How do I access the web page called "Service Discovery"?
nslookup -q=any "Service\032Discovery._http._tcp.dns-sd.org."
Service\032Discovery._http._tcp.dns-sd.org
priority = 0, weight = 0, port = 80, host = dns-sd.org
Service\032Discovery._http._tcp.dns-sd.org
text = "txtvers=1" "path=/"
dns-sd.org nameserver = ns1.dns-sd.org
dns-sd.org internet address = 64.142.82.154
ns1.dns-sd.org internet address = 64.142.82.152
Answer: You need to connect to dns-sd.org port 80, path "/".
The address for dns-sd.org is also given (64.142.82.154).
14. IPv6 Considerations
IPv6 has only minor differences from IPv4.
The address of the SRV record's target host is given by the
appropriate IPv6 "AAAA" address records instead of (or in addition
to) IPv4 "A" records.
Address-based Domain Enumeration queries are performed using names
under the IPv6 reverse-mapping tree, which is different from the IPv4
reverse-mapping tree and has longer names in it.
15. Security Considerations
Since DNS-SD is just a specification for how to name and use records
in the existing DNS system, it has no specific additional security
requirements over and above those that already apply to DNS queries
and DNS updates.
For DNS queries, DNS Security Extensions (DNSSEC) [RFC4033] should be
used where the authenticity of information is important.
For DNS updates, secure updates [RFC2136] [RFC3007] should generally
be used to control which clients have permission to update DNS
records.
16. IANA Considerations
IANA manages the namespace of unique Service Names [RFC6335].
When a protocol service advertising specification includes subtypes,
these should be documented in the protocol specification in question
and/or in the "notes" field of the registration request sent to IANA.
In the event that a new subtype becomes relevant after a protocol
Cheshire & Krochmal Standards Track [Page 32]
^L
RFC 6763 DNS-Based Service Discovery February 2013
specification has been published, this can be recorded by requesting
that IANA add it to the "notes" field. For example, vendors of
network printers advertise their embedded web servers using the
subtype _printer. This allows printer management clients to browse
for only printer-related web servers by browsing for the _printer
subtype. While the existence of the _printer subtype of _http._tcp
is not directly relevant to the HTTP protocol specification, it is
useful to record this usage in the IANA registry to help avoid
another community of developers inadvertently using the same subtype
string for a different purpose. The namespace of possible subtypes
is separate for each different service type. For example, the
existence of the _printer subtype of _http._tcp does not imply that
the _printer subtype is defined or has any meaning for any other
service type.
When IANA records a Service Name registration, if the new application
protocol is one that conceptually duplicates existing functionality
of an older protocol, and the implementers desire the Flagship Naming
behavior described in Section 8, then the registrant should request
that IANA record the name of the flagship protocol in the "notes"
field of the new registration. For example, the registrations for
"ipp" and "pdl-datastream" both reference "printer" as the flagship
name for this family of printing-related protocols.
17. Acknowledgments
The concepts described in this document have been explored,
developed, and implemented with help from Ran Atkinson, Richard
Brown, Freek Dijkstra, Ralph Droms, Erik Guttman, Pasi Sarolahti,
Pekka Savola, 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.
18. References
18.1. Normative References
[RFC20] Cerf, V., "ASCII format for network interchange", RFC 20,
October 1969.
[RFC1033] Lottor, M., "Domain Administrators Operations Guide", RFC
1033, November 1987.
[RFC1034] Mockapetris, P., "Domain names - concepts and
facilities", STD 13, RFC 1034, November 1987.
Cheshire & Krochmal Standards Track [Page 33]
^L
RFC 6763 DNS-Based Service Discovery February 2013
[RFC1035] Mockapetris, P., "Domain names - implementation and
specification", STD 13, RFC 1035, November 1987.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2782] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for
specifying the location of services (DNS SRV)", RFC 2782,
February 2000.
[RFC3492] Costello, A., "Punycode: A Bootstring encoding of Unicode
for Internationalized Domain Names in Applications
(IDNA)", RFC 3492, March 2003.
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
10646", STD 63, RFC 3629, November 2003.
[RFC3927] Cheshire, S., Aboba, B., and E. Guttman, "Dynamic
Configuration of IPv4 Link-Local Addresses", RFC 3927,
May 2005.
[RFC4862] Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless
Address Autoconfiguration", RFC 4862, September 2007.
[RFC5198] Klensin, J. and M. Padlipsky, "Unicode Format for Network
Interchange", RFC 5198, March 2008.
[RFC5890] Klensin, J., "Internationalized Domain Names for
Applications (IDNA): Definitions and Document Framework",
RFC 5890, August 2010.
[RFC6335] Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S.
Cheshire, "Internet Assigned Numbers Authority (IANA)
Procedures for the Management of the Service Name and
Transport Protocol Port Number Registry", BCP 165, RFC
6335, August 2011.
18.2. Informative References
[AFP] Mac OS X Developer Library, "Apple Filing Protocol
Programming Guide", <http://developer.apple.com/
documentation/Networking/Conceptual/AFP/>.
[BJ] Apple Bonjour Open Source Software,
<http://developer.apple.com/bonjour/>.
Cheshire & Krochmal Standards Track [Page 34]
^L
RFC 6763 DNS-Based Service Discovery February 2013
[BJP] Bonjour Printing Specification,
<https://developer.apple.com/bonjour/
printing-specification/bonjourprinting-1.0.2.pdf>.
[IEEEW] IEEE 802 LAN/MAN Standards Committee,
<http://standards.ieee.org/wireless/>.
[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>.
[RFC1179] McLaughlin, L., "Line printer daemon protocol", RFC 1179,
August 1990.
[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.
[RFC2910] Herriot, R., Ed., Butler, S., Moore, P., Turner, R., and
J. Wenn, "Internet Printing Protocol/1.1: Encoding and
Transport", RFC 2910, September 2000.
[RFC4960] Stewart, R., Ed., "Stream Control Transmission Protocol",
RFC 4960, September 2007.
[RFC3007] Wellington, B., "Secure Domain Name System (DNS) Dynamic
Update", RFC 3007, November 2000.
[RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram
Congestion Control Protocol (DCCP)", RFC 4340, March
2006.
[RFC3397] Aboba, B. and S. Cheshire, "Dynamic Host Configuration
Protocol (DHCP) Domain Search Option", RFC 3397, November
2002.
[RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S.
Rose, "DNS Security Introduction and Requirements", RFC
4033, March 2005.
Cheshire & Krochmal Standards Track [Page 35]
^L
RFC 6763 DNS-Based Service Discovery February 2013
[RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data
Encodings", RFC 4648, October 2006.
[RFC4795] Aboba, B., Thaler, D., and L. Esibov, "Link-local
Multicast Name Resolution (LLMNR)", RFC 4795, January
2007.
[RFC6106] Jeong, J., Park, S., Beloeil, L., and S. Madanapalli,
"IPv6 Router Advertisement Options for DNS
Configuration", RFC 6106, November 2010.
[RFC6281] Cheshire, S., Zhu, Z., Wakikawa, R., and L. Zhang,
"Understanding Apple's Back to My Mac (BTMM) Service",
RFC 6281, June 2011.
[RFC6709] Carpenter, B., Aboba, B., Ed., and S. Cheshire, "Design
Considerations for Protocol Extensions", RFC 6709,
September 2012.
[RFC6760] Cheshire, S. and M. Krochmal, "Requirements for a
Protocol to Replace the AppleTalk Name Binding Protocol
(NBP)", RFC 6760, February 2013.
[RFC6762] Cheshire, S. and M. Krochmal, "Multicast DNS", RFC 6762,
February 2013.
[SN] IANA, "Service Name and Transport Protocol Port Number
Registry", <http://www.iana.org/assignments/
service-names-port-numbers/>.
[SOAP] Mitra, N., "SOAP Version 1.2 Part 0: Primer", W3C
Proposed Recommendation 24 June 2003,
<http://www.w3.org/TR/2003/REC-soap12-part0-20030624>.
[Unicode6] The Unicode Consortium. The Unicode Standard, Version
6.0.0, (Mountain View, CA: The Unicode Consortium, 2011.
ISBN 978-1-936213-01-6)
<http://www.unicode.org/versions/Unicode6.0.0/>.
[ZC] 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 36]
^L
RFC 6763 DNS-Based Service Discovery February 2013
Appendix A. Rationale for Using DNS as a Basis for Service Discovery
Over the years, there have been many proposed ways to do network
service discovery with IP, but none achieved ubiquity in the
marketplace. Certainly none has achieved anything close to the
ubiquity of today's deployment of DNS servers, clients, and other
infrastructure.
The advantage of using DNS as the basis for service discovery is that
it makes use of those existing servers, clients, protocols,
infrastructure, and expertise. Existing network analyzer tools
already know how to decode and display DNS packets for network
debugging.
For ad hoc networks such as Zeroconf environments, peer-to-peer
multicast protocols are appropriate. Using DNS-SD running over
Multicast DNS [RFC6762] provides zero-configuration ad hoc service
discovery, while maintaining the DNS-SD semantics and record types
described here.
In larger networks, a high volume of enterprise-wide IP multicast
traffic may not be desirable, so any credible service discovery
protocol intended for larger networks has to provide some facility to
aggregate registrations and lookups at a central server (or servers)
instead of working exclusively using multicast. This requires some
service discovery aggregation server software to be written,
debugged, deployed, and maintained. This also requires some service
discovery registration protocol to be implemented and deployed for
clients to register with the central aggregation server. Virtually
every company with an IP network already runs a DNS server, and DNS
already has a dynamic registration protocol [RFC2136] [RFC3007].
Given that virtually every company already has to operate and
maintain a DNS server anyway, it makes sense to take advantage of
this expertise instead of also having to learn, operate, and maintain
a different service registration server. It should be stressed again
that using the same software and protocols doesn't necessarily mean
using the same physical piece of hardware. The DNS-SD service
discovery functions do not have to be provided by the same piece of
hardware that is currently providing the company's DNS name service.
The "_tcp.<Domain>" and "_udp.<Domain>" subdomains may be delegated
to a different piece of hardware. However, even when the DNS-SD
service is being provided by a different piece of hardware, it is
still the same familiar DNS server software, with the same
configuration file syntax, the same log file format, and so forth.
Service discovery needs to be able to provide appropriate security.
DNS already has existing mechanisms for security [RFC4033].
Cheshire & Krochmal Standards Track [Page 37]
^L
RFC 6763 DNS-Based Service Discovery February 2013
In summary:
Service discovery requires a central aggregation server.
DNS already has one: a DNS server.
Service discovery requires a service registration protocol.
DNS already has one: DNS Dynamic Update.
Service discovery requires a query protocol.
DNS already has one: DNS queries.
Service discovery requires security mechanisms.
DNS already has security mechanisms: DNSSEC.
Service discovery requires a multicast mode for ad hoc networks.
Using DNS-SD in conjunction with Multicast DNS provides this,
using peer-to-peer multicast instead of a DNS server.
It makes more sense to use the existing software that every network
needs already, instead of deploying an entire parallel system just
for service discovery.
Appendix B. Ordering of Service Instance Name Components
There have been questions about why services are named using DNS
Service Instance Names of the form:
Service Instance Name = <Instance> . <Service> . <Domain>
instead of:
Service Instance Name = <Service> . <Instance> . <Domain>
There are three reasons why it is beneficial to name service
instances with the parent domain as the most-significant (rightmost)
part of the name, then the abstract service type as the next-most
significant, and then the specific instance name as the least-
significant (leftmost) part of the name. These reasons are discussed
below in Sections B.1, B.2, and B.3.
B.1. Semantic Structure
The facility being provided by browsing ("Service Instance
Enumeration") is effectively enumerating the leaves of a tree
structure. A given domain offers zero or more services. For each of
those service types, there may be zero or more instances of that
service.
Cheshire & Krochmal Standards Track [Page 38]
^L
RFC 6763 DNS-Based Service Discovery February 2013
The user knows what type of service they are seeking. (If they are
running an FTP client, they are looking for FTP servers. If they
have a document to print, they are looking for entities that speak
some known printing protocol.) The user knows in which
organizational or geographical domain they wish to search. (The user
does not want a single flat list of every single printer on the
planet, even if such a thing were possible.) What the user does not
know in advance is whether the service they seek is offered in the
given domain, or if so, the number of instances that are offered and
the names of those instances.
Hence, having the instance names be the leaves of the tree is
consistent with this semantic model.
Having the service types be the terminal leaves of the tree would
imply that the user knows the domain name and the name of the service
instance, but doesn't have any idea what the service does. We would
argue that this is a less useful model.
B.2. Network Efficiency
When a DNS response contains multiple answers, name compression works
more effectively if all the names contain a common suffix. If many
answers in the packet have the same <Service> and <Domain>, then each
occurrence of a Service Instance Name can be expressed using only the
<Instance> part followed by a two-byte compression pointer
referencing a previous appearance of "<Service>.<Domain>". This
efficiency would not be possible if the <Service> component appeared
first in each name.
B.3. Operational Flexibility
This name structure allows subdomains to be delegated along logical
service boundaries. For example, the network administrator at
Example Co. could choose to delegate the "_tcp.example.com."
subdomain to a different machine, so that the machine handling
service discovery doesn't have to be the machine that handles other
day-to-day DNS operations. (It *can* be the same machine if the
administrator so chooses, but the administrator is free to make that
choice.) Furthermore, if the network administrator wishes to
delegate all information related to IPP printers to a machine
dedicated to that specific task, this is easily done by delegating
the "_ipp._tcp.example.com." subdomain to the desired machine. It is
also convenient to set security policies on a per-zone/per-subdomain
basis. For example, the administrator may choose to enable DNS
Dynamic Update [RFC2136] [RFC3007] for printers registering in the
Cheshire & Krochmal Standards Track [Page 39]
^L
RFC 6763 DNS-Based Service Discovery February 2013
"_ipp._tcp.example.com." subdomain, but not for other
zones/subdomains. This easy flexibility would not exist if the
<Service> component appeared first in each name.
Appendix C. What You See Is What You Get
Some service discovery protocols decouple the true service identifier
from the name presented to the user. The true service identifier
used by the protocol is an opaque unique identifier, often
represented using a long string of hexadecimal digits, which should
never be seen by the typical user. The name presented to the user is
merely one of the decorative ephemeral attributes attached to this
opaque identifier.
The problem with this approach is that it decouples user perception
from network reality:
* What happens if there are two service instances, with different
unique ids, but they have inadvertently been given the same user-
visible name? If two instances appear in an on-screen list with
the same name, how does the user know which is which?
* Suppose a printer breaks down, and the user replaces it with
another printer of the same make and model, and configures the new
printer with the exact same name as the one being replaced:
"Stuart's Printer". Now, when the user tries to print, the on-
screen print dialog tells them that their selected default printer
is "Stuart's Printer". When they browse the network to see what
is there, they see a printer called "Stuart's Printer", yet when
the user tries to print, they are told that the printer "Stuart's
Printer" can't be found. The hidden internal unique identifier
that the software is trying to find on the network doesn't match
the hidden internal unique identifier of the new printer, even
though its apparent "name" and its logical purpose for being there
are the same. To remedy this, the user typically has to delete
the print queue they have created, and then create a new
(apparently identical) queue for the new printer, so that the new
queue will contain the right hidden internal unique identifier.
Having all this hidden information that the user can't see makes
for a confusing and frustrating user experience, and exposing
long, ugly hexadecimal strings to the user and forcing them to
understand what they mean is even worse.
* Suppose an existing printer is moved to a new department, and
given a new name and a new function. Changing the user-visible
name of that piece of hardware doesn't change its hidden internal
unique identifier. Users who had previously created a print queue
Cheshire & Krochmal Standards Track [Page 40]
^L
RFC 6763 DNS-Based Service Discovery February 2013
for that printer will still be accessing the same hardware by its
unique identifier, even though the logical service that used to be
offered by that hardware has ceased to exist.
Solving these problems requires the user or administrator to be aware
of the supposedly hidden unique identifier, and to set its value
correctly as hardware is moved around, repurposed, or replaced,
thereby contradicting the notion that it is a hidden identifier that
human users never need to deal with. Requiring the user to
understand this expert behind-the-scenes knowledge of what is
*really* going on is just one more burden placed on the user when
they are trying to diagnose why their computers and network devices
are not working as expected.
These anomalies and counterintuitive behaviors can be eliminated by
maintaining a tight bidirectional one-to-one mapping between what the
user sees on the screen and what is really happening "behind the
curtain". If something is configured incorrectly, then that is
apparent in the familiar day-to-day user interface that everyone
understands, not in some little-known, rarely used "expert"
interface.
In summary: in DNS-SD the user-visible name is also the primary
identifier for a service. If the user-visible name is changed, then
conceptually the service being offered is a different logical service
-- even though the hardware offering the service may have stayed the
same. If the user-visible name doesn't change, then conceptually the
service being offered is the same logical service -- even if the
hardware offering the service is new hardware brought in to replace
some old equipment.
There are certainly arguments on both sides of this debate.
Nonetheless, the designers of any service discovery protocol have to
make a choice between having the primary identifiers be hidden, or
having them be visible, and these are the reasons that we chose to
make them visible. We're not claiming that there are no
disadvantages of having primary identifiers be visible. We
considered both alternatives, and we believe that the few
disadvantages of visible identifiers are far outweighed by the many
problems caused by use of hidden identifiers.
Cheshire & Krochmal Standards Track [Page 41]
^L
RFC 6763 DNS-Based Service Discovery February 2013
Appendix D. Choice of Factory-Default Names
When a DNS-SD service is advertised using Multicast DNS [RFC6762], if
there is already another service of the same type advertising with
the same name then automatic name conflict resolution will occur. As
described in the Multicast DNS specification [RFC6762], upon
detecting a conflict, the service should:
1. Automatically select a new name (typically by appending or
incrementing a digit at the end of the name),
2. Try advertising with the new name, and
3. Upon success, record the new name in persistent storage.
This renaming behavior is very important, because it is key to
providing user-friendly instance names in the out-of-the-box factory-
default configuration. Some product developers apparently have not
realized this, because there are some products today where the
factory-default name is distinctly unfriendly, containing random-
looking strings of characters, such as the device's Ethernet address
in hexadecimal. This is unnecessary and undesirable, because the
point of the user-visible name is that it should be friendly and
meaningful to human users. If the name is not unique on the local
network then the protocol will remedy this as necessary. It is
ironic that many of the devices with this design mistake are network
printers, given that these same printers also simultaneously support
AppleTalk-over-Ethernet, with nice user-friendly default names (and
automatic conflict detection and renaming). Some examples of good
factory-default names are:
Brother 5070N
Canon W2200
HP LaserJet 4600
Lexmark W840
Okidata C5300
Ricoh Aficio CL7100
Xerox Phaser 6200DX
To make the case for why adding long, ugly factory-unique serial
numbers to the end of names is neither necessary nor desirable,
consider the cases where the user has (a) only one network printer,
(b) two network printers, and (c) many network printers.
(a) In the case where the user has only one network printer,
a simple name like (to use a vendor-neutral example)
"Printer" is more user-friendly than an ugly name like
"Printer_0001E68C74FB". Appending ugly hexadecimal goop to the
end of the name to make sure the name is unique is irrelevant to
a user who only has one printer anyway.
Cheshire & Krochmal Standards Track [Page 42]
^L
RFC 6763 DNS-Based Service Discovery February 2013
(b) In the case where the user gets a second network printer, having
the new printer detect that the name "Printer" is already in use
and automatically name itself "Printer (2)" instead, provides a
good user experience. For most users, remembering that the old
printer is "Printer" and the new one is "Printer (2)" is easy
and intuitive. Seeing a printer called "Printer_0001E68C74FB"
and another called "Printer_00306EC3FD1C" is a lot less helpful.
(c) In the case of a network with ten network printers, seeing a
list of ten names all of the form "Printer_xxxxxxxxxxxx" has
effectively taken what was supposed to be a list of user-
friendly rich-text names (supporting mixed case, spaces,
punctuation, non-Roman characters, and other symbols) and turned
it into just about the worst user interface imaginable: a list
of incomprehensible random-looking strings of letters and
digits. In a network with a lot of printers, it would be
advisable for the people setting up the printers to take a
moment to give each one a descriptive name, but in the event
they don't, presenting the users with a list of sequentially
numbered printers is a much more desirable default user
experience than showing a list of raw Ethernet addresses.
Cheshire & Krochmal Standards Track [Page 43]
^L
RFC 6763 DNS-Based Service Discovery February 2013
Appendix E. Name Encodings in the Domain Name System
Although the original DNS specifications [RFC1033] [RFC1034]
[RFC1035] recommend that host names contain only letters, digits, and
hyphens (because of the limitations of the typing-based user
interfaces of that era), Service Instance Names are not host names.
Users generally access a service by selecting it from a list
presented by a user interface, not by typing in its Service Instance
Name. "Clarifications to the DNS Specification" [RFC2181] directly
discusses the subject of allowable character set in Section 11 ("Name
syntax"), and explicitly states that the traditional letters-digits-
hyphens rule applies only to conventional host names:
Occasionally it is assumed that the Domain Name System serves only
the purpose of mapping Internet host names to data, and mapping
Internet addresses to host names. This is not correct, the DNS is
a general (if somewhat limited) hierarchical database, and can
store almost any kind of data, for almost any purpose.
The DNS itself places only one restriction on the particular
labels that can be used to identify resource records. That one
restriction relates to the length of the label and the full name.
The length of any one label is limited to between 1 and 63 octets.
A full domain name is limited to 255 octets (including the
separators). The zero length full name is defined as representing
the root of the DNS tree, and is typically written and displayed
as ".". Those restrictions aside, any binary string whatever can
be used as the label of any resource record. Similarly, any
binary string can serve as the value of any record that includes a
domain name as some or all of its value (SOA, NS, MX, PTR, CNAME,
and any others that may be added). Implementations of the DNS
protocols must not place any restrictions on the labels that can
be used. In particular, DNS servers must not refuse to serve a
zone because it contains labels that might not be acceptable to
some DNS client programs.
Note that just because DNS-based Service Discovery supports arbitrary
UTF-8-encoded names doesn't mean that any particular user or
administrator is obliged to make use of that capability. Any user is
free, if they wish, to continue naming their services using only
letters, digits, and hyphens, with no spaces, capital letters, or
other punctuation.
Cheshire & Krochmal Standards Track [Page 44]
^L
RFC 6763 DNS-Based Service Discovery February 2013
Appendix F. "Continuous Live Update" Browsing Model
Of particular concern in the design of DNS-SD, especially when used
in conjunction with ad hoc Multicast DNS, is the dynamic nature of
service discovery in a changing network environment. Other service
discovery protocols seem to have been designed with an implicit
unstated assumption that the usage model is:
(a) client software calls the service discovery API,
(b) service discovery code spends a few seconds getting a list of
instances available at a particular moment in time, and then
(c) client software displays the list for the user to select from.
Superficially this usage model seems reasonable, but the problem is
that it's too optimistic. It only considers the success case, where
the software immediately finds the service instance the user is
looking for.
In the case where the user is looking for (say) a particular printer,
and that printer is not turned on or not connected, the user first
has to attempt to remedy the problem, and then has to click a
"refresh" button to retry the service discovery to find out whether
they were successful. Because nothing happens instantaneously in
networking, and packets can be lost, necessitating some number of
retransmissions, a service discovery search is not instantaneous and
typically takes a few seconds. As a result, a fairly typical user
experience is:
(a) display an empty window,
(b) display some animation like a searchlight sweeping back and
forth for ten seconds, and then
(c) at the end of the ten-second search, display a static list
showing what was discovered.
Every time the user clicks the "refresh" button they have to endure
another ten-second wait, and every time the discovered list is
finally shown at the end of the ten-second wait, it's already
beginning to get stale and out-of-date the moment it's displayed on
the screen.
The service discovery user experience that the DNS-SD designers had
in mind has some rather different properties:
1. Displaying the initial list of discovered services should be
effectively instantaneous -- i.e., typically 0.1 seconds, not 10
seconds.
Cheshire & Krochmal Standards Track [Page 45]
^L
RFC 6763 DNS-Based Service Discovery February 2013
2. The list of discovered services should not be getting stale and
out-of-date from the moment it's displayed. The list should be
'live' and should continue to update as new services are
discovered. Because of the delays, packet losses, and
retransmissions inherent in networking, it is to be expected that
sometimes, after the initial list is displayed showing the
majority of discovered services, a few remaining stragglers may
continue to trickle in during the subsequent few seconds. Even
after this stable list has been built and displayed, it should
remain 'live' and should continue to update. At any future time,
be it minutes, hours, or even days later, if a new service of the
desired type is discovered, it should be displayed in the list
automatically, without the user having to click a "refresh"
button or take any other explicit action to update the display.
3. With users getting in the habit of leaving service discovery
windows open, and expecting them to show a continuous 'live' view
of current network reality, this gives us an additional
requirement: deletion of stale services. When a service
discovery list shows just a static snapshot at a moment in time,
then the situation is simple: either a service was discovered and
appears in the list, or it was not and does not. However, when
our list is live and updates continuously with the discovery of
new services, then this implies the corollary: when a service
goes away, it needs to *disappear* from the service discovery
list. Otherwise, the service discovery list would simply grow
monotonically over time, accreting stale data, and would require
a periodic "refresh" (or complete dismissal and recreation) to
restore correct display.
4. Another consequence of users leaving service discovery windows
open for extended periods of time is that these windows should
update not only in response to services coming and going, but
also in response to changes in configuration and connectivity of
the client machine itself. For example, if a user opens a
service discovery window when the client machine has no network
connectivity, then the window will typically appear empty, with
no discovered services. When the user connects an Ethernet cable
or joins an 802.11 [IEEEW] wireless network the window should
then automatically populate with discovered services, without
requiring any explicit user action. If the user disconnects the
Ethernet cable or turns off 802.11 wireless then all the services
discovered via that network interface should automatically
disappear. If the user switches from one 802.11 wireless access
point to another, the service discovery window should
automatically update to remove all the services discovered via
the old wireless access point, and add all the services
discovered via the new one.
Cheshire & Krochmal Standards Track [Page 46]
^L
RFC 6763 DNS-Based Service Discovery February 2013
Appendix G. 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.
In April 2000, Stuart Cheshire registered IPv4 multicast address
224.0.0.251 with IANA 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], which later became this document, proposed a way to
perform NBP-like service discovery using DNS-compatible names and
record types.
o "Multicast DNS" [RFC6762] 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.
Cheshire & Krochmal Standards Track [Page 47]
^L
RFC 6763 DNS-Based Service Discovery February 2013
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
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].
Cheshire & Krochmal Standards Track [Page 48]
^L
RFC 6763 DNS-Based Service Discovery February 2013
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].
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 49]
^L
|