OK. Let me lay the whole process out.

The PC starts up. If it's got network boot enabled, it will contact a PXE-enabled DHCP server. It asks for the normal stuff: IP address, gateway, etc., but in addition to this, it also wants DHCP options #66 and #67 filled in. One of these is the IP address of a boot-image server. The other is the name of a boot file.

You can see how to configure these options for ISC dhcpd (which is probably what you're running on Linux) at my page, here.

Note that, so far, PXE booting is no different from how diskless Unix workstations have always booted up (except that, as Bitt says, these also ask for a root filesystem location).

So, to recap: the client has now got its IP address, the IP address of a boot server, and the name of a file on that server.

The PXE-enabled BIOS on the PC (we're still nowhere near an operating system at this point) uses something called TFTP (see RFC 1350 for the gory details) to download that named file into memory.

If you're attempting to network boot Linux, this file is generally called pxelinux.0, which is actually the syslinux menu system, rather than the actual kernel.

If you're network booting Windows, it's called startrom.com, and you can find it in the I386 directory of your Windows CD. There are two versions -- one requires you to press F12 to continue the network boot. One doesn't. See http://oss.netfarm.it/guides/pxe.php, for more information.

Once this file is loaded into RAM, the BIOS passes control over to it, and it then it uses TFTP to grab hold of some other files: NTLDR, NTDETECT.COM and WINNT.SIF. The first two files are on your Windows CD. The WINNT.SIF file is a text file describing how the rest of the boot process works.

The NTLDR file is finally kicked off, and it's responsible for starting up the rest of Windows.

Now, here's where it diverges. If you've built your own Windows bootable image (as laid out at http://oss.netfarm.it/guides/pxe.php, or as Microsoft RIS would do it), you'll need something called a BINL service, and your Windows files will need to be accessible over CIFS/SMB (which is where Samba comes in).

As the machine comes up, the BINL service is responsible for telling NTLDR/NTDETECT.COM which driver files it needs for the various things that it found in the PC. These files are downloaded using SMB.

The other option is, if you've got a copy of Windows 2003 SP1 and the OEM Preinstallation Kit (OPK) available, you can build Windows PE 2005. This supports running from a RAM disk.

So, rather than load everything over SMB, NTLDR grabs an ISO file using TFTP, loads it into RAM, and then mounts it as a RAM disk. This is slower (because it grabs all 170Mb or so of Windows, rather than just the drivers that it needs), but it requires less configuration.

Either way, once it's finished booting, this will leave you in what Microsoft calls Windows PE (for Preinstallation Environment), with X: mapped to either the SMB share or the RAM disk.

At this point, you can use whatever imaging/installation technology you want in order to install Windows. For example, the Ghost command-line tools work fine under Windows PE, and will grab a disk image from a server.

Alternatively, you can partition/format the disk from inside Windows PE, copy the I386 directory to the disk, and several other steps. Then, if you provide an unattend.txt file, when the machine next boots up (from the hard disk), it'll do an unattended installation of Windows.
_________________________
-- roger