RFC 1084
BOOTP vendor information extensions
RFC 1084: BOOTP Vendor Information Extensions ๐
- Working group: Network Working Group ๐ธ
- RFC: 1084
- Title: BOOTP Vendor Information Extensions
- Author: J. Reynolds, ISI
- Date: December 1988
- Obsoletes: 1048 (the older version this one replaces) ๐
Status of this Memo โจ
okay so this memo is basically an addition to the Bootstrap Protocol (BOOTP) ๐ฆ. They're literally begging for comments and suggestions for improvements, so if you have thoughts, speak up bestie ๐ซถ. Distribution of this memo is unlimited too, so share away ๐.
Introduction ๐
This RFC is a slight revision and extension of RFC-1048, and the original work belongs to Philip Prindeville, so give him the credit ๐. This memo will be updated as more tags get defined, and this edition introduces Tag 13 for Boot File Size ๐.
As workstations and personal computers take over the Internet, the admin complexity of running a network goes up by an order of magnitude ๐ญ. Assigning local network resources to each client is one of those headaches. In most environments, handing that job to the user is not plausible ๐, so the move is to define resources in uniform terms and automate their assignment โจ.
The basic Bootstrap Protocol [RFC-951] already handled giving a client an internet address, plus a few other resources ๐ง. It even had provisions for vendor-defined resource information ๐.
This memo defines a (potentially) vendor-independent way to read that resource information ๐.
Overview of BOOTP ๐
Okay so the Reverse Address Resolution (RARP) Protocol [RFC-903] can assign an IP address to a local network hardware address, but ngl it only covers part of what you need ๐ฅฒ. You can pair it with other supplemental protocols like the Resource Location Protocol [RFC-887] and the Domain Name System [RFC-1034], but a more integrated solution may be desirable โจ.
BOOTP is a UDP/IP-based protocol that lets a booting host configure itself dynamically ๐คฏ. Even better, it does this without any user supervision ๐. It gives a host its IP address, a file to download a boot program from on some server, that server's address, and the address of an Internet gateway (if present) ๐ช.
The obvious perk is centralized management of network addresses, which means no more per-host unique configuration files ๐๏ธ. With several hundred hosts, keeping local configuration info and operating system versions specific to each host could get totally chaotic ๐ต. Sorting hosts into classes and keeping configuration info and boot programs for each class means the complexity of that chore may be reduced in magnitude ๐.
BOOTP Vendor Information Format ๐
The full scoop on the BOOTP request/reply packet format lives in [RFC-951] ๐ฆ. The rest of this doc is about the last field of the packet: a 64 octet area reserved for vendor information, which used to be totally unspecified ๐ซ . A generalized use of that area, for info useful to a wide range of machines, operating systems, and configurations, comes next โจ. If one BOOTP server has to serve heterogeneous clients at a single site, a generic class of data may be used ๐งฉ.
Vendor Information "Magic Cookie" ๐ช
Like [RFC-951] suggested, the first four bytes of this field are the magic cookie, which tells you how to read the data that follows ๐ฎ. Its value is the 4 octet dotted decimal 99.130.83.99 (or hexadecimal number 63.82.53.63) in network byte order ๐.
Format of Individual Fields ๐ง
The vendor information field is free format, with extendable tagged sub-fields ๐งธ. Most of those sub-fields are length tagged (there are exceptions, see below), so clients that don't implement certain types can still skip past the fields they can't interpret ๐โโ๏ธ. Lengths don't count the tag and length octets, and all multi-byte quantities are in network byte-order ๐ข.
Fixed Length Data ๐ง
Fixed length data comes in two flavors ๐ฆ. Fields with no data are just a single tag octet, implicitly one octet long. Fields with data are one tag octet, one length octet, and then that many octets of data ๐งพ.
Pad Field (Tag: 0, Data: None)
PAD may be used to line up later fields on the word boundaries the target machine needs, like 32-bit quantities such as IP addresses sitting on 32-bit boundaries ๐.
Subnet Mask Field (Tag: 1, Data: 4 subnet mask bytes)
This one specifies the net and local subnet mask, following the subnetting standard in [RFC-950] ๐ญ. For convenience, this field must precede the GATEWAY field (below), if present ๐ฆ.
Time Offset Field (Tag: 2, Data: 4 time offset bytes)
This one gives the time offset of the local subnet, in seconds from Coordinated Universal Time (UTC) โฐ. It's a signed 32-bit integer ๐ข.
End Field (Tag: 255, Data: None)
This marks the end of the usable data in the vendor information area ๐. The rest of this field should be filled with PAD (zero) octets ๐ซง.
to be continued... the variable length fields and extensions are up next ๐๐
Comparison to Alternative Approaches ๐
Okay bestie, this section is the RFC basically asking "wait, do we even need all this?" ๐ค Extending BOOTP to hand out more config info than the bare minimum boot PROMs need may not be necessary. Instead of every module on a host (like the time module, the print spooler, or the domain name resolver) pinging the BOOTP server for server addresses, it would be better for each one to multicast straight to the server group it wants, maybe using "expanding ring" multicasts. ๐ฆ
The multicast approach has the following advantages over the BOOTP approach:
- No more depending on a third party (the BOOTP server) that might be temporarily unavailable, or whose database might be wrong or incomplete ๐ Multicasting directly to the services you want finds the servers that are up right now, and only those. โจ
- It takes way less admin drama to keep the (probably replicated) BOOTP database up-to-date and consistent ๐ This matters a LOT when you've got a growing number of services and a constantly changing crowd of servers. ๐ญ
- Sometimes it cuts down on packet traffic and/or the delay needed to get the info you want โก For example, the current time can come from a single multicast to a time server group, which gets replies from whichever time servers are currently up. The BOOTP approach would need a broadcast to the BOOTP server, a reply from the BOOTP server, one or more unicasts to time servers (maybe waiting out long timeouts if the first picks are down), and finally a reply from a server. Main character energy it is not ๐
One apparent advantage of the proposed BOOTP extensions is that they give you a uniform way to locate servers. Cute, but the multicast approach could be done consistently across multiple services too ๐ The V System naming protocol is a great example of this: character string pathnames name any number of resources (not just files), and a standard subroutine library handles the multicasting to locate them, caches the discovered locations, and detects stale cache data. Iconic. ๐
Another apparent advantage of the BOOTP approach is that it lets an administrator easily control which hosts use which servers ๐ The multicast approach leans toward more distributed control over resource allocation, where each server decides which hosts it will serve, using whatever level of authentication fits that particular service. For example, time servers usually don't care who they serve (so administrative control via the BOOTP database is unnecessary), whereas file servers usually require strong authentication (so administrative control via the BOOTP database is insufficient). Different vibes, different needs. ๐ง
The main drawback of the multicast approach, of course, is that IP multicasting is not widely implemented, and there's a need to locate existing services that don't understand IP multicasts ๐ฌ
The BOOTP approach may be most efficient when all the information the client host needs comes back in a single BOOTP reply, and each program module just reads what it needs from a local table filled in by that reply. Simple, clean, no drama ๐
Acknowledgments ๐ซถ
The following people gave helpful comments on the first edition of this memo: Drew Perkins, of Carnagie Mellon University, Bill Croft, of Stanford University, and co-author of BOOTP, and Steve Deering, also of Stanford University, for contributing the "Comparison to Alternative Approaches" section. Thank you, queens. ๐๐
References ๐
[RFC-951]Croft, B., and J. Gilmore, "Bootstrap Protocol", Network Information Center, SRI International, Menlo Park, California, September 1985.[RFC-903]Finlayson, R., T. Mann, J. Mogul, and M. Theimer, "A Reverse Address Resolution Protocol", Network Information Center, SRI International, Menlo Park, California, June 1984.[RFC-887]Accetta, M., "Resource Location Protocol", Network Information Center, SRI International, Menlo Park, California, December 1983.[RFC-1034]Mockapetris, P., "Domain Names - Concepts and Facilities", Network Information Center, SRI International, Menlo Park, California, November 1987.[RFC-950]Mogul, J., "Internet Standard Subnetting Procedure", Network Information Center, SRI International, Menlo Park, California, August 1985.[RFC-868]Postel, J., "Time Protocol", Network Information Center, SRI International, Menlo Park, California, May 1983.[IEN-116]Postel, J., "Internet Name Server", Network Information Center, SRI International, Menlo Park, California, August 1979.[LOGGING]Clark, D., Logging and Status Protocol", Massachusetts Institute of Technology Laboratory for Computer Science, Cambridge, Massachusetts, 1981.[RFC-865]Postel, J., "Quote of the Day Protocol", Network Information Center, SRI International, Menlo Park, California, May 1983.[LPD]Campbell, R., "4.2BSD Line Printer Spooler Manual", UNIX Programmer's Manual, Vol II, University of California at Berkeley, Computer Science Division, July 1983.[IMAGEN]"Image Server XT Programmer's Guide", Imagen Corporation, Santa Clara, California, August 1986.
Author's Address ๐ธ
Joyce K. Reynolds
USC/Information Sciences Institute
4676 Admiralty Way
Marina del Rey, CA 90292
Phone: (213) 822-1511
EMail: JKREYNOLDS@ISI.EDU
๐ฆ where this page comes from
- ietf: rfc1084 1988-12
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms