RFC1542:Clarifications and Extensions for the Bootstrap Protocol

RFC1542Clarifications and Extensions for the Bootstrap Protocol

1. Introduction

。。。。。。。。。。。。

Unfortunately, the original BOOTP specification [1] left some issues of the protocol open to question.  The exact behavior of BOOTP relay agents formerly called "BOOTP forwarding agents") was not clearly specified.  Some parts of the overall protocol specification actually conflict, while other parts have been subject to misinterpretation, indicating that clarification is needed.  This memo addresses these problems.

不幸的是,传统的BOOTP说明遗留了很多公开可以讨论的问题。BOOTP中继代理(以前称为“BOOTP转发代理”)没有明确地定义和说明。一些重叠的协议说明实际上是有冲突的,当其他部分已经遭受误解时,声明分类时必须的。这个备忘录就是为了解决这些问题。

Since the introduction of BOOTP, the IEEE 802.5 Token Ring Network has been developed which presents a unique problem for BOOTP's particular message-transfer paradigm.  This memo also suggests a solution for this problem.

自从介绍BOOTP依赖,IEEE802.5令牌环网已经飞速发展,导致了BOOTP的特殊消息传输范例出现了一个唯一的问题,这份备忘录也是为了给这个问题提出一个解决方案。

NOTE: Unless otherwise specified in this document or a later document, the information and requirements specified througout this document also apply to extensions to BOOTP such as the Dynamic Host Configuration Protocol (DHCP) [3].

注意:除非否则在这份文档或者时以后的文档中指明,通过这份文档指定的信息和要求都可以运用到BOOTP的扩展协议比如DHCP

。。。。。。。。。

3. BOOTP Client Behavior

   This section clarifies various issues regarding BOOTP client behavior.

该部分分类了BOOTP客户端行为的各种问题。

3.1 Client use of the 'flags' field

3.1.1 The BROADCAST flag

   Normally, BOOTP servers and relay agents attempt to deliver BOOTREPLY messages directly to a client using unicast delivery.  The IP destination address (in the IP header) is set to the BOOTP 'yiaddr' address and the link-layer destination address is set to the BOOTP 'chaddr' address.  Unfortunately, some client implementations are unable to receive such unicast IP datagrams until they know their own IP address (thus we have a "chicken and egg" issue).  Often, however, they can receive broadcast IP datagrams (those with a valid IP broadcast address as the IP destination and the link-layer broadcast address as the link-layer destination).

正常情况下,BOOTP服务器和中继代理尝试直接地传递BOOTREPLY消息给一个客户端通过使用单播。IP地址的目的地址被设为BOOTP的“yiaddr”的地址和链路层目的地址设为BOOTP的“ciaddr”的地址。不幸的是,一些客户端的实现时无法接收这样单播的IP报文直至它们知道了自己的IP地址(这样我们就有了鸡和蛋的问题)。然而它们一般可以收到广播报文(就是那些带有一个有效的IP广播地址作为IP报文的目的地址和链路层广播地址作为链路地址)

   If a client falls into this category, it SHOULD set (to 1) the newly-defined BROADCAST flag in the 'flags' field of BOOTREPLY messages it generates.  This will provide a hint to BOOTP servers and relay agents that they should attempt to broadcast their BOOTREPLY messages to the client.

如果一个客户端进入这种情况,它应该将新定义在自己生成的BOOTP消息中“flag”字段的广播位置为1。者将会提供一个线索给BOOTP服务器和中继代理,那就是它们应该尝试广播自己的BOOTREPLY消息给客户端。

   If a client does not have this limitation (i.e., it is perfectly able to receive unicast BOOTREPLY messages), it SHOULD NOT set the BROADCAST flag (i.e., it SHOULD clear the BROADCAST flag to 0).

如果一个客户端没有这个限制的话(也就是说最好能够接收单播的BOOTREPLY消息),它应该不要设置广播位。

。。。。。。。。。。。

3.2 Definition of the 'secs' field

   The 'secs' field of a BOOTREQUEST message SHOULD represent the elapsed time, in seconds, since the client sent its first BOOTREQUEST message.  Note that this implies that the 'secs' field of the first BOOTREQUEST message SHOULD be set to zero.

