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の環境下ではフラグメントが発生します)。