1

私は自分のPXEサーバーで作業しています(したがって、USBを見つけてフォーマットする必要なく、簡単にテストしたい新しいOSをインストールできました)。私は、 psychomario/PyPXEプロジェクトを調べて述べましたが、すぐに独自の TFTP サーバーを実装しました。ラップトップにある Intel UNDI PXE-2.1 に対してテストしています。

サイコマリオがサポートしていないことの 1 つは、大きなファイル (>32M) の送信です。RFC ( 13502347 ) は、それがどのように行われるべきかについて議論していませんが、明らかに 2 つのオプションがありました。ブロック サイズを増やす最初のオプションは機能しませんでした。これは、PXE クライアントが断片化された IP パケットを明らかに無視しているためです。

2 番目のオプションは、ローリング ブロックを使用することです。つまり、最後に到達したときに最初からカウントを開始します。クライアントはデータに確認応答しますが、データが終了すると、クライアントはブロック 0xffff の確認応答を送信し始めます (それが最後のブロックでなくても)。

接続を閉じて、そのブロックの空のデータ パケットを送信しようとしました。1 つ目は PXE でエラーが発生し、2 つ目は PXE で無限ループが発生しました。

セッションを終了するには、ブロック 0xffff の確認応答としてどのパケットを送信する必要がありますか?

4

1 に答える 1

2

1) TFTP サーバーは実際にブロック サイズ オプションを実装する必要があります。そうでない場合は、512 バイト ブロックに制限されます。RFC 2348 を参照してください。パケット全体が最小 MTU (一般的なイーサネット環境では 1500) より大きくならないようにブロック サイズをネゴシエートすることで、フラグメンテーションを常に回避できます。

2) TFTP の「ロールオーバー」を実装する必要があります。block # = 0xFFFF を送信して ack を取得した後、次のブロックを block # = 0x0000 として送信する必要があります。転送が完了するまで同様です。この機能をテストするときは、TFTP ブロックのロールオーバーを処理できる TFTP クライアントを使用してください。現在入手可能な実質的にすべての PXE クライアントは、これを非常にうまく行っています。

独自の PXE サーバーをコーディングする学習経験に加えて、今後数え切れないほどの問題に遭遇することを考慮してください。すぐに結果を得る必要がある場合は、すぐに使用できる PXE サーバー オプションのリストについて、「pxe サーバー」をグーグルで検索してください。

于 2014-05-25T13:05:43.173 に答える