7 Network Working Group A. Gulbrandsen
8 Request for Comments: 2052 Troll Technologies
9 Updates: 1035, 1183 P. Vixie
10 Category: Experimental Vixie Enterprises
14 A DNS RR for specifying the location of services (DNS SRV)
18 This memo defines an Experimental Protocol for the Internet
19 community. This memo does not specify an Internet standard of any
20 kind. Discussion and suggestions for improvement are requested.
21 Distribution of this memo is unlimited.
25 This document describes a DNS RR which specifies the location of the
26 server(s) for a specific protocol and domain (like a more general
29 Overview and rationale
31 Currently, one must either know the exact address of a server to
32 contact it, or broadcast a question. This has led to, for example,
33 ftp.whatever.com aliases, the SMTP-specific MX RR, and using MAC-
34 level broadcasts to locate servers.
36 The SRV RR allows administrators to use several servers for a single
37 domain, to move services from host to host with little fuss, and to
38 designate some hosts as primary servers for a service and others as
41 Clients ask for a specific service/protocol for a specific domain
42 (the word domain is used here in the strict RFC 1034 sense), and get
43 back the names of any available servers.
47 When a SRV-cognizant web-browser wants to retrieve
58 Gulbrandsen & Vixie Experimental [Page 1]
60 RFC 2052 DNS SRV RR October 1996
63 and retrieves the document from one of the servers in the reply. The
64 example zone file near the end of the memo contains answering RRs for
67 The format of the SRV RR
69 Here is the format of the SRV RR, whose DNS type code is 33:
71 Service.Proto.Name TTL Class SRV Priority Weight Port Target
73 (There is an example near the end of this document.)
76 The symbolic name of the desired service, as defined in Assigned
79 Some widely used services, notably POP, don't have a single
80 universal name. If Assigned Numbers names the service
81 indicated, that name is the only name which is legal for SRV
82 lookups. Only locally defined services may be named locally.
83 The Service is case insensitive.
86 TCP and UDP are at present the most useful values
87 for this field, though any name defined by Assigned Numbers or
88 locally may be used (as for Service). The Proto is case
92 The domain this RR refers to. The SRV RR is unique in that the
93 name one searches for is not this name; the example near the end
100 Standard DNS meaning.
103 As for MX, the priority of this target host. A client MUST
104 attempt to contact the target host with the lowest-numbered
105 priority it can reach; target hosts with the same priority
106 SHOULD be tried in pseudorandom order. The range is 0-65535.
114 Gulbrandsen & Vixie Experimental [Page 2]
116 RFC 2052 DNS SRV RR October 1996
120 Load balancing mechanism. When selecting a target host among
121 the those that have the same priority, the chance of trying this
122 one first SHOULD be proportional to its weight. The range of
123 this number is 1-65535. Domain administrators are urged to use
124 Weight 0 when there isn't any load balancing to do, to make the
125 RR easier to read for humans (less noisy).
128 The port on this target host of this service. The range is
129 0-65535. This is often as specified in Assigned Numbers but
133 As for MX, the domain name of the target host. There MUST be
134 one or more A records for this name. Implementors are urged, but
135 not required, to return the A record(s) in the Additional Data
136 section. Name compression is to be used for this field.
138 A Target of "." means that the service is decidedly not
139 available at this domain.
141 Domain administrator advice
143 Asking everyone to update their telnet (for example) clients when the
144 first internet site adds a SRV RR for Telnet/TCP is futile (even if
145 desirable). Therefore SRV will have to coexist with A record lookups
146 for a long time, and DNS administrators should try to provide A
147 records to support old clients:
149 - Where the services for a single domain are spread over several
150 hosts, it seems advisable to have a list of A RRs at the same
151 DNS node as the SRV RR, listing reasonable (if perhaps
152 suboptimal) fallback hosts for Telnet, NNTP and other protocols
153 likely to be used with this name. Note that some programs only
154 try the first address they get back from e.g. gethostbyname(),
155 and we don't know how widespread this behaviour is.
157 - Where one service is provided by several hosts, one can either
158 provide A records for all the hosts (in which case the round-
159 robin mechanism, where available, will share the load equally)
160 or just for one (presumably the fastest).
162 - If a host is intended to provide a service only when the main
163 server(s) is/are down, it probably shouldn't be listed in A
170 Gulbrandsen & Vixie Experimental [Page 3]
172 RFC 2052 DNS SRV RR October 1996
175 - Hosts that are referenced by backup A records must use the port
176 number specified in Assigned Numbers for the service.
178 Currently there's a practical limit of 512 bytes for DNS replies.
179 Until all resolvers can handle larger responses, domain
180 administrators are strongly advised to keep their SRV replies below
183 All round numbers, wrote Dr. Johnson, are false, and these numbers
184 are very round: A reply packet has a 30-byte overhead plus the name
185 of the service ("telnet.tcp.asdf.com" for instance); each SRV RR adds
186 20 bytes plus the name of the target host; each NS RR in the NS
187 section is 15 bytes plus the name of the name server host; and
188 finally each A RR in the additional data section is 20 bytes or so,
189 and there are A's for each SRV and NS RR mentioned in the answer.
190 This size estimate is extremely crude, but shouldn't underestimate
191 the actual answer size by much. If an answer may be close to the
192 limit, using e.g. "dig" to look at the actual answer is a good idea.
196 Weight, the load balancing field, is not quite satisfactory, but the
197 actual load on typical servers changes much too quickly to be kept
198 around in DNS caches. It seems to the authors that offering
199 administrators a way to say "this machine is three times as fast as
200 that one" is the best that can practically be done.
202 The only way the authors can see of getting a "better" load figure is
203 asking a separate server when the client selects a server and
204 contacts it. For short-lived services like SMTP an extra step in the
205 connection establishment seems too expensive, and for long-lived
206 services like telnet, the load figure may well be thrown off a minute
207 after the connection is established when someone else starts or
208 finishes a heavy job.
212 Currently, the translation from service name to port number happens
213 at the client, often using a file such as /etc/services.
215 Moving this information to the DNS makes it less necessary to update
216 these files on every single computer of the net every time a new
217 service is added, and makes it possible to move standard services out
218 of the "root-only" port range on unix
226 Gulbrandsen & Vixie Experimental [Page 4]
228 RFC 2052 DNS SRV RR October 1996
233 A SRV-cognizant client SHOULD use this procedure to locate a list of
234 servers and connect to the preferred one:
236 Do a lookup for QNAME=service.protocol.target, QCLASS=IN,
239 If the reply is NOERROR, ANCOUNT>0 and there is at least one SRV
240 RR which specifies the requested Service and Protocol in the
243 If there is precisely one SRV RR, and its Target is "."
244 (the root domain), abort.
246 Else, for all such RR's, build a list of (Priority, Weight,
249 Sort the list by priority (lowest number first)
251 Create a new empty list
253 For each distinct priority level
254 While there are still elements left at this priority
256 Select an element randomly, with probability
257 Weight, and move it to the tail of the new list
259 For each element in the new list
261 query the DNS for A RR's for the Target or use any
262 RR's found in the Additional Data secion of the
265 for each A RR found, try to connect to the (protocol,
268 else if the service desired is SMTP
270 skip to RFC 974 (MX).
274 Do a lookup for QNAME=target, QCLASS=IN, QTYPE=A
276 for each A RR found, try to connect to the (protocol,
282 Gulbrandsen & Vixie Experimental [Page 5]
284 RFC 2052 DNS SRV RR October 1996
289 - Port numbers SHOULD NOT be used in place of the symbolic service
290 or protocol names (for the same reason why variant names cannot
291 be allowed: Applications would have to do two or more lookups).
293 - If a truncated response comes back from an SRV query, and the
294 Additional Data section has at least one complete RR in it, the
295 answer MUST be considered complete and the client resolver
296 SHOULD NOT retry the query using TCP, but use normal UDP queries
297 for A RR's missing from the Additional Data section.
299 - A client MAY use means other than Weight to choose among target
300 hosts with equal Priority.
302 - A client MUST parse all of the RR's in the reply.
304 - If the Additional Data section doesn't contain A RR's for all
305 the SRV RR's and the client may want to connect to the target
306 host(s) involved, the client MUST look up the A RR(s). (This
307 happens quite often when the A RR has shorter TTL than the SRV
310 - A future standard could specify that a SRV RR whose Protocol was
311 TCP and whose Service was SMTP would override RFC 974's rules
312 with regard to the use of an MX RR. This would allow firewalled
313 organizations with several SMTP relays to control the load
314 distribution using the Weight field.
316 - Future protocols could be designed to use SRV RR lookups as the
317 means by which clients locate their servers.
321 This is (part of) the zone file for asdf.com, a still-unused domain:
324 @ SOA server.asdf.com. root.asdf.com. (
325 1995032001 3600 3600 604800 86400 )
327 NS ns1.ip-provider.net.
328 NS ns2.ip-provider.net.
329 ftp.tcp SRV 0 0 21 server.asdf.com.
330 finger.tcp SRV 0 0 79 server.asdf.com.
331 ; telnet - use old-slow-box or new-fast-box if either is
332 ; available, make three quarters of the logins go to
334 telnet.tcp SRV 0 1 23 old-slow-box.asdf.com.
338 Gulbrandsen & Vixie Experimental [Page 6]
340 RFC 2052 DNS SRV RR October 1996
343 SRV 0 3 23 new-fast-box.asdf.com.
344 ; if neither old-slow-box or new-fast-box is up, switch to
345 ; using the sysdmin's box and the server
346 SRV 1 0 23 sysadmins-box.asdf.com.
347 SRV 1 0 23 server.asdf.com.
348 ; HTTP - server is the main server, new-fast-box is the backup
349 ; (On new-fast-box, the HTTP daemon runs on port 8000)
350 http.tcp SRV 0 0 80 server.asdf.com.
351 SRV 10 0 8000 new-fast-box.asdf.com.
352 ; since we want to support both http://asdf.com/ and
353 ; http://www.asdf.com/ we need the next two RRs as well
354 http.tcp.www SRV 0 0 80 server.asdf.com.
355 SRV 10 0 8000 new-fast-box.asdf.com.
356 ; SMTP - mail goes to the server, and to the IP provider if
358 smtp.tcp SRV 0 0 25 server.asdf.com.
359 SRV 1 0 25 mailhost.ip-provider.net.
360 @ MX 0 server.asdf.com.
361 MX 1 mailhost.ip-provider.net.
362 ; NNTP - use the IP providers's NNTP server
363 nntp.tcp SRV 0 0 119 nntphost.ip-provider.net.
364 ; IDB is an locally defined protocol
365 idb.tcp SRV 0 0 2025 new-fast-box.asdf.com.
367 server A 172.30.79.10
368 old-slow-box A 172.30.79.11
369 sysadmins-box A 172.30.79.12
370 new-fast-box A 172.30.79.13
371 ; backup A records - new-fast-box and old-slow-box are
372 ; included, naturally, and server is too, but might go
373 ; if the load got too bad
377 ; backup A RR for www.asdf.com
379 ; NO other services are supported
383 In this example, a telnet connection to "asdf.com." needs an SRV
384 lookup of "telnet.tcp.asdf.com." and possibly A lookups of "new-
385 fast-box.asdf.com." and/or the other hosts named. The size of the
386 SRV reply is approximately 365 bytes:
388 30 bytes general overhead
389 20 bytes for the query string, "telnet.tcp.asdf.com."
390 130 bytes for 4 SRV RR's, 20 bytes each plus the lengths of "new-
394 Gulbrandsen & Vixie Experimental [Page 7]
396 RFC 2052 DNS SRV RR October 1996
399 fast-box", "old-slow-box", "server" and "sysadmins-box" -
400 "asdf.com" in the query section is quoted here and doesn't
401 need to be counted again.
402 75 bytes for 3 NS RRs, 15 bytes each plus the lengths of
403 "server", "ns1.ip-provider.net." and "ns2" - again, "ip-
404 provider.net." is quoted and only needs to be counted once.
405 120 bytes for the 6 A RR's mentioned by the SRV and NS RR's.
409 RFC 1918: Rekhter, Y., Moskowitz, R., Karrenberg, D., de Groot, G.,
410 and E. Lear, "Address Allocation for Private Internets",
411 RFC 1918, February 1996.
413 RFC 1916 Berkowitz, H., Ferguson, P, Leland, W. and P. Nesser,
414 "Enterprise Renumbering: Experience and Information
415 Solicitation", RFC 1916, February 1996.
417 RFC 1912 Barr, D., "Common DNS Operational and Configuration
418 Errors", RFC 1912, February 1996.
420 RFC 1900: Carpenter, B., and Y. Rekhter, "Renumbering Needs Work",
421 RFC 1900, February 1996.
423 RFC 1920: Postel, J., "INTERNET OFFICIAL PROTOCOL STANDARDS",
424 STD 1, RFC 1920, March 1996.
426 RFC 1814: Gerich, E., "Unique Addresses are Good", RFC 1814, June
429 RFC 1794: Brisco, T., "DNS Support for Load Balancing", April 1995.
431 RFC 1713: Romao, A., "Tools for DNS debugging", November 1994.
433 RFC 1712: Farrell, C., Schulze, M., Pleitner, S., and D. Baldoni,
434 "DNS Encoding of Geographical Location", RFC 1712, November
437 RFC 1706: Manning, B. and R. Colella, "DNS NSAP Resource Records",
438 RFC 1706, October 1994.
440 RFC 1700: Reynolds, J., and J. Postel, "ASSIGNED NUMBERS",
441 STD 2, RFC 1700, October 1994.
443 RFC 1183: Ullmann, R., Mockapetris, P., Mamakos, L., and
444 C. Everhart, "New DNS RR Definitions", RFC 1183, November
450 Gulbrandsen & Vixie Experimental [Page 8]
452 RFC 2052 DNS SRV RR October 1996
455 RFC 1101: Mockapetris, P., "DNS encoding of network names and other
456 types", RFC 1101, April 1989.
458 RFC 1035: Mockapetris, P., "Domain names - implementation and
459 specification", STD 13, RFC 1035, November 1987.
461 RFC 1034: Mockapetris, P., "Domain names - concepts and
462 facilities", STD 13, RFC 1034, November 1987.
464 RFC 1033: Lottor, M., "Domain administrators operations guide",
465 RFC 1033, November 1987.
467 RFC 1032: Stahl, M., "Domain administrators guide", RFC 1032,
470 RFC 974: Partridge, C., "Mail routing and the domain system",
471 STD 14, RFC 974, January 1986.
473 Security Considerations
475 The authors believes this RR to not cause any new security problems.
476 Some problems become more visible, though.
478 - The ability to specify ports on a fine-grained basis obviously
479 changes how a router can filter packets. It becomes impossible
480 to block internal clients from accessing specific external
481 services, slightly harder to block internal users from running
482 unautorised services, and more important for the router
483 operations and DNS operations personnel to cooperate.
485 - There is no way a site can keep its hosts from being referenced
486 as servers (as, indeed, some sites become unwilling secondary
487 MXes today). This could lead to denial of service.
489 - With SRV, DNS spoofers can supply false port numbers, as well as
490 host names and addresses. The authors do not see any practical
493 We assume that as the DNS-security people invent new features, DNS
494 servers will return the relevant RRs in the Additional Data section
495 when answering an SRV query.
506 Gulbrandsen & Vixie Experimental [Page 9]
508 RFC 2052 DNS SRV RR October 1996
515 Postboks 6133 Etterstad
520 EMail: agulbra@troll.no
528 Phone: (415) 747-0204
562 Gulbrandsen & Vixie Experimental [Page 10]