RARP, BOOTP, and DHCP are all protocols that assisted clients with learning what IP they were to be assigned, they all relied on servers to request IPs from and listen for replies so they knew what IP they were given.
RARP basically still used ARP messages, but instead it listed its own MAC address as the target and listed an IP address of 0.0.0.0 in the message. This would be broadcast into the LAN and a preconfigured RARP server would listen for these messages. If the host was configured on the server to have an IP address the server would respond with an ARP Reply and the IP address the host was supposed to have.
BOOTP was created to improve RARP, BOOTP used different set of messages encapsulated inside an IP and UDP header. The router would have to be preconfigured but upon receiving BOOTP packets the router would forward them to other subnets allowing centralized BOOTP server. BOOTP assigned the IP address to clients but it also assigned the subnet mask, default gateway, DNs servers, and the IP address of the boot server. The only problem here is that like RARP clients had to be preconfigured in order to be assigned an IP address.
DHCP was then created and built upon the BOOTP method of assigning addresses however it allowed for hosts to dynamically assign their addresses without the need of preconfiguration on the DHCP server beforehand. DHCP introduces IP leasing allowing for the reclamation of IP space, pooling of IP addresses and registration of FQDNs. If hosts were separated by routers and needed address assignment across networks, IP helpers would be configured on the router to forward the DHCP request to the configured DHCP server.