Windows 10でTFTPクライアントを使う

ネットワーク機器を触っていると、configやfirmwareのアップロードやダウンロードにTFTPを使うシーンは少なからずありますが、Windows 10では初期状態でTFTPクライアントが無効になっているので、その有効化の方法と使い方をメモしておきます。

TFTP Clientの有効化

「コントロールパネル」→「プログラム」→「プログラムと機能」→「Windowsの機能の有効化または無効化」を開きます。

「TFTP Client」が初期状態では未チェックになっているので、チェックして「OK」をクリックします。これでTFTP Clientを使えるようになります。

ファイアウォールの変更

通常はクライアントソフトからの通信に関してはファイアウォールの変更は不要ですが、TFTP Clientについてはファイアウォールの変更が必要です。Wikiの Trivial File Transfer Protocolの説明がありますが、TFTP Serverへのアクセスには、当初宛先ポートとしてUDP 69が固定でつかわれるものの、戻りのパケットはTFTPサーバーは送信元ポートとしてUDP 69を使わず他のUDPポートを使います。例えば以下のようになります。

通信 送信元ポート 送信先ポート
(1) Win10 → TFTPサーバー (接続要求) 64987 69
(2) TFTPサーバー → Win10 (応答) 33248 64987
(3) Win10 → TFTPサーバー (データの送信) 64987 33248

(1)と(2)でポートのペアが変わっていますが、このように同じポートからパケットが戻ってこないケースでは、ファイアウォールでパケットは破棄されてしまいます。よって以下の手順で、TFTP Clientの通信を許可するようにファイアウォールの設定を変更します。



これで、Win10からTFTP Clientを使ってファイルのアップロードやダウンロードが出来るようになります。

TFTP Clientの使い方

コマンドプロンプトを立ち上げて、コマンドで操作します。例えばIPアドレスが192.168.4.59のTFTPサーバーにD:\hoge.tarをアップロードするときは以下となります。

> tftp -i 192.168.4.59 put d:\hoge.tar

32MBの制限

Windows標準のTFTP Clientを使っていて、TFTP Serverによっては32MBまでのファイルしか転送できないことがありました。具体的にどのケースでOKでどのケースでダメなのか、私が調べた限りでは以下となります。

TFTP Server 32MB以上のファイル
tftpd-hpa 5.2 (Debian9 / Raspberry Pi)
tftp-server-5.2-22 (CentOS7)
MikroTik Router OS 6.44.3 × (ダウンロードは〇)

Wikiでも説明されているように、TFTPでは標準で512byteづつ転送する仕様になっています。最大65535ブロックまで送れるので、512byte/ブロック x 65535ブロック = 約32MBまで転送可能です。ただし、roll over機能に対応している場合には、65535の後0に戻ることが出来るので、32MB以上も転送可能です。Router OSもroll overに対応しているのですが、私が試した限りはRouter OSからのダウンロードについては32MB以上でもOKでしたが、Router OSへのアップロードは32MB以上だと成功しませんでした。Router OSのバグですかね?

なお、ここに掲載されているWindows用のTFTPクライアントを使うことで、MikroTik Router OSのTFTP Serverにも32MB超のファイルをアップロードすることが出来ました(当該ソフトのファイアウォールの許可は必要です)。

> tftp.exe -i -b65000 192.168.41.61 put d:\hoge.tar

ここに掲載されているTFTP Clientは-bオプションでブロックサイズが指定可能なので(デフォルトだと512byteであり、x65535ブロック=32MBが上限となる)、これを65000byteと大きい値とすればOKです(ただし1パケットが65000バイト超となるので、MTU1500の環境下ではフラグメントが発生します)。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です