BOOTREQUEST 消息中的“secs”字段应该代表了消逝的时间,(以秒为单位),自从客户端发送它的第一个请求包开始算起。注意这个暗示者该字段在发送第一个请求包时应该置为0

   Clients SHOULD NOT set the 'secs' field to a value which is constant for all BOOTREQUEST messages.

客户端不应该将其置为某个对于所有请求包来说的常量。

。。。。。。。。

3.3 Use of the 'ciaddr' and 'yiaddr' fields

   If a BOOTP client does not know what IP address it should be using, the client SHOULD set the 'ciaddr' field to 0.0.0.0.  If the client has the ability to remember the last IP address it was assigned, or it has been preconfigured with an IP address via some alternate mechanism, the client MAY fill the 'ciaddr' field with that IP address.  If the client does place a non-zero IP address in the 'ciaddr' field, the client MUST be prepared to accept incoming unicast datagrams addressed to that IP address and also answer ARP requests for that IP address (if ARP is used on that network).

  The BOOTP server is free to assign a different IP address (in the 'yiaddr' field) than the client expressed in 'ciaddr'.  The client SHOULD adopt the IP address specified in 'yiaddr' and begin using it as soon as possible.

如果一个BOOTP客户端不知道他应该使用哪个IP地址,客户端应该设置“ciaddr”为0.0.0.0。如果客户端有能力记得以前最后分配的地址,或者是通过某些网络机制预先分配了一个IP地址的话,客户端也许会填充“ciaddr”字段。如果客户端没有填充一个非0IP地址到“ciaddr”字段,那么客户端必须准备接收一个通过IP地址定位的单播数据报文,然后回应一个ARP请求给哪个地址。

BOOTP服务器自由地分配一个不同地IP地址(在“yiaddr”字段),客户端应该接受这个在“yiaddr”指定地地址并立即启用。

。。。。。。

3.5 Vendor information "magic cookie"

It is RECOMMENDED that a BOOTP client always fill the first four octets of the 'vend' (vendor information) field of a BOOTREQUEST with a four-octet identifier called a "magic cookie."  A BOOTP client SHOULD do this even if it has no special information to communicate

to the BOOTP server using the 'vend' field.  This aids the BOOTP server in determining what vendor information format it should use in its BOOTREPLY messages.

If a special vendor-specific magic cookie is not being used, a BOOTP client SHOULD use the dotted decimal value 99.130.83.99 as specified in [2].  In this case, if the client has no information to communicate to the server, the octet immediately following the magic cookie SHOULD be set to the "End" tag (255) and the remaining octets of the 'vend' field SHOULD be set to zero.

我们建议BOOTP客户端应该总是用所谓地幻数来填写“vend”字段地前四个字节。一个BOOTP客户端应该做这个即使它特别的信息使用“vend”字段与BOOTP服务器交流。这个辅助BOOTP服务器来决定它应该在BOOTREPLY消息中使用怎样的生产商消息格式。

如果一个特别的生厂商指定的幻数没有被使用,BOOTP客户端应该使用点十进制值99.130.83.99.这种情况下,如果客户端没有与服务器信息交流,与幻数一起的这个字节应该设置为END标记和剩余的字节应该置为0.

。。。。。。。。。

4. BOOTP Relay Agents

   In many cases, BOOTP clients and their associated BOOTP server(s) do not reside on the same IP network or subnet.  In such cases, some kind of third-party agent is required to transfer BOOTP messages between clients and servers.  Such an agent was originally referred to as a "BOOTP forwarding agent." However, in order to avoid confusion with the IP forwarding function of an IP router, the name "BOOTP relay agent" is hereby adopted instead.

