1

我正在使用自己的 PXE 服务器(因此我可以安装我想轻松测试的新操作系统,而无需查找和格式化 USB)。我已经通过检查psychomario/PyPXE项目进行了说明,但很快实现了我自己的TFTP 服务器。我正在使用笔记本电脑上的 Intel UNDI PXE-2.1 再次对其进行测试。

Psychomario 不支持的一件事是发送大文件 (>32M)。RFC ( 1350 , 2347 ) 没有讨论应该如何做,但显然我有两个选择。第一个选项(增加块大小)不起作用,因为 PXE 客户端显然忽略了分段的 IP 数据包。

第二种选择是使用滚动块,即到达终点时从头开始计数。客户端确认数据,但是当数据结束时,客户端开始发送块 0xffff 的确认(即使这不是最后一个块)。

我尝试关闭连接并为该块发送空数据包。第一个导致 PXE 出错,第二个导致 PXE 无限循环。

为了结束会话,我需要发送什么数据包来响应块 0xffff 的 ack?

4

1 回答 1

2

1) 你的 TFTP 服务器应该真正实现块大小选项,否则你将被限制为 512 字节块。请参阅 RFC 2348。通过协商 blksize 始终可以避免分段,以使整个数据包永远不会大于最小 MTU(在典型的以太网环境中为 1500)。

2)您必须实施 TFTP“翻转”;在发送并获得确认块 # = 0xFFFF 之后,您应该将下一个块作为块 # = 0x0000 发送,依此类推,直到您完成传输。当您测试此功能时,请务必使用能够处理 TFTP 块翻转的 TFTP 客户端;当今可用的几乎所有 PXE 客户端都可以很好地做到这一点。

除了您对自己的 PXE 服务器进行编码的学习经验之外,请考虑您将在未来遇到无数问题。如果您需要快速获得结果,只需在谷歌“pxe 服务器”中获取准备使用的 PXE 服务器选项列表。

于 2014-05-25T13:05:43.173 回答