BOOTP (Bootstrap Protocol) is the successor of RARP (Reverse ARP) and the predecessor of DHCP.
RARP is a link layer protocol and the problem of RARP is that you can’t route these packets. You need a RARP server on every subnet. BOOTP uses the UDP transport protocol and rides on top of IP so it can be routed. BOOTP supports relay servers so you can have a central BOOTP server that assigns IP addresses to hosts in all of your subnets.
Another issue with RARP is that it only allows you to assign an IP address, that’s it. No default gateway, DNS servers, etc. BOOTP supports all of this. You can assign an IP address, default gateway, subnet mask, DNS servers, and other options.
In the past, BOOTP was often used to specify a TFTP server and boot image that diskless workstations could use. The diskless workstation receives an IP address, TFTP server address, and boot image filename. It then downloads the boot image from the TFTP server and boots its OS.
BOOTP uses UDP port 67 and 68. If you have seen DHCP before then everything I explained so far might sound very familiar. In fact, DHCP is based on BOOTP. The port numbers are the same so you can’t run a BOOTP and DHCP server at the same time.
There is a key difference between BOOTP and DHCP though. BOOTP uses a static database that you have to fill yourself. Similar to RARP, you need to enter all MAC addresses and the IP addresses (and other options like a default gateway) you want to use in the database yourself. When a BOOTP server receives a request, it looks in its database for a matching entry and then returns the result to the host.
DHCP servers use a “pool” of addresses. When the DHCP server receives a request, it returns an IP address from the pool that you configured. It doesn’t care about the MAC address unless you use a reservation. This is more efficient since you don’t waste any IP addresses that are not in use.
Here’s what the BOOTP process looks like:
The host sends a BOOTP request and uses UDP source port 68 and destination port 67. This packet is a broadcast so everything in the broadcast domain receives it. On our network, we have a BOOTP server listening on UDP port 67:
The server sees the broadcast packet from the host and since it’s listening on UDP port 67, it processes the packet. The server then looks in its database to find a matching entry for the MAC address of the host. When there is a match, it returns the information to the host with a unicast packet.
Nowadays, we don’t use BOOTP as it has been replaced by DHCP. Since DHCP was built on BOOTP, if you look at a DHCP capture, you will see bootstrap terminology in the packets:
You have now learned:
- BOOTP assigns IP addresses to host with a BOOTP server.
- BOOTP is the successor of RARP. The problem with RARP is that it only works within a broadcast domain and only assigns IP addresses. Not other options like the default gateway or a DNS server.
- BOOTP uses the UDP protocol and IP so it’s routable. You can use relay agents and a central BOOTP server for all your subnets.
- The BOOTP server uses a database with MAC addresses, IP addresses, and other options. You need to add this information yourself in the database.
- Nowadays we don’t use BOOTP anymore but DHCP.
Take a look at RFC 951 if you want to see more details.
I hope you enjoyed this lesson. If you have any questions feel free to leave a comment!