在很多情况下,BOOTP客户端和它们关联的服务器并不在同一个网段内。这时,一些第三层的代理就被要求传输BOOTP消息在客户以及服务器之间。这样的代理以前指的是作为“BOOTP转发代理”。然而,为了避免一个IP路由的IP转发函数混乱,这儿用“BOOTP中继代理”替换之。

   DISCUSSION:

   A BOOTP relay agent performs a task which is distinct from an IP router's normal IP forwarding function.  While a router normally switches IP datagrams between networks more-or-less transparently, a BOOTP relay agent may more properly be thought to receive BOOTP messages as a final destination and then generate new BOOTP messages as a result.  It is incorrect for a relay agent implementation to simply forward a BOOTP message "straight through like a regular packet."

一个中继代理执行的任务是区分一个IP路由的正常IP转发函数的不同。然而一个路由器在网络之间或多或少地正常地交换IP报文,一个中继代理也许更合适地被认为接受BOOTP消息作为一个最后地目的地然后生成新的一个BOOTP消息作为结果。一个中继代理执行简单地转发BOOTP消息“直接得像转发一个正常地数据包”是不正确地做法。

    This relay-agent functionality is most conveniently located in the routers which interconnect the clients and servers, but may alternatively be located in a host which is directly connected to the client subnet.

Any Internet host or router which provides BOOTP relay-agent capability MUST conform to the specifications in this memo.

这个中继代理地功能就是最大地便利性定位客户端与服务器地交互路由。但是也许会非此即彼地定位与之字节相连地客户端子网的主机。

任何能够提供BOOTP中继代理性能的网络主机或是路由一定遵循这个备忘录的说明。

4.1 General BOOTP Processing for Relay Agents

   All locally delivered UDP messages whose UDP destination port number is BOOTPS (67) are considered for special processing by the host or router's logical BOOTP relay agent.

   In the case of a host, locally delivered datagrams are simply all datagrams normally received by that host, i.e., broadcast and multicast datagrams as well as unicast datagrams addressed to IP addresses of that host.

所有当地的从UDP目的接口67接受到的UDP报文都被认为经过主机或是路由的逻辑中继代理的特殊处理。

在一个主机的情况下,当地接受的报文。。。。。。。。。。。。。。。。。。

   In the case of a router, locally delivered datagrams are broadcast and multicast datagrams as well as unicast datagrams addressed to IP addresses of that router.  These are datagrams for which the router should be considered an end destination as opposed to an intermediate switching node.  Thus a unicast datagram with an IP destination not matching any of the router's IP addresses is not considered for processing by the router's logical BOOTP relay agent.

在有路由的情况下,当地递送的报文是广播和单播报文就如同定位到哪个路由地址的单播报文一样。这些路由应该考虑为目的地的报文。。。。。。。。。。。这样一个带着不匹配任何路由地址的单播报文不被考虑有中继代理来处理。

   Hosts and routers are usually required to silently discard incoming datagrams containing illegal IP source addresses.  This is generally known as "Martian address filtering."  One of these illegal addresses is 0.0.0.0 (or actually anything on network 0).  However, hosts or routers which support a BOOTP relay agent MUST accept for local delivery to the relay agent BOOTREQUEST messages whose IP source address is 0.0.0.0.  BOOTREQUEST messages from legal IP source addresses MUST also be accepted.

主机和路由经常被要求安静的丢掉包含不合理地址的数据报文。这个就是众所周知的“马丁地址过滤”。这些不合理的地址中就有0.0.0.0。然而,主机或是支持中继代理的路由必须在接受当地递送给中继代理的含有0.0.0.0BOOTREQUEST消息。从不合理的IP源地址的BOOTREQUEST消息必须也能够接受。

   A relay agent MUST silently discard any received UDP messages whose UDP destination port number is BOOTPC (68).

如果从68端口接受的任何UDP消息应该安静的丢掉。

   DISCUSSION:

   There should be no need for a relay agent to process messages addressed to the BOOTPC port.  Careful reading of the original BOOTP specification [1] will show this.  Nevertheless, some relay agent implementations incorrectly relay such messages.

   The consistency checks specified in Section 2.1 SHOULD be performed by the relay agent.  BOOTP messages not meeting these consistency checks MUST be silently discarded.

讨论:

一个中继代理不需要处理定位到BOOTPC端口的消息。细心地阅读以前BOOTP说明会发现这点。然而,一些中继代理错误的实现中继这样的消息。

