Technical Introduction to Multicast

 

Technical Introduction to Multicast

High Performance Remoteboot
What is TCP/IP Multicast?
The TCP/IP BOOT-PROM can understand multicast sends of TFTP data. Multicast is a standard TCP/IP feature which is described in the Internet Request for Comments document RFC1054. Paraphrasing the introduction to this RFC gives a desciption of multicast relevant to TFTP:

" IP multicasting is defined as the transmission of an IP datagram to a "host group", a set of zero or more hosts identified by a single IP destination address. The membership of a host group is dynamic; that is, hosts may join and leave groups at any time. There is no restriction on the location or number of members in a host group. A host may be a member of more than one group at a time.A host group may be permanent or transient. A permanent group has a well-known, administratively assigned IP address. It is the address, not the membership of the group, that is permanent; at any time a permanent group may have any number of members, even zero. "

The bootix Implementation
Although multicast is standard RFC, doing TFTP multicasts is not. This is an extension specific to the TCP/IP BOOT PROM. The authors of the TFTP RFC documents have been approached about making some form of this a documented standard, but this has not as happened as yet. As soon as an RFC is produced we will endeavour to comply with it. Two changes are required, one being a new tag for BOOTP/DHCP, and the other being a definition of the way TFTP does client and server multicasts. In addition there needs to be reserved well-known ports for exchanging multicast tftp data. In the meantime, however, remote boot traffic is dramatically reduced at sites implementing this. There are no changes to standard TFTP, only to the packet headers under which this data is sent. There are not many changes that need to be made to a standard TFTP daemon, and most of these are administrative rather than technical requirements. The key difference is that all packets go to a specific IP address rather than the IP address of the requesting client. This multicast IP address is determined by the system administrator, and there must be one address per file that is required to be able to be sent. This IP address must be first transmitted to the client so that it knows what to listen for, and this is done through the BOOTP or DHCP response packet, in the vendor-specific tag section. In the absence of RFC support, at present the TCP/IP boot PROM gets all its setup information via BOOTP reply. This information consists of:

* An UDP port number (mtftp) on which the server receives packages from the client. (recommended: 75)
* An UDP port number (mtftp-data) on which the client receives packages from the server. (recommended: 76)
* An IP address, to which the server sends data to the client. Any multicast IP address starting at 224.0.0.0 can be used. Due to reservations only addresses starting at 225.0.0.0 should be used. (recommended: 225.0.0.1)

If multiple different files are to be transmitted, each file needs its own multicast IP address. The UDP port numbers are all the same.

The multi-platform TFTP server that comes with the TCP/IP BOOT-PROM uses the file mtftptab to define the file and multicast IP addresses to be used. Each line in this file defines one multicast IP address assignment. The first column holds the filename, the second the multicast IP address and the third one the UDP port (mtftp-data) to be used. The UDP ports should be the same for all files. Columns are separated by spaces.

For example:

/tftpboot/pcnfs.X 225.0.0.1 76
/tftpboot/pctcp.X 225.0.0.2 76
/tftpboot/ramd.X 225.0.1.100 76

The filename of the configuration file and the UDP port for receivement (mtftpd) is passed to the TFTP server as a command line argument:

tftpd -m /etc/mtftptab 75.

This is a possible use of the TFTP server:

tftpd -d /tftpboot -h -m /etc/mtftptab 75 -r -s 1408 59 -v 2 -p 12345

This way you can keep the normal TFTP server that comes with your system as the TCP/IP BOOT-PROM TFTP server connects to UDP port 12345 for standard RFC TFTP transmissions. If you also want to use the RFC TFTP transmission of the TCP/IP BOOT-PROM TFTP server just call it this way:

tftpd -d /tftpboot -h -m /etc/mtftptab 75 -r -s 1408 59 -v 2

The TCP/IP BOOT-PROM TFTP server does not support TFTP writing or netascii mode. If you need that, use the -p option to use your standard TFTP server. To activate the multicast TFTP feature on the client side, an option must be set in the BOOTP/DHCP configuration file. Note: Multicast is only supported on TCP/IP BOOT-PROMs starting with version 1.52. 8K ROMs (3C503, NE1000) and Intel Ethernet based controllers (EXOS205, EXP16F, NI5210, 3C507) cannot support multicasting TFTP due to a lack of memory. The version number of the driver defines wether the TCP/IP BOOT-PROM can multicast TFTP, the version number should have a M tagged. (e.g. WD8ISA 1.52M). The BOOTP/DHCP option has the following format:

:T160=4d74467450e1000001004b004c0000:

Any option starting at number 128 can be used. The TCP/IP BOOT-PROM recognizes the option by the magic ID 4d74467450 (ASCII: MtFtP) and not by the option number (160 in this example). The following four bytes hold the multicast IP address, to which the transmission is to be done. Here e1000001, this is decimal 225.0.0.1. This multicast IP address must be the same as the one in the TFTP server configuration file (e.g. /etc/mtftptab). The following two bytes hold the UDP port (mtftpd) on which the server listens for incoming requests. It's the same port that is specified by the -m command line argument, here 004b which is decimal 75. The UPD port (mtftpd-data), to which the server sends the packages to is specified by the next two bytes. This parameter must be the same as the one in the TFTP server configuration file (/etc/mtftptab). This value varies from file to file. Here we use 004c, which is decimal 76. The next byte holds the TFTP time-out for transmissions in seconds. If this value is 0, the PROM uses the default of two seconds. The last byte specifies a time-out for the opening of a TFTP transfer. If this value is 0, the PROM uses the default of four seconds.

 

posted on 2012-03-31 16:39  Richard.FreeBSD  阅读(132)  评论(0编辑  收藏  举报

导航