As stated in the introduction section, the three network services necessary for remote booting are BOOTP, TFTP, and NFS. This section will examine the theory of how this works in more detail, and look at other networking issues affecting their capabilities. The boot process is started with the diskless computer.
Hardware and Firmware
The diskless computer must have a network interface card (NIC) on board. This card can be one of several types which Linux will support. Testing has been done using the following cards:
ISA NE2000 cards which are leftovers or cost under $10 have been tested successfully with remote booting. The remote computers must have an onboard NIC containing a PROM program that supports BOOTP. Prior to programming the PROM, this program may be placed on floppy for testing purposes if a floppy drive is available on the remote computer.
Why not use RARP?
RARP is not used for two reasons.
BOOTP messages are is encapsulated inside UDP messages and therefore it's requests and replies are forwarded by routers that have BOOTP/DHCP relay agents installed. The drawing below illustrates the data encapsulation:
The diskless system reads its unique hardware address from its network interface card then sends a BOOTP request. The table below shows the BOOTP package format from most significant bit to least significant bit.
|Bit range||# of Bits||Name||Description|
|0-7||8||Opcode||Tells if the message is a BOOTP request or reply. Request=1, reply=2|
|8-15||8||Hardware type||Indicates the type of hardware (link level). A value of 6 indicates ethernet|
|16-23||8||Hardware address length||Tells the length in bytes of the hardware address number. Ethernet addresses are 6 bytes long.|
|23-31||8||Hop count||Initially set to 0. Incremented each time it is forwarded.|
|32-63||32||Transaction ID||A random number set by the client and returned by the server. Used to match replies with requests|
|64-79||16||Number of seconds||The time since the client started trying to bootstrap. Used to tell if a backup BOOTP server should respond.|
|96-127||32||Clients IP address||The clients IP address. If a request, it is normally 0.0.0.0|
|128-159||32||IP address for client||The server sets this in the reply message.|
|160-191||32||Server IP address||Filled in by the server.|
|192-223||32||Gateway IP address||Returned by the server.|
|224-351||128||Clients hardware address||Provided by the client.|
|352-1375||1024||Server hostname||A null terminated string optionally filled in by the server.|
|1376-3423||2048||Boot filename||A fully qualified boot file name with path information, terminated with a null. Supplied by the server.|
|3424-4447||1024||Vendor information||Used for various options to BOOTP including the subnet mask to the client.|
The BOOTP server uses port 67 and the BOOTP client uses port 68. The following is a brief explanation of what happens when a remote client boots:
Trivial file transfer protocol ((TFTP) uses port 69. Trivial file transfer protocol (TFTP) is similar to FTP, but more compact and requires no login. TFTP uses the UDP protocol to keep it small for use by diskless workstations. Some have had security concerns with TFTP, but it appears that security with TFTP has been greatly improved lately. This is because TFTP can be set up so access outside a specified directory will be denied. In fact the TFTP client cannot execute a directory command or have any way to search outside its single directory. In spite of this, it is still not generally recommended to assume TFTP is fully secure. It is therefore recommended that a TFTP server not be used to store sensitive data. The TFTP message block begins with an opcode which will be set to one of the following values:
The TFTP datagram with a RRQ or WRQ opcode will contain a filename with a null terminator, and mode. The mode is a string "netascii" or "octet" terminated by a null character. Octet means the data is 8bit bytes of data and netascii means the data is ASC text. All data packets (opcode=3) have a block number that is later used in the acknowledgement (opcode=4). During a transfer, the following happens:
Network File System (NFS) uses Remote Procedure Protocol (RPC) and the UDP protocol. NFS is a method used by UNIX and Linux computers to share filesystems over a network.