2.1节中指定的相容性,中继代理应该很好的处理之。没有很好符合相容性检查的BOOTP消息应该被安静地处理掉。

4.1.1 BOOTREQUEST Messages

   Some configuration mechanism MUST exist to enable or disable the relaying of BOOTREQUEST messages.  Relaying MUST be disabled by default.

   When the BOOTP relay agent receives a BOOTREQUEST message, it MAY use the value of the 'secs' (seconds since client began booting) field of the request as a factor in deciding whether to relay the request.  If such a policy mechanism is implemented, its threshold SHOULD be configurable.

一些配置机制必须存在于使能或者是不是能中继请求消息。中继默认是不使能的。

BOOTP中继代理接收到请求消息时,它也许会使用“secs”字段的值作为决定是否中继请求的因素之一。如果这样一个机制被执行,它应该是可以配置的。

   DISCUSSION:

   To date, this feature of the BOOTP protocol has not necessarily been shown to be useful.  See Section 3.2 for a discussion.

   The relay agent MUST silently discard BOOTREQUEST messages whose  'hops' field exceeds the value 16.  A configuration option SHOULD be provided to set this threshold to a smaller value if desired by the network manager.  The default setting for a configurable threshold SHOULD be 4.

讨论:

迄今为止,BOOTP协议的这个特性已经不是很需要了。详细见3.2小节的讨论。

中继代理必须安静地扔掉那些hops字段超过16的请求消息。一个配置选项应该被提供来设置这个临界为一个比较小的值如果网络管理员需要的话。这个默认的配置临界值为4.

   If the relay agent does decide to relay the request, it MUST examine the 'giaddr' ("gateway" IP address) field.  If this field is zero, the relay agent MUST fill this field with the IP address of the interface on which the request was received.  If the interface has more than one IP address logically associated with it, the relay agent SHOULD choose one IP address associated with that interface and use it consistently for all BOOTP messages it relays.  If the 'giaddr' field contains some non-zero value, the 'giaddr' field MUST NOT be modified.  The relay agent MUST NOT, under any circumstances, fill the 'giaddr' field with a broadcast address as is suggested in [1] (Section 8, sixth paragraph).

如果中继代理没有决定中继该请求时,应该检查“giaddr”字段。如果该字段为0.中继代理必须用接受到该报文的接口的IP地址填充该字段。如果接口有很多IP地址,那么中继代理应该选择一个IP地址然后之后的类似工作都应该通过该IP地址。如果“giaddr”字段并不为0,“giaddr”不能够被修改。在任何情况下,中继代理必须不能填充一个广播地址到

giaddr”字段中。

   The value of the 'hops' field MUST be incremented. All other BOOTP fields MUST be preserved intact. At this point, the request is relayed to its new destination (or destinations).  This destination MUST be configurable.  Further, this destination configuration SHOULD be independent of the destination configuration for any other so-called "broadcast forwarders" (e.g., for the UDP-based TFTP, DNS, Time, etc.  protocols).

hops”字段的值必须自加。所有其他的BOOTP字段必须原封不动。在这方面,请求被中继到它的新的目的地。这个目的地必须能够可配置的。长远来看,这个目的地配置应该是对于所有其他所谓的“广播转发”的目的地配置独立的。

   DISCUSSION:

   The network manager may wish the relaying destination to be an IP unicast, multicast, broadcast, or some combination.  A configurable list of destination IP addresses provides good flexibility.  More flexible configuration schemes are encouraged.  For example, it may be desirable to send to the limited broadcast address (255.255.255.255) on specific physical interfaces.  However, if the BOOTREQUEST message was received as a broadcast, the relay agent MUST NOT rebroadcast the BOOTREQUEST on the physical interface from whence it came. A relay agent MUST use the same destination (or set of destinations) for all BOOTREQUEST messages it relays from a given client.、

讨论:

网络管理员也许希望中继目的IP是单播广播或组播或是混合播。一个目的IP地址的配置列表提供了好的灵活性。鼓励有更灵活的配置项目出现。比如,它也许希望发送给限制性的广播地址(255.255.255.255)在特殊的物理接口上,然而,如果请求消息以广播被发送,中继代理必须不能够再次广播请求消息在那个进来的物理接口。中继代理必须使用相同的目的地给所有它从一个给定的客户端而来的请求消息。

   DISCUSSION:

   At least one known relay agent implementation uses a round- robin scheme to provide load balancing across multiple BOOTP servers.  Each time it receives a new BOOTREQUEST message, it relays the message to the next BOOTP server in a list of servers.  Thus, with this relay agent, multiple consecutive BOOTREQUEST messages from a given client will be delivered to different servers.

讨论:

至少有一个知道中继代理的执行使用round- robin算法来提供负载平衡通过多个服务器的时候。每一次它收到请求消息,它中继该消息到下一个在列表中的服务器。这样,通过这个中继代理,多个连贯的请求消息将会被递送到不同的服务器。

   Unfortunately, this well-intentioned scheme reacts badly with DHCP [3] and perhaps other variations of the BOOTP protocol which depend on multiple exchanges of BOOTREQUEST and BOOTREPLY messages between clients and servers.  Therefore, all BOOTREQUEST messages from a given client MUST be relayed to the same destination (or set of destinations).

不幸的是,这个好意的项目却对DHCP和也许对BOOTP的其他依靠多个在服务器和客户端之间的请求和回应消息的交流产生不好的影响。因此所有的请求消息必须被中继到相同的目的地(或是一组目的地)。

One way to meet this requirement while providing some load- balancing benefit is to hash the client's link-layer address (or some other reliable client-identifying information) and use the resulting hash value to select the appropriate relay destination (or set of destinations).  The simplest solution, of course, is to not use a load-balancing scheme and just relay ALL received BOOTREQUEST messages to the same destination (or set of destinations).

符合该要求的一个方法便是提供一些负载均衡的好处来哈希客户端的链路层地址(或者一些其他可信赖的客户识别信息)和使用哈希值来选择合适的中继目的地。这个再简单不过的解决办法当然是不会使用负载均衡的项目和仅仅是中继所有的请求消息到相同的目的地。

   When transmitting the request to its next destination, the relay agent may set the IP Time-To-Live field to either the default value for new datagrams originated by the relay agent, or to the TTL of the original BOOTREQUEST decremented by (at least) one.

当传输请求到它的下一个目的地,中继代理也许会设置IP Time-To-Live字段为由中继代理阻止的新报文的默认值或是为以前减少1的请求消息的TTL

   DISCUSSION:

   As an extra precaution against BOOTREQUEST loops, it is  preferable to use the decremented TTL from the original BOOTREQUEST.  Unfortunately, this may be difficult to do in some implementations.

   If the BOOTREQUEST has a UDP checksum (i.e., the UDP checksum is non-zero), the checksum must be recalculated before  transmitting the request.

讨论:

作为一个额外的预防请求消息的环路,它更宁愿使用TTL减一的方法。不幸的是,这也许对一些实现偏显负载。

如果请求消息有一个UDP校验和,这个校验和在传输之前必须被重新计算出来。

4.1.2 BOOTREPLY Messages

   BOOTP relay agents relay BOOTREPLY messages only to BOOTP clients. It is the responsibility of BOOTP servers to send BOOTREPLY messages directly to the relay agent identified in the 'giaddr' field. Therefore, a relay agent may assume that all BOOTREPLY messages it receives are intended for BOOTP clients on its directly-connected networks.

BOOTP中继代理只中继BOOTRELAY消息给BOOTP客户端。它的职能就是服务器直接发送BOOTREPLY消息给在“giaddr”字段标识的中继地址。因此,一个中继代理也许会假设所有它接收的BOOTREPLY消息都是给在与自己直接相连的网络的客户端。

   When a relay agent receives a BOOTREPLY message, it should examine the BOOTP 'giaddr', 'yiaddr', 'chaddr', 'htype', and 'hlen' fields. These fields should provide adequate information for the relay agent to deliver the BOOTREPLY message to the client.

当一个中继代理接受到一个BOOTREPLY消息,它应该检查BOOTP'giaddr', 'yiaddr', 'chaddr', 'htype', and 'hlen'的字段。这些字段应该提供了确却的代理信息来传递消息给客户端。

   The 'giaddr' field can be used to identify the logical interface from which the reply must be sent (i.e., the host or router interface connected to the same network as the BOOTP client).  If the content of the 'giaddr' field does not match one of the relay agent's directly-connected logical interfaces, the BOOTREPLY messsage MUST be silently discarded.

giaddr”字段能够用于识别回应包应该发往的逻辑接口(也就是说主机或是路由的接口是与客户端连接的相同网络),如果“giaddr”字段的内容与中继代理直接相连的逻辑接口一个都匹配,这个BOOTREPLY消息必须被安静地丢掉!

   The 'htype', 'hlen', and 'chaddr' fields supply the link-layer hardware type, hardware address length, and hardware address of the client as defined in the ARP protocol [4] and the Assigned Numbers document [6].  The 'yiaddr' field is the IP address of the client, as assigned by the BOOTP server.

'htype', 'hlen', and 'chaddr'字段提供了链路硬件类型,硬件地址长度和定义在ARP协议地客户硬件地址和Assigned Numbers文档。“yiaddr”字段是客户端地地址。

   The relay agent SHOULD examine the newly-defined BROADCAST flag (see Sections 2.2 and 3.1.1 for more information).  If this flag is set to 1, the reply SHOULD be sent as an IP broadcast using the IP limited broadcast address 255.255.255.255 as the IP destination address and the link-layer broadcast address as the link-layer destination address.  If the BROADCAST flag is cleared (0), the reply SHOULD be sent as an IP unicast to the IP address specified by the 'yiaddr' field and the link-layer address specified in the 'chaddr' field.  If unicasting is not possible, the reply MAY be sent as a broadcast, in which case it SHOULD be sent to the link-layer broadcast address using the IP limited broadcast address 255.255.255.255 as the IP destination address.

中继代理应该检查最新定义地广播标志。如果该标志置为1,回应应该是广播包。如果没有置为1,回应应该发送到IP地址为“yiaddr”地址的IP单播和链路层地址为“chaddr”的地址。如果单播不被允许,回应可能以广播发送。

   DISCUSSION:

   The addition of the BROADCAST flag to the protocol is a workaround to help promote interoperability with certain client implementations. Note that since the 'flags' field was previously defined in [1] simply as an "unused" field, it is possible that old client or server implementations may accidentally and unknowingly set the new BROADCAST flag.  It is actually expected that such implementations will be rare (most implementations seem to zero-out this field), but interactions with such implementations must nevertheless be considered.  If an old client or server does set the BROADCAST flag to 1 incorrectly, conforming relay agents will generate broadcast BOOTREPLY messages to the corresponding client.  The BOOTREPLY messages should still properly reach the client, at the cost of one (otherwise unnecessary) additional broadcast.  This, however, is no worse than a server or relay agent which always broadcasts its BOOTREPLY messages.

讨论:

添加广播标志位到协议中有助于提升和客户端实现的互用性。注意以前“flag”字段知识简单的作为不使用的字段。有可能旧的客户端或服务器实现意外地设置了该新的广播位标志。实际上可以预料到这样地实现将会是成熟的,但互动行必须不被考虑了。如果一个旧的客户端或是服务器错误地设置该位为1,遵照规定地中继代理将会生成广播报文到对应地客户端。回应报文应该仍能够准确地到达客户端在牺牲额外一个广播报文的代价上。这样然而并不比一个服务器或是中继代理总是广播它地回应报文坏。

    Older client or server implementations which accidentally set the BROADCAST flag SHOULD be corrected to properly comply with this newer specification.

    All BOOTP fields MUST be preserved intact.  The relay agent MUST NOT modify any BOOTP field of the BOOTREPLY message when relaying it to the client.

   The reply MUST have its UDP destination port set to BOOTPC (68).

   If the BOOTREPLY has a UDP checksum (i.e., the UDP checksum is non-zero), the checksum must be recalculated before  transmitting the reply.

。。。。。。

5. BOOTP Server Behavior

。。。。。。。。。。

5.4 Strategy for Delivery of BOOTREPLY Messages

   Once the BOOTP server has created an appropriate BOOTREPLY message, that BOOTREPLY message must be properly delivered to the client. The server SHOULD first check the 'ciaddr' field.  If the 'ciaddr' field is non-zero, the BOOTREPLY message SHOULD be sent as an IP unicast to the IP address identified in the 'ciaddr' field.  The UDP destination port MUST be set to BOOTPC (68).  However, the server MUST be aware of the problems identified in Section 3.3.  The server MAY choose to ignore the 'ciaddr' field and act as if the 'ciaddr' field contains 0.0.0.0 (and thus continue with the rest of the delivery algorithm below).

一旦BOOTP服务器生成了一个标准地回应消息,该回应消息就必须能够准确地到达客户端。该服务器应该首先检查“ciaddr”字段。如果“ciaddr”字段非零,回应报文应该是单播的形式发送到“ciaddr”字段标识的目的IP中。UDP目的端口应该被设置为BOOTPC68)。然而,服务器应该能够觉察到在3.3节中出现的问题。服务器也许会选择忽略“ciaddr”字段好像该字段位“0.0.0.0”一样。

   The server SHOULD next check the 'giaddr' field.  If this field is non-zero, the server SHOULD send the BOOTREPLY as an IP unicast to the IP address identified in the 'giaddr' field.  The UDP destination port MUST be set to BOOTPS (67).  This action will deliver the BOOTREPLY message directly to the BOOTP relay agent closest to the client; the relay agent will then perform the final delivery to the client.  If the BOOTP server has prior knowledge that a particular client cannot receive unicast BOOTREPLY messages (e.g., the network manager has explicitly configured the server with such knowledge), the server MAY set the newly-defined BROADCAST flag to indicate that relay agents SHOULD broadcast the BOOTREPLY message to the client. Otherwise, the server MUST preserve the state of the BROADCAST flag so that the relay agent can correctly act upon it.

服务器应该接下去检查“giaddr”字段。如果这个字段不为0,服务器应该发送一个单播包到该字段指定的地址上。UDP目的端口应该被设置为BOOTPS67)。这个行为将会直接递送回应消息到离客户端最近的中继代理上;中继代理将会做最后的递送到客户端。如果服务器优先知道该客户端不能接收单播回应报文(比如网络管理员明确配置了服务器这种能力),服务器也许会设置新定义的广播位位1来表明中继代理应该广播回应报文给客户端,否则鼓舞其应该保留广播波位这样中继代理能够正确地执行。

   If the 'giaddr' field is set to 0.0.0.0, then the client resides on one of the same networks as the BOOTP server.  The server SHOULD examine the newly-defined BROADCAST flag (see Sections 2.2, 3.1.1 and 4.1.2 for more information).  If this flag is set to 1 or the server has prior knowledge that the client is unable to receive unicast BOOTREPLY messages, the reply SHOULD be sent as an IP broadcast using the IP limited broadcast address 255.255.255.255 as the IP destination address and the link-layer broadcast address as the link-layer destination address.  If the BROADCAST flag is cleared (0), the reply SHOULD be sent as an IP unicast to the IP address specified by the 'yiaddr' field and the link-layer address specified in the 'chaddr' field.  If unicasting is not possible, the reply MAY be sent as a broadcast in which case it SHOULD be sent to the link- layer broadcast address using the IP limited broadcast address 255.255.255.255 as the IP destination address.  In any case, the UDP destination port MUST be set to BOOTPC (68).

如果“giaddr”字段被设为0.0.0.0,那么客户端属于和服务器相同地子网中。服务器应该检查新定义地广播位。如果该位设为1或是服务器知道不能够单播给客户端,那么回应报文必须是广播的。如果广播位被清零,回应必须是单播的。如果单播不可能,回应也许会选择广播。无论什么情况,UDP目的端口都是68.

。。。。。。。。。。。。

你可能感兴趣的:(交换机学习,RFC1542)